Mercurial > hg > CbC > CbC_llvm
diff clang/lib/Parse/ParseInit.cpp @ 252:1f2b6ac9f198 llvm-original
LLVM16-1
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Aug 2023 09:04:13 +0900 |
parents | c4bab56944e8 |
children |
line wrap: on
line diff
--- a/clang/lib/Parse/ParseInit.cpp Wed Nov 09 17:47:54 2022 +0900 +++ b/clang/lib/Parse/ParseInit.cpp Fri Aug 18 09:04:13 2023 +0900 @@ -15,6 +15,7 @@ #include "clang/Parse/Parser.h" #include "clang/Parse/RAIIObjectsForParser.h" #include "clang/Sema/Designator.h" +#include "clang/Sema/EnterExpressionEvaluationContext.h" #include "clang/Sema/Ownership.h" #include "clang/Sema/Scope.h" #include "llvm/ADT/STLExtras.h" @@ -181,7 +182,8 @@ NewSyntax); Designation D; - D.AddDesignator(Designator::getField(FieldName, SourceLocation(), NameLoc)); + D.AddDesignator(Designator::CreateFieldDesignator( + FieldName, SourceLocation(), NameLoc)); PreferredType.enterDesignatedInitializer( Tok.getLocation(), DesignatorCompletion.PreferredBaseType, D); return Actions.ActOnDesignatedInitializer(D, ColonLoc, true, @@ -210,8 +212,8 @@ return ExprError(); } - Desig.AddDesignator(Designator::getField(Tok.getIdentifierInfo(), DotLoc, - Tok.getLocation())); + Desig.AddDesignator(Designator::CreateFieldDesignator( + Tok.getIdentifierInfo(), DotLoc, Tok.getLocation())); ConsumeToken(); // Eat the identifier. continue; } @@ -360,7 +362,8 @@ // If this is a normal array designator, remember it. if (Tok.isNot(tok::ellipsis)) { - Desig.AddDesignator(Designator::getArray(Idx.get(), StartLoc)); + Desig.AddDesignator(Designator::CreateArrayDesignator(Idx.get(), + StartLoc)); } else { // Handle the gnu array range extension. Diag(Tok, diag::ext_gnu_array_range); @@ -371,9 +374,8 @@ SkipUntil(tok::r_square, StopAtSemi); return RHS; } - Desig.AddDesignator(Designator::getArrayRange(Idx.get(), - RHS.get(), - StartLoc, EllipsisLoc)); + Desig.AddDesignator(Designator::CreateArrayRangeDesignator( + Idx.get(), RHS.get(), StartLoc, EllipsisLoc)); } T.consumeClose(); @@ -429,7 +431,7 @@ /// initializer: [C99 6.7.8] /// '{' initializer-list '}' /// '{' initializer-list ',' '}' -/// [GNU] '{' '}' +/// [C23] '{' '}' /// /// initializer-list: /// designation[opt] initializer ...[opt] @@ -447,11 +449,14 @@ ExprVector InitExprs; if (Tok.is(tok::r_brace)) { - // Empty initializers are a C++ feature and a GNU extension to C. - if (!getLangOpts().CPlusPlus) - Diag(LBraceLoc, diag::ext_gnu_empty_initializer); + // Empty initializers are a C++ feature and a GNU extension to C before C23. + if (!getLangOpts().CPlusPlus) { + Diag(LBraceLoc, getLangOpts().C23 + ? diag::warn_c23_compat_empty_initializer + : diag::ext_c_empty_initializer); + } // Match the '}'. - return Actions.ActOnInitList(LBraceLoc, None, ConsumeBrace()); + return Actions.ActOnInitList(LBraceLoc, std::nullopt, ConsumeBrace()); } // Enter an appropriate expression evaluation context for an initializer list.