diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td --- a/clang/include/clang/Basic/DiagnosticParseKinds.td +++ b/clang/include/clang/Basic/DiagnosticParseKinds.td @@ -282,7 +282,7 @@ def err_expected_semi_after_attribute_list : Error< "expected ';' after attribute list">; def err_expected_semi_after_static_assert : Error< - "expected ';' after static_assert">; + "expected ';' after '%0'">; def err_expected_semi_for : Error<"expected ';' in 'for' statement specifier">; def err_single_decl_assign_in_for_range : Error< "range-based 'for' statement uses ':', not '='">; @@ -425,7 +425,7 @@ def err_bool_redeclaration : Error< "redeclaration of C++ built-in type 'bool'">; def warn_cxx98_compat_static_assert : Warning< - "static_assert declarations are incompatible with C++98">, + "'static_assert' declarations are incompatible with C++98">, InGroup, DefaultIgnore; def ext_ms_static_assert : ExtWarn< "use of 'static_assert' without inclusion of is a Microsoft " diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -1526,12 +1526,12 @@ // C++ declarations def err_static_assert_expression_is_not_constant : Error< - "static_assert expression is not an integral constant expression">; + "static assertion expression is not an integral constant expression">; def err_constexpr_if_condition_expression_is_not_constant : Error< "constexpr if condition is not a constant expression">; -def err_static_assert_failed : Error<"static_assert failed%select{: %1|}0">; +def err_static_assert_failed : Error<"static assertion failed%select{: %1|}0">; def err_static_assert_requirement_failed : Error< - "static_assert failed due to requirement '%0'%select{: %2|}1">; + "static assertion failed due to requirement '%0'%select{: %2|}1">; def warn_consteval_if_always_true : Warning< "consteval if is always true in an %select{unevaluated|immediate}0 context">, diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h --- a/clang/include/clang/Parse/Parser.h +++ b/clang/include/clang/Parse/Parser.h @@ -1043,7 +1043,7 @@ /// If the next token is not a semicolon, this emits the specified diagnostic, /// or, if there's just some closing-delimiter noise (e.g., ')' or ']') prior /// to the semicolon, consumes that extra token. - bool ExpectAndConsumeSemi(unsigned DiagID); + bool ExpectAndConsumeSemi(unsigned DiagID , StringRef TokenUsed = ""); /// The kind of extra semi diagnostic to emit. enum ExtraSemiKind { diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -60,7 +60,7 @@ SourceLocation &DeclEnd, SourceLocation InlineLoc) { assert(Tok.is(tok::kw_namespace) && "Not a namespace!"); - SourceLocation NamespaceLoc = ConsumeToken(); // eat the 'namespace'. + SourceLocation NamespaceLoc = ConsumeToken(); // eat the 'namespace'. ObjCDeclContextSwitch ObjCDC(*this); if (Tok.is(tok::code_completion)) { @@ -99,7 +99,7 @@ if (Tok.is(tok::identifier)) { Ident = Tok.getIdentifierInfo(); - IdentLoc = ConsumeToken(); // eat the identifier. + IdentLoc = ConsumeToken(); // eat the identifier. while (Tok.is(tok::coloncolon) && (NextToken().is(tok::identifier) || (NextToken().is(tok::kw_inline) && @@ -199,7 +199,7 @@ std::string RBraces; for (unsigned i = 0, e = ExtraNSs.size(); i != e; ++i) - RBraces += "} "; + RBraces += "} "; Diag(ExtraNSs[0].NamespaceLoc, diag::ext_nested_namespace_definition) << FixItHint::CreateReplacement( @@ -216,8 +216,9 @@ // If we're still good, complain about inline namespaces in non-C++0x now. if (InlineLoc.isValid()) - Diag(InlineLoc, getLangOpts().CPlusPlus11 ? - diag::warn_cxx98_compat_inline_namespace : diag::ext_inline_namespace); + Diag(InlineLoc, getLangOpts().CPlusPlus11 + ? diag::warn_cxx98_compat_inline_namespace + : diag::ext_inline_namespace); // Enter a scope for the namespace. ParseScope NamespaceScope(this, Scope::DeclScope); @@ -496,7 +497,7 @@ if (TemplateInfo.Kind) { SourceRange R = TemplateInfo.getSourceRange(); Diag(UsingLoc, diag::err_templated_using_directive_declaration) - << 0 /* directive */ << R << FixItHint::CreateRemoval(R); + << 0 /* directive */ << R << FixItHint::CreateRemoval(R); } Decl *UsingDir = ParseUsingDirective(Context, UsingLoc, DeclEnd, Attrs); @@ -651,9 +652,9 @@ } if (TryConsumeToken(tok::ellipsis, D.EllipsisLoc)) - Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? - diag::warn_cxx17_compat_using_declaration_pack : - diag::ext_using_declaration_pack); + Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 + ? diag::warn_cxx17_compat_using_declaration_pack + : diag::ext_using_declaration_pack); return false; } @@ -766,7 +767,7 @@ if (TemplateInfo.Kind) { SourceRange R = TemplateInfo.getSourceRange(); Diag(UsingLoc, diag::err_templated_using_directive_declaration) - << 1 /* declaration */ << R << FixItHint::CreateRemoval(R); + << 1 /* declaration */ << R << FixItHint::CreateRemoval(R); // Unfortunately, we have to bail out instead of recovering by // ignoring the parameters, just in case the nested name specifier @@ -811,9 +812,10 @@ } if (DeclsInGroup.size() > 1) - Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? - diag::warn_cxx17_compat_multi_using_declaration : - diag::ext_multi_using_declaration); + Diag(Tok.getLocation(), + getLangOpts().CPlusPlus17 + ? diag::warn_cxx17_compat_multi_using_declaration + : diag::ext_multi_using_declaration); // Eat ';'. DeclEnd = Tok.getLocation(); @@ -835,9 +837,9 @@ return nullptr; } - Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? - diag::warn_cxx98_compat_alias_declaration : - diag::ext_alias_declaration); + Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 + ? diag::warn_cxx98_compat_alias_declaration + : diag::ext_alias_declaration); // Type alias templates cannot be specialized. int SpecKind = -1; @@ -856,7 +858,7 @@ else Range = TemplateInfo.getSourceRange(); Diag(Range.getBegin(), diag::err_alias_declaration_specialization) - << SpecKind << Range; + << SpecKind << Range; SkipUntil(tok::semi); return nullptr; } @@ -869,15 +871,15 @@ return nullptr; } else if (D.TypenameLoc.isValid()) Diag(D.TypenameLoc, diag::err_alias_declaration_not_identifier) - << FixItHint::CreateRemoval(SourceRange( - D.TypenameLoc, - D.SS.isNotEmpty() ? D.SS.getEndLoc() : D.TypenameLoc)); + << FixItHint::CreateRemoval( + SourceRange(D.TypenameLoc, D.SS.isNotEmpty() ? D.SS.getEndLoc() + : D.TypenameLoc)); else if (D.SS.isNotEmpty()) Diag(D.SS.getBeginLoc(), diag::err_alias_declaration_not_identifier) - << FixItHint::CreateRemoval(D.SS.getRange()); + << FixItHint::CreateRemoval(D.SS.getRange()); if (D.EllipsisLoc.isValid()) Diag(D.EllipsisLoc, diag::err_alias_declaration_pack_expansion) - << FixItHint::CreateRemoval(SourceRange(D.EllipsisLoc)); + << FixItHint::CreateRemoval(SourceRange(D.EllipsisLoc)); Decl *DeclFromDeclSpec = nullptr; TypeResult TypeAlias = @@ -897,8 +899,8 @@ TemplateParameterLists *TemplateParams = TemplateInfo.TemplateParams; MultiTemplateParamsArg TemplateParamsArg( - TemplateParams ? TemplateParams->data() : nullptr, - TemplateParams ? TemplateParams->size() : 0); + TemplateParams ? TemplateParams->data() : nullptr, + TemplateParams ? TemplateParams->size() : 0); return Actions.ActOnAliasDeclaration(getCurScope(), AS, TemplateParamsArg, UsingLoc, D.Name, Attrs, TypeAlias, DeclFromDeclSpec); @@ -922,10 +924,13 @@ /// [C11] static_assert-declaration: /// _Static_assert ( constant-expression , string-literal ) ; /// -Decl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd){ +Decl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) { assert(Tok.isOneOf(tok::kw_static_assert, tok::kw__Static_assert) && "Not a static_assert declaration"); + // Save the token used for static assertion. + Token SavedTok = Tok; + if (Tok.is(tok::kw__Static_assert) && !getLangOpts().C11) Diag(Tok, diag::ext_c11_feature) << Tok.getName(); if (Tok.is(tok::kw_static_assert)) { @@ -974,7 +979,7 @@ if (!isTokenStringLiteral()) { Diag(Tok, diag::err_expected_string_literal) - << /*Source='static_assert'*/1; + << /*Source='static_assert'*/ 1; SkipMalformedDecl(); return nullptr; } @@ -989,10 +994,11 @@ T.consumeClose(); DeclEnd = Tok.getLocation(); - ExpectAndConsumeSemi(diag::err_expected_semi_after_static_assert); + // Passing the token used to the error message. + ExpectAndConsumeSemi(diag::err_expected_semi_after_static_assert, + SavedTok.getName()); - return Actions.ActOnStaticAssertDeclaration(StaticAssertLoc, - AssertExpr.get(), + return Actions.ActOnStaticAssertDeclaration(StaticAssertLoc, AssertExpr.get(), AssertMessage.get(), T.getCloseLocation()); } @@ -1003,8 +1009,8 @@ /// 'decltype' ( 'auto' ) [C++1y] /// SourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) { - assert(Tok.isOneOf(tok::kw_decltype, tok::annot_decltype) - && "Not a decltype specifier"); + assert(Tok.isOneOf(tok::kw_decltype, tok::annot_decltype) && + "Not a decltype specifier"); ExprResult Result; SourceLocation StartLoc = Tok.getLocation(); @@ -1028,11 +1034,11 @@ ConsumeToken(); BalancedDelimiterTracker T(*this, tok::l_paren); - if (T.expectAndConsume(diag::err_expected_lparen_after, - "decltype", tok::r_paren)) { + if (T.expectAndConsume(diag::err_expected_lparen_after, "decltype", + tok::r_paren)) { DS.SetTypeSpecError(); - return T.getOpenLocation() == Tok.getLocation() ? - StartLoc : T.getOpenLocation(); + return T.getOpenLocation() == Tok.getLocation() ? StartLoc + : T.getOpenLocation(); } // Check for C++1y 'decltype(auto)'. @@ -1041,8 +1047,8 @@ // be 'auto' since C++2b. Diag(Tok.getLocation(), getLangOpts().CPlusPlus14 - ? diag::warn_cxx11_compat_decltype_auto_type_specifier - : diag::ext_decltype_auto_type_specifier); + ? diag::warn_cxx11_compat_decltype_auto_type_specifier + : diag::ext_decltype_auto_type_specifier); ConsumeToken(); } else { // Parse the expression @@ -1100,18 +1106,17 @@ unsigned DiagID; const PrintingPolicy &Policy = Actions.getASTContext().getPrintingPolicy(); // Check for duplicate type specifiers (e.g. "int decltype(a)"). - if (Result.get() - ? DS.SetTypeSpecType(DeclSpec::TST_decltype, StartLoc, PrevSpec, - DiagID, Result.get(), Policy) - : DS.SetTypeSpecType(DeclSpec::TST_decltype_auto, StartLoc, PrevSpec, - DiagID, Policy)) { + if (Result.get() ? DS.SetTypeSpecType(DeclSpec::TST_decltype, StartLoc, + PrevSpec, DiagID, Result.get(), Policy) + : DS.SetTypeSpecType(DeclSpec::TST_decltype_auto, StartLoc, + PrevSpec, DiagID, Policy)) { Diag(StartLoc, DiagID) << PrevSpec; DS.SetTypeSpecError(); } return EndLoc; } -void Parser::AnnotateExistingDecltypeSpecifier(const DeclSpec& DS, +void Parser::AnnotateExistingDecltypeSpecifier(const DeclSpec &DS, SourceLocation StartLoc, SourceLocation EndLoc) { // make sure we have a token we can turn into an annotation token @@ -1124,15 +1129,14 @@ // semi-colon. EndLoc = PP.getLastCachedTokenLocation(); } - } - else - PP.EnterToken(Tok, /*IsReinject*/true); + } else + PP.EnterToken(Tok, /*IsReinject*/ true); Tok.setKind(tok::annot_decltype); setExprAnnotation(Tok, - DS.getTypeSpecType() == TST_decltype ? DS.getRepAsExpr() : - DS.getTypeSpecType() == TST_decltype_auto ? ExprResult() : - ExprError()); + DS.getTypeSpecType() == TST_decltype ? DS.getRepAsExpr() + : DS.getTypeSpecType() == TST_decltype_auto ? ExprResult() + : ExprError()); Tok.setAnnotationEndLoc(EndLoc); Tok.setLocation(StartLoc); PP.AnnotateCachedTokens(Tok); @@ -1144,8 +1148,8 @@ SourceLocation StartLoc = ConsumeToken(); BalancedDelimiterTracker T(*this, tok::l_paren); - if (T.expectAndConsume(diag::err_expected_lparen_after, - "__underlying_type", tok::r_paren)) { + if (T.expectAndConsume(diag::err_expected_lparen_after, "__underlying_type", + tok::r_paren)) { return; } @@ -1192,7 +1196,7 @@ // Ignore attempts to use typename if (Tok.is(tok::kw_typename)) { Diag(Tok, diag::err_expected_class_name_not_template) - << FixItHint::CreateRemoval(Tok.getLocation()); + << FixItHint::CreateRemoval(Tok.getLocation()); ConsumeToken(); } @@ -1211,7 +1215,7 @@ if (Tok.isOneOf(tok::kw_decltype, tok::annot_decltype)) { if (SS.isNotEmpty()) Diag(SS.getBeginLoc(), diag::err_unexpected_scope_on_base_decltype) - << FixItHint::CreateRemoval(SS.getRange()); + << FixItHint::CreateRemoval(SS.getRange()); // Fake up a Declarator to use with ActOnTypeName. DeclSpec DS(AttrFactory); @@ -1226,7 +1230,7 @@ if (Tok.is(tok::annot_template_id)) { TemplateIdAnnotation *TemplateId = takeTemplateIdAnnotation(Tok); if (TemplateId->mightBeType()) { - AnnotateTemplateIdTokenAsType(SS, /*IsClassName*/true); + AnnotateTemplateIdTokenAsType(SS, /*IsClassName*/ true); assert(Tok.is(tok::annot_typename) && "template-id -> type failed"); TypeResult Type = getTypeAnnotation(Tok); @@ -1253,10 +1257,9 @@ // required nor permitted" mode, and do this there. TemplateNameKind TNK = TNK_Non_template; TemplateTy Template; - if (!Actions.DiagnoseUnknownTemplateName(*Id, IdLoc, getCurScope(), - &SS, Template, TNK)) { - Diag(IdLoc, diag::err_unknown_template_name) - << Id; + if (!Actions.DiagnoseUnknownTemplateName(*Id, IdLoc, getCurScope(), &SS, + Template, TNK)) { + Diag(IdLoc, diag::err_unknown_template_name) << Id; } // Form the template name @@ -1269,7 +1272,7 @@ return true; if (Tok.is(tok::annot_template_id) && takeTemplateIdAnnotation(Tok)->mightBeType()) - AnnotateTemplateIdTokenAsType(SS, /*IsClassName*/true); + AnnotateTemplateIdTokenAsType(SS, /*IsClassName*/ true); // If we didn't end up with a typename token, there's nothing more we // can do. @@ -1332,28 +1335,29 @@ bool Parser::isValidAfterTypeSpecifier(bool CouldBeBitfield) { // This switch enumerates the valid "follow" set for type-specifiers. switch (Tok.getKind()) { - default: break; - case tok::semi: // struct foo {...} ; - case tok::star: // struct foo {...} * P; - case tok::amp: // struct foo {...} & R = ... - case tok::ampamp: // struct foo {...} && R = ... - case tok::identifier: // struct foo {...} V ; - case tok::r_paren: //(struct foo {...} ) {4} - case tok::coloncolon: // struct foo {...} :: a::b; - case tok::annot_cxxscope: // struct foo {...} a:: b; - case tok::annot_typename: // struct foo {...} a ::b; - case tok::annot_template_id: // struct foo {...} a ::b; - case tok::kw_decltype: // struct foo {...} decltype (a)::b; - case tok::l_paren: // struct foo {...} ( x); - case tok::comma: // __builtin_offsetof(struct foo{...} , - case tok::kw_operator: // struct foo operator ++() {...} - case tok::kw___declspec: // struct foo {...} __declspec(...) - case tok::l_square: // void f(struct f [ 3]) - case tok::ellipsis: // void f(struct f ... [Ns]) + default: + break; + case tok::semi: // struct foo {...} ; + case tok::star: // struct foo {...} * P; + case tok::amp: // struct foo {...} & R = ... + case tok::ampamp: // struct foo {...} && R = ... + case tok::identifier: // struct foo {...} V ; + case tok::r_paren: //(struct foo {...} ) {4} + case tok::coloncolon: // struct foo {...} :: a::b; + case tok::annot_cxxscope: // struct foo {...} a:: b; + case tok::annot_typename: // struct foo {...} a ::b; + case tok::annot_template_id: // struct foo {...} a ::b; + case tok::kw_decltype: // struct foo {...} decltype (a)::b; + case tok::l_paren: // struct foo {...} ( x); + case tok::comma: // __builtin_offsetof(struct foo{...} , + case tok::kw_operator: // struct foo operator ++() {...} + case tok::kw___declspec: // struct foo {...} __declspec(...) + case tok::l_square: // void f(struct f [ 3]) + case tok::ellipsis: // void f(struct f ... [Ns]) // FIXME: we should emit semantic diagnostic when declaration // attribute is in type attribute position. - case tok::kw___attribute: // struct foo __attribute__((used)) x; - case tok::annot_pragma_pack: // struct foo {...} _Pragma(pack(pop)); + case tok::kw___attribute: // struct foo __attribute__((used)) x; + case tok::annot_pragma_pack: // struct foo {...} _Pragma(pack(pop)); // struct foo {...} _Pragma(section(...)); case tok::annot_pragma_ms_pragma: // struct foo {...} _Pragma(vtordisp(pop)); @@ -1362,40 +1366,40 @@ case tok::annot_pragma_ms_pointers_to_members: return true; case tok::colon: - return CouldBeBitfield || // enum E { ... } : 2; - ColonIsSacred; // _Generic(..., enum E : 2); + return CouldBeBitfield || // enum E { ... } : 2; + ColonIsSacred; // _Generic(..., enum E : 2); // Microsoft compatibility - case tok::kw___cdecl: // struct foo {...} __cdecl x; - case tok::kw___fastcall: // struct foo {...} __fastcall x; - case tok::kw___stdcall: // struct foo {...} __stdcall x; - case tok::kw___thiscall: // struct foo {...} __thiscall x; - case tok::kw___vectorcall: // struct foo {...} __vectorcall x; + case tok::kw___cdecl: // struct foo {...} __cdecl x; + case tok::kw___fastcall: // struct foo {...} __fastcall x; + case tok::kw___stdcall: // struct foo {...} __stdcall x; + case tok::kw___thiscall: // struct foo {...} __thiscall x; + case tok::kw___vectorcall: // struct foo {...} __vectorcall x; // We will diagnose these calling-convention specifiers on non-function // declarations later, so claim they are valid after a type specifier. return getLangOpts().MicrosoftExt; // Type qualifiers - case tok::kw_const: // struct foo {...} const x; - case tok::kw_volatile: // struct foo {...} volatile x; - case tok::kw_restrict: // struct foo {...} restrict x; - case tok::kw__Atomic: // struct foo {...} _Atomic x; - case tok::kw___unaligned: // struct foo {...} __unaligned *x; + case tok::kw_const: // struct foo {...} const x; + case tok::kw_volatile: // struct foo {...} volatile x; + case tok::kw_restrict: // struct foo {...} restrict x; + case tok::kw__Atomic: // struct foo {...} _Atomic x; + case tok::kw___unaligned: // struct foo {...} __unaligned *x; // Function specifiers // Note, no 'explicit'. An explicit function must be either a conversion // operator or a constructor. Either way, it can't have a return type. - case tok::kw_inline: // struct foo inline f(); - case tok::kw_virtual: // struct foo virtual f(); - case tok::kw_friend: // struct foo friend f(); + case tok::kw_inline: // struct foo inline f(); + case tok::kw_virtual: // struct foo virtual f(); + case tok::kw_friend: // struct foo friend f(); // Storage-class specifiers - case tok::kw_static: // struct foo {...} static x; - case tok::kw_extern: // struct foo {...} extern x; - case tok::kw_typedef: // struct foo {...} typedef x; - case tok::kw_register: // struct foo {...} register x; - case tok::kw_auto: // struct foo {...} auto x; - case tok::kw_mutable: // struct foo {...} mutable x; - case tok::kw_thread_local: // struct foo {...} thread_local x; - case tok::kw_constexpr: // struct foo {...} constexpr x; - case tok::kw_consteval: // struct foo {...} consteval x; - case tok::kw_constinit: // struct foo {...} constinit x; + case tok::kw_static: // struct foo {...} static x; + case tok::kw_extern: // struct foo {...} extern x; + case tok::kw_typedef: // struct foo {...} typedef x; + case tok::kw_register: // struct foo {...} register x; + case tok::kw_auto: // struct foo {...} auto x; + case tok::kw_mutable: // struct foo {...} mutable x; + case tok::kw_thread_local: // struct foo {...} thread_local x; + case tok::kw_constexpr: // struct foo {...} constexpr x; + case tok::kw_consteval: // struct foo {...} consteval x; + case tok::kw_constinit: // struct foo {...} constinit x; // As shown above, type qualifiers and storage class specifiers absolutely // can occur after class specifiers according to the grammar. However, // almost no one actually writes code like this. If we see one of these, @@ -1414,7 +1418,7 @@ if (!isKnownToBeTypeSpecifier(NextToken())) return true; break; - case tok::r_brace: // struct bar { struct foo {...} } + case tok::r_brace: // struct bar { struct foo {...} } // Missing ';' at end of struct is accepted as an extension in C mode. if (!getLangOpts().CPlusPlus) return true; @@ -1507,8 +1511,7 @@ MaybeParseAttributes(PAKM_CXX11 | PAKM_Declspec | PAKM_GNU, attrs); // Parse inheritance specifiers. - if (Tok.isOneOf(tok::kw___single_inheritance, - tok::kw___multiple_inheritance, + if (Tok.isOneOf(tok::kw___single_inheritance, tok::kw___multiple_inheritance, tok::kw___virtual_inheritance)) ParseMicrosoftInheritanceClassAttributes(attrs); @@ -1519,61 +1522,32 @@ // C++11 attributes SourceLocation AttrFixitLoc = Tok.getLocation(); - if (TagType == DeclSpec::TST_struct && - Tok.isNot(tok::identifier) && - !Tok.isAnnotation() && - Tok.getIdentifierInfo() && - Tok.isOneOf(tok::kw___is_abstract, - tok::kw___is_aggregate, - tok::kw___is_arithmetic, - tok::kw___is_array, - tok::kw___is_assignable, - tok::kw___is_base_of, - tok::kw___is_class, - tok::kw___is_complete_type, - tok::kw___is_compound, - tok::kw___is_const, - tok::kw___is_constructible, - tok::kw___is_convertible, - tok::kw___is_convertible_to, - tok::kw___is_destructible, - tok::kw___is_empty, - tok::kw___is_enum, - tok::kw___is_floating_point, - tok::kw___is_final, - tok::kw___is_function, - tok::kw___is_fundamental, - tok::kw___is_integral, - tok::kw___is_interface_class, - tok::kw___is_literal, - tok::kw___is_lvalue_expr, - tok::kw___is_lvalue_reference, - tok::kw___is_member_function_pointer, - tok::kw___is_member_object_pointer, - tok::kw___is_member_pointer, - tok::kw___is_nothrow_assignable, - tok::kw___is_nothrow_constructible, - tok::kw___is_nothrow_destructible, - tok::kw___is_object, - tok::kw___is_pod, - tok::kw___is_pointer, - tok::kw___is_polymorphic, - tok::kw___is_reference, - tok::kw___is_rvalue_expr, - tok::kw___is_rvalue_reference, - tok::kw___is_same, - tok::kw___is_scalar, - tok::kw___is_sealed, - tok::kw___is_signed, - tok::kw___is_standard_layout, - tok::kw___is_trivial, - tok::kw___is_trivially_assignable, - tok::kw___is_trivially_constructible, - tok::kw___is_trivially_copyable, - tok::kw___is_union, - tok::kw___is_unsigned, - tok::kw___is_void, - tok::kw___is_volatile)) + if (TagType == DeclSpec::TST_struct && Tok.isNot(tok::identifier) && + !Tok.isAnnotation() && Tok.getIdentifierInfo() && + Tok.isOneOf( + tok::kw___is_abstract, tok::kw___is_aggregate, + tok::kw___is_arithmetic, tok::kw___is_array, tok::kw___is_assignable, + tok::kw___is_base_of, tok::kw___is_class, tok::kw___is_complete_type, + tok::kw___is_compound, tok::kw___is_const, tok::kw___is_constructible, + tok::kw___is_convertible, tok::kw___is_convertible_to, + tok::kw___is_destructible, tok::kw___is_empty, tok::kw___is_enum, + tok::kw___is_floating_point, tok::kw___is_final, + tok::kw___is_function, tok::kw___is_fundamental, + tok::kw___is_integral, tok::kw___is_interface_class, + tok::kw___is_literal, tok::kw___is_lvalue_expr, + tok::kw___is_lvalue_reference, tok::kw___is_member_function_pointer, + tok::kw___is_member_object_pointer, tok::kw___is_member_pointer, + tok::kw___is_nothrow_assignable, tok::kw___is_nothrow_constructible, + tok::kw___is_nothrow_destructible, tok::kw___is_object, + tok::kw___is_pod, tok::kw___is_pointer, tok::kw___is_polymorphic, + tok::kw___is_reference, tok::kw___is_rvalue_expr, + tok::kw___is_rvalue_reference, tok::kw___is_same, tok::kw___is_scalar, + tok::kw___is_sealed, tok::kw___is_signed, + tok::kw___is_standard_layout, tok::kw___is_trivial, + tok::kw___is_trivially_assignable, + tok::kw___is_trivially_constructible, tok::kw___is_trivially_copyable, + tok::kw___is_union, tok::kw___is_unsigned, tok::kw___is_void, + tok::kw___is_volatile)) // GNU libstdc++ 4.2 and libc++ use certain intrinsic names as the // name of struct templates, but some are keywords in GCC >= 4.3 // and Clang. Therefore, when we see the token sequence "struct @@ -1767,7 +1741,7 @@ // C++ [class.friend]p2: // A class shall not be defined in a friend declaration. Diag(Tok.getLocation(), diag::err_friend_decl_defines_type) - << SourceRange(DS.getFriendSpecLoc()); + << SourceRange(DS.getFriendSpecLoc()); // Skip everything up to the semicolon, so that this looks like a proper // friend class (or template thereof) declaration. @@ -1821,7 +1795,7 @@ // A semicolon was missing after this declaration. Diagnose and recover. ExpectAndConsume(tok::semi, diag::err_expected_after, DeclSpec::getSpecifierName(TagType, PPol)); - PP.EnterToken(Tok, /*IsReinject*/true); + PP.EnterToken(Tok, /*IsReinject*/ true); Tok.setKind(tok::semi); } } else @@ -1838,10 +1812,10 @@ SourceRange AttrRange = Attributes.Range; if (AttrRange.isValid()) { Diag(AttrRange.getBegin(), diag::err_attributes_not_allowed) - << AttrRange - << FixItHint::CreateInsertionFromRange(AttrFixitLoc, - CharSourceRange(AttrRange, true)) - << FixItHint::CreateRemoval(AttrRange); + << AttrRange + << FixItHint::CreateInsertionFromRange( + AttrFixitLoc, CharSourceRange(AttrRange, true)) + << FixItHint::CreateRemoval(AttrRange); // Recover by adding misplaced attributes to the attribute list // of the class so they can be applied on the class later. @@ -1849,12 +1823,13 @@ } } - if (!Name && !TemplateId && (DS.getTypeSpecType() == DeclSpec::TST_error || - TUK != Sema::TUK_Definition)) { + if (!Name && !TemplateId && + (DS.getTypeSpecType() == DeclSpec::TST_error || + TUK != Sema::TUK_Definition)) { if (DS.getTypeSpecType() != DeclSpec::TST_error) { // We have a declaration or reference to an anonymous class. Diag(StartLoc, diag::err_anon_type_definition) - << DeclSpec::getSpecifierName(TagType, Policy); + << DeclSpec::getSpecifierName(TagType, Policy); } // If we are parsing a definition and stop at a base-clause, continue on @@ -1869,7 +1844,7 @@ // Create the tag portion of the class or class template. DeclResult TagOrTempResult = true; // invalid - TypeResult TypeResult = true; // invalid + TypeResult TypeResult = true; // invalid bool Owned = false; Sema::SkipBodyInfo SkipBody; @@ -1881,7 +1856,7 @@ if (TemplateId->isInvalid()) { // Can't build the declaration. } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && - TUK == Sema::TUK_Declaration) { + TUK == Sema::TUK_Declaration) { // This is an explicit instantiation of a class template. ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, /*DiagnoseEmptyAttrs=*/true); @@ -1901,14 +1876,10 @@ TemplateInfo.Kind == ParsedTemplateInfo::NonTemplate)) { ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, /*DiagnoseEmptyAttrs=*/true); - TypeResult = Actions.ActOnTagTemplateIdType(TUK, TagType, StartLoc, - SS, - TemplateId->TemplateKWLoc, - TemplateId->Template, - TemplateId->TemplateNameLoc, - TemplateId->LAngleLoc, - TemplateArgsPtr, - TemplateId->RAngleLoc); + TypeResult = Actions.ActOnTagTemplateIdType( + TUK, TagType, StartLoc, SS, TemplateId->TemplateKWLoc, + TemplateId->Template, TemplateId->TemplateNameLoc, + TemplateId->LAngleLoc, TemplateArgsPtr, TemplateId->RAngleLoc); } else { // This is an explicit specialization or a class template // partial specialization. @@ -1990,7 +1961,7 @@ // If the declarator-id is not a template-id, issue a diagnostic and // recover by ignoring the 'template' keyword. Diag(Tok, diag::err_template_defn_explicit_instantiation) - << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc); + << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc); TemplateParams = nullptr; } @@ -2002,7 +1973,7 @@ MultiTemplateParamsArg TParams; if (TUK != Sema::TUK_Reference && TemplateParams) TParams = - MultiTemplateParamsArg(&(*TemplateParams)[0], TemplateParams->size()); + MultiTemplateParamsArg(&(*TemplateParams)[0], TemplateParams->size()); stripTypeAttributesOffDeclSpec(attrs, DS, TUK); @@ -2020,8 +1991,8 @@ // less common call. if (IsDependent) { assert(TUK == Sema::TUK_Reference || TUK == Sema::TUK_Friend); - TypeResult = Actions.ActOnDependentTag(getCurScope(), TagType, TUK, - SS, Name, StartLoc, NameLoc); + TypeResult = Actions.ActOnDependentTag(getCurScope(), TagType, TUK, SS, + Name, StartLoc, NameLoc); } } @@ -2071,10 +2042,9 @@ NameLoc.isValid() ? NameLoc : StartLoc, PrevSpec, DiagID, TypeResult.get(), Policy); } else if (!TagOrTempResult.isInvalid()) { - Result = DS.SetTypeSpecType(TagType, StartLoc, - NameLoc.isValid() ? NameLoc : StartLoc, - PrevSpec, DiagID, TagOrTempResult.get(), Owned, - Policy); + Result = DS.SetTypeSpecType( + TagType, StartLoc, NameLoc.isValid() ? NameLoc : StartLoc, PrevSpec, + DiagID, TagOrTempResult.get(), Owned, Policy); } else { DS.SetTypeSpecError(); return; @@ -2183,12 +2153,12 @@ // Parse the 'virtual' keyword (again!), in case it came after the // access specifier. - if (Tok.is(tok::kw_virtual)) { + if (Tok.is(tok::kw_virtual)) { SourceLocation VirtualLoc = ConsumeToken(); if (IsVirtual) { // Complain about duplicate 'virtual' Diag(VirtualLoc, diag::err_dup_virtual) - << FixItHint::CreateRemoval(VirtualLoc); + << FixItHint::CreateRemoval(VirtualLoc); } IsVirtual = true; @@ -2237,10 +2207,14 @@ /// 'public' AccessSpecifier Parser::getAccessSpecifierIfPresent() const { switch (Tok.getKind()) { - default: return AS_none; - case tok::kw_private: return AS_private; - case tok::kw_protected: return AS_protected; - case tok::kw_public: return AS_public; + default: + return AS_none; + case tok::kw_private: + return AS_private; + case tok::kw_protected: + return AS_protected; + case tok::kw_public: + return AS_public; } } @@ -2248,10 +2222,9 @@ /// delayed, e.g., default arguments or an exception-specification, create a /// late-parsed method declaration record to handle the parsing at the end of /// the class definition. -void Parser::HandleMemberFunctionDeclDelays(Declarator& DeclaratorInfo, +void Parser::HandleMemberFunctionDeclDelays(Declarator &DeclaratorInfo, Decl *ThisDecl) { - DeclaratorChunk::FunctionTypeInfo &FTI - = DeclaratorInfo.getFunctionTypeInfo(); + DeclaratorChunk::FunctionTypeInfo &FTI = DeclaratorInfo.getFunctionTypeInfo(); // If there was a late-parsed exception-specification, we'll need a // late parse bool NeedLateParse = FTI.getExceptionSpecType() == EST_Unparsed; @@ -2348,9 +2321,9 @@ if (FriendLoc.isValid()) { Diag(Tok.getLocation(), diag::err_friend_decl_spec) - << VirtSpecifiers::getSpecifierName(Specifier) - << FixItHint::CreateRemoval(Tok.getLocation()) - << SourceRange(FriendLoc, FriendLoc); + << VirtSpecifiers::getSpecifierName(Specifier) + << FixItHint::CreateRemoval(Tok.getLocation()) + << SourceRange(FriendLoc, FriendLoc); ConsumeToken(); continue; } @@ -2360,13 +2333,12 @@ const char *PrevSpec = nullptr; if (VS.SetSpecifier(Specifier, Tok.getLocation(), PrevSpec)) Diag(Tok.getLocation(), diag::err_duplicate_virt_specifier) - << PrevSpec - << FixItHint::CreateRemoval(Tok.getLocation()); + << PrevSpec << FixItHint::CreateRemoval(Tok.getLocation()); if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) { Diag(Tok.getLocation(), diag::err_override_control_interface) - << VirtSpecifiers::getSpecifierName(Specifier); + << VirtSpecifiers::getSpecifierName(Specifier); } else if (Specifier == VirtSpecifiers::VS_Sealed) { Diag(Tok.getLocation(), diag::ext_ms_sealed_keyword); } else if (Specifier == VirtSpecifiers::VS_Abstract) { @@ -2436,7 +2408,8 @@ VS, getCurrentClass().IsInterface, DeclaratorInfo.getDeclSpec().getFriendSpecLoc()); if (!VS.isUnset()) - MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(DeclaratorInfo, VS); + MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(DeclaratorInfo, + VS); } // If a simple-asm-expr is present, parse it. @@ -2470,7 +2443,8 @@ if (AL.isKnownToGCC() && !AL.isCXX11Attribute()) Diag(AL.getLoc(), diag::warn_gcc_attribute_location); - MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(DeclaratorInfo, VS); + MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(DeclaratorInfo, + VS); } } @@ -2487,8 +2461,7 @@ /// Look for declaration specifiers possibly occurring after C++11 /// virt-specifier-seq and diagnose them. void Parser::MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq( - Declarator &D, - VirtSpecifiers &VS) { + Declarator &D, VirtSpecifiers &VS) { DeclSpec DS(AttrFactory); // GNU-style and C++11 attributes are not allowed here, but they will be @@ -2526,15 +2499,15 @@ SourceLocation RefQualifierLoc; if (ParseRefQualifier(RefQualifierIsLValueRef, RefQualifierLoc)) { const char *Name = (RefQualifierIsLValueRef ? "& " : "&& "); - FixItHint Insertion = FixItHint::CreateInsertion(VS.getFirstLocation(), Name); + FixItHint Insertion = + FixItHint::CreateInsertion(VS.getFirstLocation(), Name); Function.RefQualifierIsLValueRef = RefQualifierIsLValueRef; Function.RefQualifierLoc = RefQualifierLoc; Diag(RefQualifierLoc, diag::err_declspec_after_virtspec) - << (RefQualifierIsLValueRef ? "&" : "&&") - << VirtSpecifiers::getSpecifierName(VS.getLastSpecifier()) - << FixItHint::CreateRemoval(RefQualifierLoc) - << Insertion; + << (RefQualifierIsLValueRef ? "&" : "&&") + << VirtSpecifiers::getSpecifierName(VS.getLastSpecifier()) + << FixItHint::CreateRemoval(RefQualifierLoc) << Insertion; D.SetRangeEnd(RefQualifierLoc); } } @@ -2676,10 +2649,10 @@ // Handle: member-declaration ::= '__extension__' member-declaration if (Tok.is(tok::kw___extension__)) { // __extension__ silences extension warnings in the subexpression. - ExtensionRAIIObject O(Diags); // Use RAII to do this. + ExtensionRAIIObject O(Diags); // Use RAII to do this. ConsumeToken(); - return ParseCXXClassMemberDeclaration(AS, AccessAttrs, - TemplateInfo, TemplateDiags); + return ParseCXXClassMemberDeclaration(AS, AccessAttrs, TemplateInfo, + TemplateDiags); } ParsedAttributes DeclAttrs(AttrFactory); @@ -2756,9 +2729,9 @@ return nullptr; MultiTemplateParamsArg TemplateParams( - TemplateInfo.TemplateParams? TemplateInfo.TemplateParams->data() - : nullptr, - TemplateInfo.TemplateParams? TemplateInfo.TemplateParams->size() : 0); + TemplateInfo.TemplateParams ? TemplateInfo.TemplateParams->data() + : nullptr, + TemplateInfo.TemplateParams ? TemplateInfo.TemplateParams->size() : 0); if (TryConsumeToken(tok::semi)) { if (DS.isFriendSpecified()) @@ -2769,7 +2742,7 @@ getCurScope(), AS, DS, DeclAttrs, TemplateParams, false, AnonRecord); DS.complete(TheDecl); if (AnonRecord) { - Decl* decls[] = {AnonRecord, TheDecl}; + Decl *decls[] = {AnonRecord, TheDecl}; return Actions.BuildDeclaratorGroup(decls); } return Actions.ConvertDeclToDeclGroup(TheDecl); @@ -2787,7 +2760,7 @@ SourceLocation EqualLoc; SourceLocation PureSpecLoc; - auto TryConsumePureSpecifier = [&] (bool AllowDefinition) { + auto TryConsumePureSpecifier = [&](bool AllowDefinition) { if (Tok.isNot(tok::equal)) return false; @@ -2891,9 +2864,8 @@ DS.ClearStorageClassSpecs(); } - Decl *FunDecl = - ParseCXXInlineMethodDef(AS, AccessAttrs, DeclaratorInfo, TemplateInfo, - VS, PureSpecLoc); + Decl *FunDecl = ParseCXXInlineMethodDef(AS, AccessAttrs, DeclaratorInfo, + TemplateInfo, VS, PureSpecLoc); if (FunDecl) { for (unsigned i = 0, ni = CommonLateParsedAttrs.size(); i < ni; ++i) { @@ -2961,17 +2933,16 @@ SmallVector Ranges; DeclaratorInfo.getCXX11AttributeRanges(Ranges); for (SmallVectorImpl::iterator I = Ranges.begin(), - E = Ranges.end(); I != E; ++I) + E = Ranges.end(); + I != E; ++I) Diag((*I).getBegin(), diag::err_attributes_not_allowed) << *I; ThisDecl = Actions.ActOnFriendFunctionDecl(getCurScope(), DeclaratorInfo, TemplateParams); } else { - ThisDecl = Actions.ActOnCXXMemberDeclarator(getCurScope(), AS, - DeclaratorInfo, - TemplateParams, - BitfieldSize.get(), - VS, HasInClassInit); + ThisDecl = Actions.ActOnCXXMemberDeclarator( + getCurScope(), AS, DeclaratorInfo, TemplateParams, BitfieldSize.get(), + VS, HasInClassInit); if (VarTemplateDecl *VT = ThisDecl ? dyn_cast(ThisDecl) : nullptr) @@ -3031,7 +3002,8 @@ Actions.ActOnUninitializedDecl(ThisDecl); SkipUntil(tok::comma, StopAtSemi | StopBeforeMatch); } else if (ThisDecl) - Actions.AddInitializerToDecl(ThisDecl, Init.get(), EqualLoc.isInvalid()); + Actions.AddInitializerToDecl(ThisDecl, Init.get(), + EqualLoc.isInvalid()); } else if (ThisDecl && DS.getStorageClassSpec() == DeclSpec::SCS_static) // No initializer. Actions.ActOnUninitializedDecl(ThisDecl); @@ -3069,7 +3041,7 @@ // the start of a declarator. The comma was probably a typo for a // semicolon. Diag(CommaLoc, diag::err_expected_semi_declaration) - << FixItHint::CreateReplacement(CommaLoc, ";"); + << FixItHint::CreateReplacement(CommaLoc, ";"); ExpectSemi = false; break; } @@ -3127,23 +3099,23 @@ /// be a constant-expression. ExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) { - assert(Tok.isOneOf(tok::equal, tok::l_brace) - && "Data member initializer not starting with '=' or '{'"); + assert(Tok.isOneOf(tok::equal, tok::l_brace) && + "Data member initializer not starting with '=' or '{'"); EnterExpressionEvaluationContext Context( Actions, Sema::ExpressionEvaluationContext::PotentiallyEvaluated, D); if (TryConsumeToken(tok::equal, EqualLoc)) { if (Tok.is(tok::kw_delete)) { // In principle, an initializer of '= delete p;' is legal, but it will - // never type-check. It's better to diagnose it as an ill-formed expression - // than as an ill-formed deleted non-function member. - // An initializer of '= delete p, foo' will never be parsed, because - // a top-level comma always ends the initializer expression. + // never type-check. It's better to diagnose it as an ill-formed + // expression than as an ill-formed deleted non-function member. An + // initializer of '= delete p, foo' will never be parsed, because a + // top-level comma always ends the initializer expression. const Token &Next = NextToken(); if (IsFunction || Next.isOneOf(tok::semi, tok::comma, tok::eof)) { if (IsFunction) Diag(ConsumeToken(), diag::err_default_delete_in_multiple_declaration) - << 1 /* delete */; + << 1 /* delete */; else Diag(ConsumeToken(), diag::err_deleted_non_function); return ExprError(); @@ -3151,7 +3123,7 @@ } else if (Tok.is(tok::kw_default)) { if (IsFunction) Diag(Tok, diag::err_default_delete_in_multiple_declaration) - << 0 /* default */; + << 0 /* default */; else Diag(ConsumeToken(), diag::err_default_special_members) << getLangOpts().CPlusPlus20; @@ -3190,7 +3162,7 @@ // within a template argument). if (Tok.is(tok::colon)) { // Enter the scope of the class so that we can correctly parse its bases. - ParseScope ClassScope(this, Scope::ClassScope|Scope::DeclScope); + ParseScope ClassScope(this, Scope::ClassScope | Scope::DeclScope); ParsingClassDefinition ParsingDef(*this, TagDecl, /*NonNestedClass*/ true, TagType == DeclSpec::TST_interface); auto OldContext = @@ -3318,8 +3290,8 @@ default: if (tok::isPragmaAnnotation(Tok.getKind())) { Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) - << DeclSpec::getSpecifierName(TagType, - Actions.getASTContext().getPrintingPolicy()); + << DeclSpec::getSpecifierName( + TagType, Actions.getASTContext().getPrintingPolicy()); ConsumeAnnotationToken(); return nullptr; } @@ -3338,9 +3310,9 @@ ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) { assert((TagType == DeclSpec::TST_struct || - TagType == DeclSpec::TST_interface || - TagType == DeclSpec::TST_union || - TagType == DeclSpec::TST_class) && "Invalid TagType!"); + TagType == DeclSpec::TST_interface || + TagType == DeclSpec::TST_union || TagType == DeclSpec::TST_class) && + "Invalid TagType!"); llvm::TimeTraceScope TimeScope("ParseClass", [&]() { if (auto *TD = dyn_cast_or_null(TagDecl)) @@ -3363,10 +3335,10 @@ // The Microsoft extension __interface does not permit nested classes. if (getCurrentClass().IsInterface) { Diag(RecordLoc, diag::err_invalid_member_in_interface) - << /*ErrorType=*/6 - << (isa(TagDecl) - ? cast(TagDecl)->getQualifiedNameAsString() - : "(anonymous)"); + << /*ErrorType=*/6 + << (isa(TagDecl) + ? cast(TagDecl)->getQualifiedNameAsString() + : "(anonymous)"); } break; } @@ -3379,7 +3351,7 @@ } // Enter a scope for the class. - ParseScope ClassScope(this, Scope::ClassScope|Scope::DeclScope); + ParseScope ClassScope(this, Scope::ClassScope | Scope::DeclScope); // Note that we are parsing a new (potentially-nested) class definition. ParsingClassDefinition ParsingDef(*this, TagDecl, NonNestedClass, @@ -3492,7 +3464,7 @@ if (SuggestFixIt) { LBraceDiag << FixItHint::CreateInsertion(BraceLoc, " {"); // Try recovering from missing { after base-clause. - PP.EnterToken(Tok, /*IsReinject*/true); + PP.EnterToken(Tok, /*IsReinject*/ true); Tok.setKind(tok::l_brace); } else { if (TagDecl) @@ -3586,10 +3558,8 @@ // FIXME: Suggest where the close brace should have gone by looking // at indentation changes within the definition body. - Diag(D->getLocation(), - diag::err_missing_end_of_definition) << D; - Diag(Tok.getLocation(), - diag::note_missing_end_of_definition_before) << D; + Diag(D->getLocation(), diag::err_missing_end_of_definition) << D; + Diag(Tok.getLocation(), diag::note_missing_end_of_definition_before) << D; // Push '};' onto the token stream to recover. PP.EnterToken(Tok, /*IsReinject*/ true); @@ -3632,7 +3602,7 @@ PoisonSEHIdentifiersRAIIObject PoisonSEHIdentifiers(*this, true); SourceLocation ColonLoc = ConsumeToken(); - SmallVector MemInitializers; + SmallVector MemInitializers; bool AnyErrors = false; do { @@ -3659,12 +3629,12 @@ Tok.isOneOf(tok::identifier, tok::coloncolon)) { SourceLocation Loc = PP.getLocForEndOfToken(PrevTokLocation); Diag(Loc, diag::err_ctor_init_missing_comma) - << FixItHint::CreateInsertion(Loc, ", "); + << FixItHint::CreateInsertion(Loc, ", "); } else { // Skip over garbage, until we get to '{'. Don't eat the '{'. if (!MemInit.isInvalid()) - Diag(Tok.getLocation(), diag::err_expected_either) << tok::l_brace - << tok::comma; + Diag(Tok.getLocation(), diag::err_expected_either) + << tok::l_brace << tok::comma; SkipUntil(tok::l_brace, StopAtSemi | StopBeforeMatch); break; } @@ -3718,7 +3688,7 @@ ? takeTemplateIdAnnotation(Tok) : nullptr; if (TemplateId && TemplateId->mightBeType()) { - AnnotateTemplateIdTokenAsType(SS, /*IsClassName*/true); + AnnotateTemplateIdTokenAsType(SS, /*IsClassName*/ true); assert(Tok.is(tok::annot_typename) && "template-id -> type failed"); TemplateTypeTy = getTypeAnnotation(Tok); ConsumeAnnotationToken(); @@ -3745,7 +3715,7 @@ return Actions.ActOnMemInitializer(ConstructorDecl, getCurScope(), SS, II, TemplateTypeTy.get(), DS, IdLoc, InitList.get(), EllipsisLoc); - } else if(Tok.is(tok::l_paren)) { + } else if (Tok.is(tok::l_paren)) { BalancedDelimiterTracker T(*this, tok::l_paren); T.consumeOpen(); @@ -3779,10 +3749,9 @@ if (TemplateTypeTy.isInvalid()) return true; - return Actions.ActOnMemInitializer(ConstructorDecl, getCurScope(), SS, II, - TemplateTypeTy.get(), DS, IdLoc, - T.getOpenLocation(), ArgExprs, - T.getCloseLocation(), EllipsisLoc); + return Actions.ActOnMemInitializer( + ConstructorDecl, getCurScope(), SS, II, TemplateTypeTy.get(), DS, IdLoc, + T.getOpenLocation(), ArgExprs, T.getCloseLocation(), EllipsisLoc); } if (TemplateTypeTy.isInvalid()) @@ -3803,13 +3772,11 @@ /// noexcept-specification: /// 'noexcept' /// 'noexcept' '(' constant-expression ')' -ExceptionSpecificationType -Parser::tryParseExceptionSpecification(bool Delayed, - SourceRange &SpecificationRange, - SmallVectorImpl &DynamicExceptions, - SmallVectorImpl &DynamicExceptionRanges, - ExprResult &NoexceptExpr, - CachedTokens *&ExceptionSpecTokens) { +ExceptionSpecificationType Parser::tryParseExceptionSpecification( + bool Delayed, SourceRange &SpecificationRange, + SmallVectorImpl &DynamicExceptions, + SmallVectorImpl &DynamicExceptionRanges, + ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) { ExceptionSpecificationType Result = EST_None; ExceptionSpecTokens = nullptr; @@ -3838,8 +3805,8 @@ // Cache the tokens for the exception-specification. ExceptionSpecTokens = new CachedTokens; - ExceptionSpecTokens->push_back(StartTok); // 'throw' or 'noexcept' - ExceptionSpecTokens->push_back(Tok); // '(' + ExceptionSpecTokens->push_back(StartTok); // 'throw' or 'noexcept' + ExceptionSpecTokens->push_back(Tok); // '(' SpecificationRange.setEnd(ConsumeParen()); // '(' ConsumeAndStoreUntil(tok::r_paren, *ExceptionSpecTokens, @@ -3852,9 +3819,8 @@ // See if there's a dynamic specification. if (Tok.is(tok::kw_throw)) { - Result = ParseDynamicExceptionSpecification(SpecificationRange, - DynamicExceptions, - DynamicExceptionRanges); + Result = ParseDynamicExceptionSpecification( + SpecificationRange, DynamicExceptions, DynamicExceptionRanges); assert(DynamicExceptions.size() == DynamicExceptionRanges.size() && "Produced different number of exception types and ranges."); } @@ -3878,8 +3844,8 @@ NoexceptExpr = ParseConstantExpression(); T.consumeClose(); if (!NoexceptExpr.isInvalid()) { - NoexceptExpr = Actions.ActOnNoexceptSpec(NoexceptExpr.get(), - NoexceptType); + NoexceptExpr = + Actions.ActOnNoexceptSpec(NoexceptExpr.get(), NoexceptType); NoexceptRange = SourceRange(KeywordLoc, T.getCloseLocation()); } else { NoexceptType = EST_BasicNoexcept; @@ -3908,17 +3874,16 @@ return Result; } -static void diagnoseDynamicExceptionSpecification( - Parser &P, SourceRange Range, bool IsNoexcept) { +static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, + bool IsNoexcept) { if (P.getLangOpts().CPlusPlus11) { const char *Replacement = IsNoexcept ? "noexcept" : "noexcept(false)"; - P.Diag(Range.getBegin(), - P.getLangOpts().CPlusPlus17 && !IsNoexcept - ? diag::ext_dynamic_exception_spec - : diag::warn_exception_spec_deprecated) + P.Diag(Range.getBegin(), P.getLangOpts().CPlusPlus17 && !IsNoexcept + ? diag::ext_dynamic_exception_spec + : diag::warn_exception_spec_deprecated) << Range; P.Diag(Range.getBegin(), diag::note_exception_spec_deprecated) - << Replacement << FixItHint::CreateReplacement(Range, Replacement); + << Replacement << FixItHint::CreateReplacement(Range, Replacement); } } @@ -3934,9 +3899,8 @@ /// type-id-list ',' type-id ... [opt] /// ExceptionSpecificationType Parser::ParseDynamicExceptionSpecification( - SourceRange &SpecificationRange, - SmallVectorImpl &Exceptions, - SmallVectorImpl &Ranges) { + SourceRange &SpecificationRange, SmallVectorImpl &Exceptions, + SmallVectorImpl &Ranges) { assert(Tok.is(tok::kw_throw) && "expected throw"); SpecificationRange.setBegin(ConsumeToken()); @@ -4010,10 +3974,9 @@ SourceLocation RequiresKWLoc = ConsumeToken(); ExprResult TrailingRequiresClause; - ParseScope ParamScope(this, - Scope::DeclScope | - Scope::FunctionDeclarationScope | - Scope::FunctionPrototypeScope); + ParseScope ParamScope(this, Scope::DeclScope | + Scope::FunctionDeclarationScope | + Scope::FunctionPrototypeScope); Actions.ActOnStartTrailingRequiresClause(getCurScope(), D); @@ -4063,9 +4026,9 @@ /// We have just started parsing the definition of a new class, /// so push that class onto our stack of classes that is currently /// being parsed. -Sema::ParsingClassState -Parser::PushParsingClass(Decl *ClassDecl, bool NonNestedClass, - bool IsInterface) { +Sema::ParsingClassState Parser::PushParsingClass(Decl *ClassDecl, + bool NonNestedClass, + bool IsInterface) { assert((NonNestedClass || !ClassStack.empty()) && "Nested class without outer class"); ClassStack.push(new ParsingClass(ClassDecl, NonNestedClass, IsInterface)); @@ -4113,7 +4076,8 @@ // This nested class has some members that will need to be processed // after the top-level class is completely defined. Therefore, add // it to the list of nested classes within its parent. - assert(getCurScope()->isClassScope() && "Nested class outside of class scope?"); + assert(getCurScope()->isClassScope() && + "Nested class outside of class scope?"); ClassStack.top()->LateParsedDeclarations.push_back( new LateParsedClass(this, Victim)); } @@ -4295,13 +4259,10 @@ /// '[' balanced-token-seq ']' /// '{' balanced-token-seq '}' /// any token but '(', ')', '[', ']', '{', or '}' -bool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, - SourceLocation AttrNameLoc, - ParsedAttributes &Attrs, - SourceLocation *EndLoc, - IdentifierInfo *ScopeName, - SourceLocation ScopeLoc, - CachedTokens &OpenMPTokens) { +bool Parser::ParseCXX11AttributeArgs( + IdentifierInfo *AttrName, SourceLocation AttrNameLoc, + ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, + SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) { assert(Tok.is(tok::l_paren) && "Not a C++11 attribute argument list"); SourceLocation LParenLoc = Tok.getLocation(); const LangOptions &LO = getLangOpts(); @@ -4321,7 +4282,8 @@ !hasAttribute(LO.CPlusPlus ? AttributeCommonInfo::Syntax::AS_CXX11 : AttributeCommonInfo::Syntax::AS_C2x, ScopeName, AttrName, getTargetInfo(), getLangOpts())) { - if (getLangOpts().MicrosoftExt || getLangOpts().HLSL) {} + if (getLangOpts().MicrosoftExt || getLangOpts().HLSL) { + } // Eat the left paren, then skip to the ending right paren. ConsumeParen(); SkipUntil(tok::r_paren); @@ -4339,7 +4301,7 @@ if (ScopeName && ScopeName->isStr("omp")) { Diag(AttrNameLoc, getLangOpts().OpenMP >= 51 ? diag::warn_omp51_compat_attributes - : diag::ext_omp_attributes); + : diag::ext_omp_attributes); ParseOpenMPAttributeArgs(AttrName, OpenMPTokens); @@ -4354,9 +4316,8 @@ NumArgs = ParseClangAttributeArgs(AttrName, AttrNameLoc, Attrs, EndLoc, ScopeName, ScopeLoc, Syntax); else - NumArgs = - ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc, - ScopeName, ScopeLoc, Syntax); + NumArgs = ParseAttributeArgsCommon(AttrName, AttrNameLoc, Attrs, EndLoc, + ScopeName, ScopeLoc, Syntax); if (!Attrs.empty() && IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName)) { @@ -4444,7 +4405,7 @@ Diag(Tok.getLocation(), diag::err_expected) << tok::colon; } - llvm::SmallDenseMap SeenAttrs; + llvm::SmallDenseMap SeenAttrs; bool AttrParsed = false; while (!Tok.isOneOf(tok::r_square, tok::semi, tok::eof)) { @@ -4510,8 +4471,7 @@ } if (TryConsumeToken(tok::ellipsis)) - Diag(Tok, diag::err_cxx11_attribute_forbids_ellipsis) - << AttrName; + Diag(Tok, diag::err_cxx11_attribute_forbids_ellipsis) << AttrName; } // If we hit an error and recovered by parsing up to a semicolon, eat the @@ -4556,8 +4516,7 @@ if (EndLoc.isValid()) { SourceRange Range(StartLoc, EndLoc); - Diag(StartLoc, diag::err_attributes_not_allowed) - << Range; + Diag(StartLoc, diag::err_attributes_not_allowed) << Range; } } @@ -4756,7 +4715,7 @@ case IEB_Dependent: Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) - << Result.IsIfExists; + << Result.IsIfExists; // Fall through to skip. LLVM_FALLTHROUGH; @@ -4768,8 +4727,7 @@ while (Tok.isNot(tok::r_brace) && !isEofOrEom()) { // __if_exists, __if_not_exists can nest. if (Tok.isOneOf(tok::kw___if_exists, tok::kw___if_not_exists)) { - ParseMicrosoftIfExistsClassDeclaration(TagType, - AccessAttrs, CurAS); + ParseMicrosoftIfExistsClassDeclaration(TagType, AccessAttrs, CurAS); continue; } diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -153,7 +153,7 @@ return true; } -bool Parser::ExpectAndConsumeSemi(unsigned DiagID) { +bool Parser::ExpectAndConsumeSemi(unsigned DiagID, StringRef TokenUsed) { if (TryConsumeToken(tok::semi)) return false; @@ -172,7 +172,7 @@ return false; } - return ExpectAndConsume(tok::semi, DiagID); + return ExpectAndConsume(tok::semi, DiagID , TokenUsed); } void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) { diff --git a/clang/test/C/drs/dr0xx.c b/clang/test/C/drs/dr0xx.c --- a/clang/test/C/drs/dr0xx.c +++ b/clang/test/C/drs/dr0xx.c @@ -203,7 +203,7 @@ * Note: the rule changed in C99 to be different than the resolution to DR029, * so it's not clear there's value in implementing this DR. */ -_Static_assert(__builtin_types_compatible_p(struct S { int a; }, union U { int a; }), "fail"); /* expected-error {{static_assert failed due to requirement '__builtin_types_compatible_p(struct S, union U)': fail}} */ +_Static_assert(__builtin_types_compatible_p(struct S { int a; }, union U { int a; }), "fail"); /* expected-error {{static assertion failed due to requirement '__builtin_types_compatible_p(struct S, union U)': fail}} */ /* WG14 DR031: yes * Can constant expressions overflow? diff --git a/clang/test/CXX/dcl.dcl/p4-0x.cpp b/clang/test/CXX/dcl.dcl/p4-0x.cpp --- a/clang/test/CXX/dcl.dcl/p4-0x.cpp +++ b/clang/test/CXX/dcl.dcl/p4-0x.cpp @@ -18,4 +18,4 @@ static_assert(T(), ""); static_assert(U(), ""); // expected-error {{ambiguous}} -static_assert(false, L"\x14hi" "!" R"x(")x"); // expected-error {{static_assert failed: L"\024hi!\""}} +static_assert(false, L"\x14hi" "!" R"x(")x"); // expected-error {{static assertion failed: L"\024hi!\""}} diff --git a/clang/test/CXX/drs/dr19xx.cpp b/clang/test/CXX/drs/dr19xx.cpp --- a/clang/test/CXX/drs/dr19xx.cpp +++ b/clang/test/CXX/drs/dr19xx.cpp @@ -83,7 +83,7 @@ #if __cplusplus >= 201103L static union { static_assert(true, ""); // ok - static_assert(false, ""); // expected-error {{static_assert failed}} + static_assert(false, ""); // expected-error {{static assertion failed}} int not_empty; }; #endif diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp --- a/clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp +++ b/clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp @@ -161,10 +161,10 @@ struct small { }; static_assert(Large); -// expected-error@-1 {{static_assert failed}} +// expected-error@-1 {{static assertion failed}} // expected-note@-2 {{because 'small' does not satisfy 'Large'}} static_assert(Large, "small isn't large"); -// expected-error@-1 {{static_assert failed: small isn't large}} +// expected-error@-1 {{static assertion failed: small isn't large}} // expected-note@-2 {{because 'small' does not satisfy 'Large'}} // Make sure access-checking can fail a concept specialization @@ -173,7 +173,7 @@ template concept AccessPrivate = T{}.f; // expected-note@-1{{because substituted constraint expression is ill-formed: 'f' is a private member of 'T4'}} static_assert(AccessPrivate); -// expected-error@-1{{static_assert failed}} +// expected-error@-1{{static assertion failed}} // expected-note@-2{{because 'T4' does not satisfy 'AccessPrivate'}} template diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.req/nested-requirement.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.req/nested-requirement.cpp --- a/clang/test/CXX/expr/expr.prim/expr.prim.req/nested-requirement.cpp +++ b/clang/test/CXX/expr/expr.prim/expr.prim.req/nested-requirement.cpp @@ -43,5 +43,6 @@ requires sizeof(a) == 4; // OK requires a == 0; // expected-note{{because 'a == 0' would be invalid: constraint variable 'a' cannot be used in an evaluated context}} }; - static_assert(C2); // expected-note{{because 'int' does not satisfy 'C2'}} expected-error{{static_assert failed}} -} \ No newline at end of file + static_assert(C2); // expected-note{{because 'int' does not satisfy 'C2'}} expected-error{{static assertion failed}} +} + \ No newline at end of file diff --git a/clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp b/clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp --- a/clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp +++ b/clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp @@ -79,6 +79,7 @@ // expected-note@-1{{while checking constraint satisfaction for variable template partial specialization 'v1' required here}} // expected-note@-2{{during template argument deduction for variable template partial specialization 'v1' [with T = int *]}} // expected-note@-3{{during template argument deduction for variable template partial specialization 'v1' [with T = int]}} - // expected-error@-4{{static_assert failed due to requirement 'v1'}} + // expected-error@-4{{static assertion failed due to requirement 'v1'}} -} \ No newline at end of file +} + \ No newline at end of file diff --git a/clang/test/PCH/cxx-static_assert.cpp b/clang/test/PCH/cxx-static_assert.cpp --- a/clang/test/PCH/cxx-static_assert.cpp +++ b/clang/test/PCH/cxx-static_assert.cpp @@ -17,7 +17,7 @@ #else -// expected-error@15 {{static_assert failed due to requirement '1 == 2': N is not 2!}} +// expected-error@15 {{static assertion failed due to requirement '1 == 2': N is not 2!}} T<1> t1; // expected-note {{in instantiation of template class 'T<1>' requested here}} T<2> t2; diff --git a/clang/test/PCH/cxx-templates.cpp b/clang/test/PCH/cxx-templates.cpp --- a/clang/test/PCH/cxx-templates.cpp +++ b/clang/test/PCH/cxx-templates.cpp @@ -167,7 +167,7 @@ // This used to mark 'f' invalid without producing any diagnostic. That's a // little hard to detect, but we can make sure that constexpr evaluation // fails when it should. - static_assert(A().f() == 1); // expected-error {{static_assert failed}} + static_assert(A().f() == 1); // expected-error {{static assertion failed}} #endif } diff --git a/clang/test/Parser/objc-static-assert.m b/clang/test/Parser/objc-static-assert.m --- a/clang/test/Parser/objc-static-assert.m +++ b/clang/test/Parser/objc-static-assert.m @@ -15,7 +15,7 @@ @interface A { int a; _Static_assert(1, ""); - _Static_assert(0, ""); // expected-error {{static_assert failed}} + _Static_assert(0, ""); // expected-error {{static assertion failed}} _Static_assert(a, ""); // expected-error {{use of undeclared identifier 'a'}} _Static_assert(sizeof(a), ""); // expected-error {{use of undeclared identifier 'a'}} @@ -44,7 +44,7 @@ @interface A { int a; _Static_assert(1, ""); - _Static_assert(0, ""); // expected-error {{static_assert failed}} + _Static_assert(0, ""); // expected-error {{static assertion failed}} } _Static_assert(1, ""); diff --git a/clang/test/Parser/objc-static-assert.mm b/clang/test/Parser/objc-static-assert.mm --- a/clang/test/Parser/objc-static-assert.mm +++ b/clang/test/Parser/objc-static-assert.mm @@ -21,12 +21,12 @@ static_assert(1, ""); _Static_assert(1, ""); - static_assert(0, ""); // expected-error {{static_assert failed}} - _Static_assert(0, ""); // expected-error {{static_assert failed}} + static_assert(0, ""); // expected-error {{static assertion failed}} + _Static_assert(0, ""); // expected-error {{static assertion failed}} - static_assert(a, ""); // expected-error {{static_assert expression is not an integral constant expression}} + static_assert(a, ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(sizeof(a) == 4, ""); - static_assert(sizeof(a) == 3, ""); // expected-error {{static_assert failed}} + static_assert(sizeof(a) == 3, ""); // expected-error {{static assertion failed}} } static_assert(1, ""); @@ -40,7 +40,7 @@ static_assert(1, ""); _Static_assert(1, ""); static_assert(sizeof(b) == 4, ""); - static_assert(sizeof(b) == 3, ""); // expected-error {{static_assert failed}} + static_assert(sizeof(b) == 3, ""); // expected-error {{static assertion failed}} } static_assert(1, ""); @@ -56,7 +56,7 @@ @interface B () { int b; static_assert(sizeof(b) == 4, ""); - static_assert(sizeof(b) == 3, ""); // expected-error {{static_assert failed}} + static_assert(sizeof(b) == 3, ""); // expected-error {{static assertion failed}} } @end @@ -71,7 +71,7 @@ int a; static_assert(1, ""); // expected-error {{type name requires a specifier or qualifier}} expected-error{{expected parameter declarator}} expected-error {{expected ')'}} expected-note {{to match this '('}} _Static_assert(1, ""); - _Static_assert(0, ""); // expected-error {{static_assert failed}} + _Static_assert(0, ""); // expected-error {{static assertion failed}} } @end #endif diff --git a/clang/test/Sema/builtin-align.c b/clang/test/Sema/builtin-align.c --- a/clang/test/Sema/builtin-align.c +++ b/clang/test/Sema/builtin-align.c @@ -113,8 +113,8 @@ _Static_assert(__builtin_align_down(33, 32) == 32, ""); // But not if one of the arguments isn't constant: - _Static_assert(ALIGN_BUILTIN(33, x) != 100, ""); // expected-error {{static_assert expression is not an integral constant expression}} - _Static_assert(ALIGN_BUILTIN(x, 4) != 100, ""); // expected-error {{static_assert expression is not an integral constant expression}} + _Static_assert(ALIGN_BUILTIN(33, x) != 100, ""); // expected-error {{static assertion expression is not an integral constant expression}} + _Static_assert(ALIGN_BUILTIN(x, 4) != 100, ""); // expected-error {{static assertion expression is not an integral constant expression}} } // Check that it is a constant expression that can be assigned to globals: diff --git a/clang/test/Sema/sizeless-1.c b/clang/test/Sema/sizeless-1.c --- a/clang/test/Sema/sizeless-1.c +++ b/clang/test/Sema/sizeless-1.c @@ -69,7 +69,7 @@ // Using pointers to sizeless data isn't wrong here, but because the // type is incomplete, it doesn't provide any alignment guarantees. _Static_assert(__atomic_is_lock_free(1, &local_int8) == __atomic_is_lock_free(1, incomplete_ptr), ""); - _Static_assert(__atomic_is_lock_free(2, &local_int8) == __atomic_is_lock_free(2, incomplete_ptr), ""); // expected-error {{static_assert expression is not an integral constant expression}} + _Static_assert(__atomic_is_lock_free(2, &local_int8) == __atomic_is_lock_free(2, incomplete_ptr), ""); // expected-error {{static assertion expression is not an integral constant expression}} _Static_assert(__atomic_always_lock_free(1, &local_int8) == __atomic_always_lock_free(1, incomplete_ptr), ""); local_int8; // expected-warning {{expression result unused}} diff --git a/clang/test/Sema/static-assert.c b/clang/test/Sema/static-assert.c --- a/clang/test/Sema/static-assert.c +++ b/clang/test/Sema/static-assert.c @@ -5,11 +5,11 @@ _Static_assert("foo", "string is nonzero"); // ext-warning {{'_Static_assert' is a C11 extension}} #ifndef __cplusplus -// expected-error@-2 {{static_assert expression is not an integral constant expression}} +// expected-error@-2 {{static assertion expression is not an integral constant expression}} #endif _Static_assert(1, "1 is nonzero"); // ext-warning {{'_Static_assert' is a C11 extension}} -_Static_assert(0, "0 is nonzero"); // expected-error {{static_assert failed: 0 is nonzero}} \ +_Static_assert(0, "0 is nonzero"); // expected-error {{static assertion failed: 0 is nonzero}} \ // ext-warning {{'_Static_assert' is a C11 extension}} #ifdef MS @@ -18,7 +18,7 @@ void foo(void) { _Static_assert(1, "1 is nonzero"); // ext-warning {{'_Static_assert' is a C11 extension}} - _Static_assert(0, "0 is nonzero"); // expected-error {{static_assert failed: 0 is nonzero}} \ + _Static_assert(0, "0 is nonzero"); // expected-error {{static assertion failed: 0 is nonzero}} \ // ext-warning {{'_Static_assert' is a C11 extension}} #ifdef MS static_assert(1, "1 is nonzero"); // ms-warning {{use of 'static_assert' without}} @@ -31,7 +31,7 @@ struct A { int a; _Static_assert(1, "1 is nonzero"); // ext-warning {{'_Static_assert' is a C11 extension}} - _Static_assert(0, "0 is nonzero"); // expected-error {{static_assert failed: 0 is nonzero}} \ + _Static_assert(0, "0 is nonzero"); // expected-error {{static assertion failed: 0 is nonzero}} \ // ext-warning {{'_Static_assert' is a C11 extension}} #ifdef MS static_assert(1, "1 is nonzero"); // ms-warning {{use of 'static_assert' without}} @@ -54,7 +54,7 @@ typedef UNION(unsigned, struct A) U1; // ext-warning 3 {{'_Static_assert' is a C11 extension}} UNION(char[2], short) u2 = { .one = { 'a', 'b' } }; // ext-warning 3 {{'_Static_assert' is a C11 extension}} cxx-warning {{designated initializers are a C++20 extension}} -typedef UNION(char, short) U3; // expected-error {{static_assert failed due to requirement 'sizeof(char) == sizeof(short)': type size mismatch}} \ +typedef UNION(char, short) U3; // expected-error {{static assertion failed due to requirement 'sizeof(char) == sizeof(short)': type size mismatch}} \ // ext-warning 3 {{'_Static_assert' is a C11 extension}} typedef UNION(float, 0.5f) U4; // expected-error {{expected a type}} \ // ext-warning 3 {{'_Static_assert' is a C11 extension}} @@ -70,3 +70,6 @@ #undef static_assert static_assert(1, "1 is nonzero"); // ms-warning {{use of 'static_assert' without}} #endif + +_Static_assert(1 , "") // expected-error {{expected ';' after '_Static_assert'}} \ + // ext-warning {{'_Static_assert' is a C11 extension}} diff --git a/clang/test/SemaCXX/access-base-class.cpp b/clang/test/SemaCXX/access-base-class.cpp --- a/clang/test/SemaCXX/access-base-class.cpp +++ b/clang/test/SemaCXX/access-base-class.cpp @@ -109,7 +109,7 @@ template struct Impossible { - static_assert(false, ""); // expected-error {{static_assert failed}} + static_assert(false, ""); // expected-error {{static assertion failed}} }; // verify "no member named 'value'" bogus diagnostic is not emitted. diff --git a/clang/test/SemaCXX/alias-template.cpp b/clang/test/SemaCXX/alias-template.cpp --- a/clang/test/SemaCXX/alias-template.cpp +++ b/clang/test/SemaCXX/alias-template.cpp @@ -174,7 +174,7 @@ using T = X[J]; using U = T; }; -static_assert(__is_same(S<3>::U, X[2]), ""); // expected-error {{static_assert failed}} +static_assert(__is_same(S<3>::U, X[2]), ""); // expected-error {{static assertion failed}} } namespace PR39623 { diff --git a/clang/test/SemaCXX/builtin-is-constant-evaluated.cpp b/clang/test/SemaCXX/builtin-is-constant-evaluated.cpp --- a/clang/test/SemaCXX/builtin-is-constant-evaluated.cpp +++ b/clang/test/SemaCXX/builtin-is-constant-evaluated.cpp @@ -26,7 +26,7 @@ constexpr int bn = __builtin_is_constant_evaluated() ? dummy : 42; // expected-note {{non-const variable 'dummy' is not allowed}} const int n2 = __builtin_is_constant_evaluated() ? dummy : 42; // expected-note {{declared here}} -static_assert(n2 == 42); // expected-error {{static_assert expression is not an integral constant}} +static_assert(n2 == 42); // expected-error {{static assertion expression is not an integral constant}} // expected-note@-1 {{initializer of 'n2' is not a constant expression}} template diff --git a/clang/test/SemaCXX/builtin-std-move.cpp b/clang/test/SemaCXX/builtin-std-move.cpp --- a/clang/test/SemaCXX/builtin-std-move.cpp +++ b/clang/test/SemaCXX/builtin-std-move.cpp @@ -39,7 +39,7 @@ return static_cast(x); } template CONSTEXPR T &&forward(typename remove_reference::type &&x) { - static_assert(!is_lvalue_reference::value, "should not forward rval as lval"); // expected-error {{static_assert failed}} + static_assert(!is_lvalue_reference::value, "should not forward rval as lval"); // expected-error {{static assertion failed}} return static_cast(x); } diff --git a/clang/test/SemaCXX/builtins.cpp b/clang/test/SemaCXX/builtins.cpp --- a/clang/test/SemaCXX/builtins.cpp +++ b/clang/test/SemaCXX/builtins.cpp @@ -47,7 +47,7 @@ void a(void) {} int n; void *p = __builtin_function_start(n); // expected-error {{argument must be a function}} -static_assert(__builtin_function_start(a) == a, ""); // expected-error {{static_assert expression is not an integral constant expression}} +static_assert(__builtin_function_start(a) == a, ""); // expected-error {{static assertion expression is not an integral constant expression}} } // namespace function_start void no_ms_builtins() { diff --git a/clang/test/SemaCXX/complex-folding.cpp b/clang/test/SemaCXX/complex-folding.cpp --- a/clang/test/SemaCXX/complex-folding.cpp +++ b/clang/test/SemaCXX/complex-folding.cpp @@ -3,7 +3,7 @@ // Test the constant folding of builtin complex numbers. static_assert((0.0 + 0.0j) == (0.0 + 0.0j)); -static_assert((0.0 + 0.0j) != (0.0 + 0.0j)); // expected-error {{static_assert}} +static_assert((0.0 + 0.0j) != (0.0 + 0.0j)); // expected-error {{static assertion}} static_assert((0.0 + 0.0j) == 0.0); static_assert(0.0 == (0.0 + 0.0j)); @@ -14,21 +14,21 @@ // Walk around the complex plane stepping between angular differences and // equality. -static_assert((1.0 + 0.0j) == (0.0 + 0.0j)); // expected-error {{static_assert}} +static_assert((1.0 + 0.0j) == (0.0 + 0.0j)); // expected-error {{static assertion}} static_assert((1.0 + 0.0j) == (1.0 + 0.0j)); -static_assert((1.0 + 1.0j) == (1.0 + 0.0j)); // expected-error {{static_assert}} +static_assert((1.0 + 1.0j) == (1.0 + 0.0j)); // expected-error {{static assertion}} static_assert((1.0 + 1.0j) == (1.0 + 1.0j)); -static_assert((0.0 + 1.0j) == (1.0 + 1.0j)); // expected-error {{static_assert}} +static_assert((0.0 + 1.0j) == (1.0 + 1.0j)); // expected-error {{static assertion}} static_assert((0.0 + 1.0j) == (0.0 + 1.0j)); -static_assert((-1.0 + 1.0j) == (0.0 + 1.0j)); // expected-error {{static_assert}} +static_assert((-1.0 + 1.0j) == (0.0 + 1.0j)); // expected-error {{static assertion}} static_assert((-1.0 + 1.0j) == (-1.0 + 1.0j)); -static_assert((-1.0 + 0.0j) == (-1.0 + 1.0j)); // expected-error {{static_assert}} +static_assert((-1.0 + 0.0j) == (-1.0 + 1.0j)); // expected-error {{static assertion}} static_assert((-1.0 + 0.0j) == (-1.0 + 0.0j)); -static_assert((-1.0 - 1.0j) == (-1.0 + 0.0j)); // expected-error {{static_assert}} +static_assert((-1.0 - 1.0j) == (-1.0 + 0.0j)); // expected-error {{static assertion}} static_assert((-1.0 - 1.0j) == (-1.0 - 1.0j)); -static_assert((0.0 - 1.0j) == (-1.0 - 1.0j)); // expected-error {{static_assert}} +static_assert((0.0 - 1.0j) == (-1.0 - 1.0j)); // expected-error {{static assertion}} static_assert((0.0 - 1.0j) == (0.0 - 1.0j)); -static_assert((1.0 - 1.0j) == (0.0 - 1.0j)); // expected-error {{static_assert}} +static_assert((1.0 - 1.0j) == (0.0 - 1.0j)); // expected-error {{static assertion}} static_assert((1.0 - 1.0j) == (1.0 - 1.0j)); // Test basic mathematical folding of both complex and real operands. diff --git a/clang/test/SemaCXX/constant-expression-cxx11.cpp b/clang/test/SemaCXX/constant-expression-cxx11.cpp --- a/clang/test/SemaCXX/constant-expression-cxx11.cpp +++ b/clang/test/SemaCXX/constant-expression-cxx11.cpp @@ -580,7 +580,7 @@ return (&p)[64]; // expected-note {{cannot refer to element 64 of array of 2 elements}} } static_assert(fail(*(&(&(*(*&(&zs[2] - 1)[0] + 2 - 2))[2])[-1][2] - 2)) == 11, ""); // \ -expected-error {{static_assert expression is not an integral constant expression}} \ +expected-error {{static assertion expression is not an integral constant expression}} \ expected-note {{in call to 'fail(zs[1][0][1][0])'}} constexpr int arr[40] = { 1, 2, 3, [8] = 4 }; @@ -1596,11 +1596,11 @@ // Matching GCC, file-scope array compound literals initialized by constants // are lifetime-extended. constexpr int *p = (int*)(int[1]){3}; // expected-warning {{C99}} - static_assert(*p == 3, ""); // expected-error {{static_assert expression is not an integral constant expression}} + static_assert(*p == 3, ""); // expected-error {{static assertion expression is not an integral constant expression}} // expected-note@-1 {{subexpression not valid}} // expected-note@-3 {{declared here}} static_assert((int[2]){1, 2}[1] == 2, ""); // expected-warning {{C99}} - // expected-error@-1 {{static_assert expression is not an integral constant expression}} + // expected-error@-1 {{static assertion expression is not an integral constant expression}} // expected-note@-2 {{subexpression not valid}} // expected-note@-3 {{declared here}} @@ -1912,12 +1912,12 @@ static_assert(p->f() == sizeof(X), ""); // cxx11-error@-1 {{not an integral constant expression}} // cxx11-note@-2 {{call to virtual function}} - // cxx20_2b-error@-3 {{static_assert failed}} + // cxx20_2b-error@-3 {{static assertion failed}} // Non-virtual f(), OK. constexpr X> xxs2; constexpr X *q = const_cast>*>(&xxs2); - static_assert(q->f() == sizeof(S2), ""); // cxx20_2b-error {{static_assert failed}} + static_assert(q->f() == sizeof(S2), ""); // cxx20_2b-error {{static assertion failed}} } namespace ConstexprConstructorRecovery { diff --git a/clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp b/clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp --- a/clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp +++ b/clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp @@ -446,7 +446,7 @@ } static_assert(f(/*read_uninit=*/false), ""); -static_assert(f(/*read_uninit=*/true), ""); // expected-error{{static_assert expression is not an integral constant expression}} expected-note{{in call to 'f(true)'}} +static_assert(f(/*read_uninit=*/true), ""); // expected-error{{static assertion expression is not an integral constant expression}} expected-note{{in call to 'f(true)'}} constexpr bytes ld539 = { 0x0, 0x0, 0x0, 0x0, diff --git a/clang/test/SemaCXX/constexpr-function-recovery-crash.cpp b/clang/test/SemaCXX/constexpr-function-recovery-crash.cpp --- a/clang/test/SemaCXX/constexpr-function-recovery-crash.cpp +++ b/clang/test/SemaCXX/constexpr-function-recovery-crash.cpp @@ -68,7 +68,7 @@ } constexpr int test10() { return undef(); } // expected-error {{use of undeclared identifier 'undef'}} -static_assert(test10() <= 1, "should not crash"); // expected-error {{static_assert expression is not an integral constant expression}} +static_assert(test10() <= 1, "should not crash"); // expected-error {{static assertion expression is not an integral constant expression}} struct X {} array[] = {undef()}; // expected-error {{use of undeclared identifier 'undef'}} constexpr void test11() { diff --git a/clang/test/SemaCXX/coroutines-exp-namespace.cpp b/clang/test/SemaCXX/coroutines-exp-namespace.cpp --- a/clang/test/SemaCXX/coroutines-exp-namespace.cpp +++ b/clang/test/SemaCXX/coroutines-exp-namespace.cpp @@ -1109,8 +1109,8 @@ CoroMemberTag test_asserts(int *) const { auto TC = co_yield 0; - static_assert(TC.MatchesArgs, ""); // expected-error {{static_assert failed}} - static_assert(TC.MatchesArgs, ""); // expected-error {{static_assert failed}} + static_assert(TC.MatchesArgs, ""); // expected-error {{static assertion failed}} + static_assert(TC.MatchesArgs, ""); // expected-error {{static assertion failed}} static_assert(TC.MatchesArgs, ""); } @@ -1201,8 +1201,8 @@ CoroMemberTag test_asserts(int *) const { auto TC = co_yield 0; - static_assert(TC.template MatchesArgs, ""); // expected-error {{static_assert failed}} - static_assert(TC.template MatchesArgs<>, ""); // expected-error {{static_assert failed}} + static_assert(TC.template MatchesArgs, ""); // expected-error {{static assertion failed}} + static_assert(TC.template MatchesArgs<>, ""); // expected-error {{static assertion failed}} static_assert(TC.template MatchesArgs, ""); } @@ -1265,7 +1265,7 @@ static_assert(!TCT::MatchesArgs, ""); // Ensure diagnostics are actually being generated here - static_assert(TCT::MatchesArgs, ""); // expected-error {{static_assert failed}} + static_assert(TCT::MatchesArgs, ""); // expected-error {{static assertion failed}} } static CoroMemberTag test_static(volatile void *const, char &&) { diff --git a/clang/test/SemaCXX/coroutines.cpp b/clang/test/SemaCXX/coroutines.cpp --- a/clang/test/SemaCXX/coroutines.cpp +++ b/clang/test/SemaCXX/coroutines.cpp @@ -1130,8 +1130,8 @@ CoroMemberTag test_asserts(int *) const { auto TC = co_yield 0; - static_assert(TC.MatchesArgs, ""); // expected-error {{static_assert failed}} - static_assert(TC.MatchesArgs, ""); // expected-error {{static_assert failed}} + static_assert(TC.MatchesArgs, ""); // expected-error {{static assertion failed}} + static_assert(TC.MatchesArgs, ""); // expected-error {{static assertion failed}} static_assert(TC.MatchesArgs, ""); } @@ -1222,8 +1222,8 @@ CoroMemberTag test_asserts(int *) const { auto TC = co_yield 0; - static_assert(TC.template MatchesArgs, ""); // expected-error {{static_assert failed}} - static_assert(TC.template MatchesArgs<>, ""); // expected-error {{static_assert failed}} + static_assert(TC.template MatchesArgs, ""); // expected-error {{static assertion failed}} + static_assert(TC.template MatchesArgs<>, ""); // expected-error {{static assertion failed}} static_assert(TC.template MatchesArgs, ""); } @@ -1286,7 +1286,7 @@ static_assert(!TCT::MatchesArgs, ""); // Ensure diagnostics are actually being generated here - static_assert(TCT::MatchesArgs, ""); // expected-error {{static_assert failed}} + static_assert(TCT::MatchesArgs, ""); // expected-error {{static assertion failed}} } static CoroMemberTag test_static(volatile void *const, char &&) { diff --git a/clang/test/SemaCXX/cxx2a-template-lambdas.cpp b/clang/test/SemaCXX/cxx2a-template-lambdas.cpp --- a/clang/test/SemaCXX/cxx2a-template-lambdas.cpp +++ b/clang/test/SemaCXX/cxx2a-template-lambdas.cpp @@ -11,19 +11,19 @@ void func() { auto L0 = [](T arg) { - static_assert(is_same); // expected-error {{static_assert failed}} + static_assert(is_same); // expected-error {{static assertion failed}} }; L0(0); L0(0.0); // expected-note {{in instantiation}} auto L1 = [] { - static_assert(I == 5); // expected-error {{static_assert failed}} + static_assert(I == 5); // expected-error {{static assertion failed}} }; L1.operator()<5>(); L1.operator()<6>(); // expected-note {{in instantiation}} auto L2 = [] class T, class U>(T &&arg) { - static_assert(is_same, DummyTemplate>); // // expected-error {{static_assert failed}} + static_assert(is_same, DummyTemplate>); // // expected-error {{static assertion failed}} }; L2(DummyTemplate()); L2(DummyTemplate()); // expected-note {{in instantiation}} diff --git a/clang/test/SemaCXX/cxx98-compat.cpp b/clang/test/SemaCXX/cxx98-compat.cpp --- a/clang/test/SemaCXX/cxx98-compat.cpp +++ b/clang/test/SemaCXX/cxx98-compat.cpp @@ -152,7 +152,7 @@ void no_except() noexcept; // expected-warning {{noexcept specifications are incompatible with C++98}} bool no_except_expr = noexcept(1 + 1); // expected-warning {{noexcept expressions are incompatible with C++98}} void *null = nullptr; // expected-warning {{'nullptr' is incompatible with C++98}} -static_assert(true, "!"); // expected-warning {{static_assert declarations are incompatible with C++98}} +static_assert(true, "!"); // expected-warning {{'static_assert' declarations are incompatible with C++98}} struct InhCtorBase { InhCtorBase(int); diff --git a/clang/test/SemaCXX/delete-and-function-templates.cpp b/clang/test/SemaCXX/delete-and-function-templates.cpp --- a/clang/test/SemaCXX/delete-and-function-templates.cpp +++ b/clang/test/SemaCXX/delete-and-function-templates.cpp @@ -12,7 +12,7 @@ template double f(T) = delete; //expected-note{{candidate}} char f(...); //expected-note{{candidate}} -static_assert(is_same::value, ""); //expected-error{{call to deleted function}} expected-error{{static_assert failed}} +static_assert(is_same::value, ""); //expected-error{{call to deleted function}} expected-error{{static assertion failed}} template decltype(f(T{})) g(T); // this one sfinae's out. template int *g(T); diff --git a/clang/test/SemaCXX/int-ptr-cast-SFINAE.cpp b/clang/test/SemaCXX/int-ptr-cast-SFINAE.cpp --- a/clang/test/SemaCXX/int-ptr-cast-SFINAE.cpp +++ b/clang/test/SemaCXX/int-ptr-cast-SFINAE.cpp @@ -19,4 +19,4 @@ template static const auto has_minus_assign = decltype(test())::value; -static_assert(has_minus_assign, "failed"); // expected-error {{static_assert failed due to requirement 'has_minus_assign': failed}} +static_assert(has_minus_assign, "failed"); // expected-error {{static assertion failed due to requirement 'has_minus_assign': failed}} diff --git a/clang/test/SemaCXX/recovery-expr-type.cpp b/clang/test/SemaCXX/recovery-expr-type.cpp --- a/clang/test/SemaCXX/recovery-expr-type.cpp +++ b/clang/test/SemaCXX/recovery-expr-type.cpp @@ -149,7 +149,7 @@ Circular_A = Circular(1), // expected-error {{'test13::Circular' is an incomplete type}} }; // Enumerators can be evaluated (they evaluate as zero, but we don't care). -static_assert(Circular_A == 0 && Circular_A != 0, ""); // expected-error {{static_assert failed}} +static_assert(Circular_A == 0 && Circular_A != 0, ""); // expected-error {{static assertion failed}} } namespace test14 { diff --git a/clang/test/SemaCXX/sizeless-1.cpp b/clang/test/SemaCXX/sizeless-1.cpp --- a/clang/test/SemaCXX/sizeless-1.cpp +++ b/clang/test/SemaCXX/sizeless-1.cpp @@ -78,7 +78,7 @@ // Using pointers to sizeless data isn't wrong here, but because the // type is incomplete, it doesn't provide any alignment guarantees. _Static_assert(__atomic_is_lock_free(1, &local_int8) == __atomic_is_lock_free(1, incomplete_ptr), ""); - _Static_assert(__atomic_is_lock_free(2, &local_int8) == __atomic_is_lock_free(2, incomplete_ptr), ""); // expected-error {{static_assert expression is not an integral constant expression}} + _Static_assert(__atomic_is_lock_free(2, &local_int8) == __atomic_is_lock_free(2, incomplete_ptr), ""); // expected-error {{static assertion expression is not an integral constant expression}} _Static_assert(__atomic_always_lock_free(1, &local_int8) == __atomic_always_lock_free(1, incomplete_ptr), ""); local_int8; // expected-warning {{expression result unused}} diff --git a/clang/test/SemaCXX/static-assert-cxx17.cpp b/clang/test/SemaCXX/static-assert-cxx17.cpp --- a/clang/test/SemaCXX/static-assert-cxx17.cpp +++ b/clang/test/SemaCXX/static-assert-cxx17.cpp @@ -22,7 +22,7 @@ template void foo() { static_assert(S1::value); - // expected-error@-1{{static_assert failed due to requirement 'S1::value'}} + // expected-error@-1{{static assertion failed due to requirement 'S1::value'}} } template void foo(); // expected-note@-1{{in instantiation of function template specialization 'foo' requested here}} @@ -30,7 +30,7 @@ template void foo2() { static_assert(global_inline_var); - // expected-error@-1{{static_assert failed due to requirement 'global_inline_var'}} + // expected-error@-1{{static assertion failed due to requirement 'global_inline_var'}} } template void foo2(); // expected-note@-1{{in instantiation of function template specialization 'foo2' requested here}} @@ -38,7 +38,7 @@ template void foo3() { static_assert(T::template var); - // expected-error@-1{{static_assert failed due to requirement 'S2::var'}} + // expected-error@-1{{static assertion failed due to requirement 'S2::var'}} } template void foo3, int, float>(); // expected-note@-1{{in instantiation of function template specialization 'foo3, int, float>' requested here}} @@ -46,7 +46,7 @@ template void foo4() { static_assert(S1::value, ""); - // expected-error@-1{{static_assert failed due to requirement 'S1::value'}} + // expected-error@-1{{static assertion failed due to requirement 'S1::value'}} }; template void foo4(); // expected-note@-1{{in instantiation of function template specialization 'foo4' requested here}} @@ -55,7 +55,7 @@ template void foo5() { static_assert(!!(global_inline_var)); - // expected-error@-1{{static_assert failed due to requirement '!!(global_inline_var)'}} + // expected-error@-1{{static assertion failed due to requirement '!!(global_inline_var)'}} } template void foo5(); // expected-note@-1{{in instantiation of function template specialization 'foo5' requested here}} @@ -76,29 +76,29 @@ template void foo6() { static_assert(X()); - // expected-error@-1{{static_assert failed due to requirement 'X()'}} + // expected-error@-1{{static assertion failed due to requirement 'X()'}} static_assert(X{}); - // expected-error@-1{{static_assert failed due to requirement 'X{}'}} + // expected-error@-1{{static assertion failed due to requirement 'X{}'}} static_assert(X{1, 2}); - // expected-error@-1{{static_assert failed due to requirement 'X{1, 2}'}} + // expected-error@-1{{static assertion failed due to requirement 'X{1, 2}'}} static_assert(X({1, 2})); - // expected-error@-1{{static_assert failed due to requirement 'X({1, 2})'}} + // expected-error@-1{{static assertion failed due to requirement 'X({1, 2})'}} static_assert(typename T::T{0}); - // expected-error@-1{{static_assert failed due to requirement 'int{0}'}} + // expected-error@-1{{static assertion failed due to requirement 'int{0}'}} static_assert(typename T::T(0)); - // expected-error@-1{{static_assert failed due to requirement 'int(0)'}} + // expected-error@-1{{static assertion failed due to requirement 'int(0)'}} static_assert(sizeof(X) == 0); - // expected-error@-1{{static_assert failed due to requirement 'sizeof(X) == 0'}} + // expected-error@-1{{static assertion failed due to requirement 'sizeof(X) == 0'}} static_assert((const X *)nullptr); - // expected-error@-1{{static_assert failed due to requirement '(const X *)nullptr'}} + // expected-error@-1{{static assertion failed due to requirement '(const X *)nullptr'}} static_assert(static_cast *>(nullptr)); - // expected-error@-1{{static_assert failed due to requirement 'static_cast *>(nullptr)'}} + // expected-error@-1{{static assertion failed due to requirement 'static_cast *>(nullptr)'}} static_assert((const X[]){} == nullptr); - // expected-error@-1{{static_assert failed due to requirement '(const X[0]){} == nullptr'}} + // expected-error@-1{{static assertion failed due to requirement '(const X[0]){} == nullptr'}} static_assert(sizeof(X().X::~X())>) == 0); - // expected-error@-1{{static_assert failed due to requirement 'sizeof(X) == 0'}} + // expected-error@-1{{static assertion failed due to requirement 'sizeof(X) == 0'}} static_assert(constexpr_return_false()); - // expected-error@-1{{static_assert failed due to requirement 'constexpr_return_false()'}} + // expected-error@-1{{static assertion failed due to requirement 'constexpr_return_false()'}} } template void foo6(); // expected-note@-1{{in instantiation of function template specialization 'foo6' requested here}} diff --git a/clang/test/SemaCXX/static-assert.cpp b/clang/test/SemaCXX/static-assert.cpp --- a/clang/test/SemaCXX/static-assert.cpp +++ b/clang/test/SemaCXX/static-assert.cpp @@ -2,61 +2,61 @@ int f(); // expected-note {{declared here}} -static_assert(f(), "f"); // expected-error {{static_assert expression is not an integral constant expression}} expected-note {{non-constexpr function 'f' cannot be used in a constant expression}} +static_assert(f(), "f"); // expected-error {{static assertion expression is not an integral constant expression}} expected-note {{non-constexpr function 'f' cannot be used in a constant expression}} static_assert(true, "true is not false"); -static_assert(false, "false is false"); // expected-error {{static_assert failed: false is false}} +static_assert(false, "false is false"); // expected-error {{static assertion failed: false is false}} void g() { - static_assert(false, "false is false"); // expected-error {{static_assert failed: false is false}} + static_assert(false, "false is false"); // expected-error {{static assertion failed: false is false}} } class C { - static_assert(false, "false is false"); // expected-error {{static_assert failed: false is false}} + static_assert(false, "false is false"); // expected-error {{static assertion failed: false is false}} }; template struct T { - static_assert(N == 2, "N is not 2!"); // expected-error {{static_assert failed due to requirement '1 == 2': N is not 2!}} + static_assert(N == 2, "N is not 2!"); // expected-error {{static assertion failed due to requirement '1 == 2': N is not 2!}} }; T<1> t1; // expected-note {{in instantiation of template class 'T<1>' requested here}} T<2> t2; template struct S { - static_assert(sizeof(T) > sizeof(char), "Type not big enough!"); // expected-error {{static_assert failed due to requirement 'sizeof(char) > sizeof(char)': Type not big enough!}} + static_assert(sizeof(T) > sizeof(char), "Type not big enough!"); // expected-error {{static assertion failed due to requirement 'sizeof(char) > sizeof(char)': Type not big enough!}} }; S s1; // expected-note {{in instantiation of template class 'S' requested here}} S s2; -static_assert(false, L"\xFFFFFFFF"); // expected-error {{static_assert failed: L"\xFFFFFFFF"}} -static_assert(false, u"\U000317FF"); // expected-error {{static_assert failed: u"\U000317FF"}} +static_assert(false, L"\xFFFFFFFF"); // expected-error {{static assertion failed: L"\xFFFFFFFF"}} +static_assert(false, u"\U000317FF"); // expected-error {{static assertion failed: u"\U000317FF"}} -static_assert(false, u8"Ω"); // expected-error {{static_assert failed: u8"\316\251"}} -static_assert(false, L"\u1234"); // expected-error {{static_assert failed: L"\x1234"}} -static_assert(false, L"\x1ff" "0\x123" "fx\xfffff" "goop"); // expected-error {{static_assert failed: L"\x1FF""0\x123""fx\xFFFFFgoop"}} +static_assert(false, u8"Ω"); // expected-error {{static assertion failed: u8"\316\251"}} +static_assert(false, L"\u1234"); // expected-error {{static assertion failed: L"\x1234"}} +static_assert(false, L"\x1ff" "0\x123" "fx\xfffff" "goop"); // expected-error {{static assertion failed: L"\x1FF""0\x123""fx\xFFFFFgoop"}} static_assert(false, R"(a \tb c -)"); // expected-error@-3 {{static_assert failed: a\n\tb\nc\n}} +)"); // expected-error@-3 {{static assertion failed: a\n\tb\nc\n}} static_assert(false, "\u0080\u0081\u0082\u0083\u0099\u009A\u009B\u009C\u009D\u009E\u009F"); -// expected-error@-1 {{static_assert failed: }} +// expected-error@-1 {{static assertion failed: }} //! Contains RTL/LTR marks -static_assert(false, "\u200Eabc\u200Fdef\u200Fgh"); // expected-error {{static_assert failed: ‎abc‏def‏gh}} +static_assert(false, "\u200Eabc\u200Fdef\u200Fgh"); // expected-error {{static assertion failed: ‎abc‏def‏gh}} //! Contains ZWJ/regional indicators -static_assert(false, "🏳️‍🌈 🏴󠁧󠁢󠁥󠁮󠁧󠁿 🇪🇺"); // expected-error {{static_assert failed: 🏳️‍🌈 🏴󠁧󠁢󠁥󠁮󠁧󠁿 🇪🇺}} +static_assert(false, "🏳️‍🌈 🏴󠁧󠁢󠁥󠁮󠁧󠁿 🇪🇺"); // expected-error {{static assertion failed: 🏳️‍🌈 🏴󠁧󠁢󠁥󠁮󠁧󠁿 🇪🇺}} template struct AlwaysFails { // Only give one error here. - static_assert(false, ""); // expected-error {{static_assert failed}} + static_assert(false, ""); // expected-error {{static assertion failed}} }; AlwaysFails alwaysFails; template struct StaticAssertProtected { - static_assert(__is_literal(T), ""); // expected-error {{static_assert failed}} + static_assert(__is_literal(T), ""); // expected-error {{static assertion failed}} static constexpr T t = {}; // no error here }; struct X { ~X(); }; @@ -81,7 +81,7 @@ static const bool value = false; }; -static_assert(first_trait::value && second_trait::value, "message"); // expected-error{{static_assert failed due to requirement 'second_trait::value': message}} +static_assert(first_trait::value && second_trait::value, "message"); // expected-error{{static assertion failed due to requirement 'second_trait::value': message}} namespace std { @@ -125,29 +125,29 @@ }; static_assert(std::is_same::value, "message"); -// expected-error@-1{{static_assert failed due to requirement 'std::is_same::value': message}} +// expected-error@-1{{static assertion failed due to requirement 'std::is_same::value': message}} static_assert(std::is_const::value, "message"); -// expected-error@-1{{static_assert failed due to requirement 'std::is_const::value': message}} +// expected-error@-1{{static assertion failed due to requirement 'std::is_const::value': message}} static_assert(!std::is_const::value, "message"); -// expected-error@-1{{static_assert failed due to requirement '!std::is_const::value': message}} +// expected-error@-1{{static assertion failed due to requirement '!std::is_const::value': message}} static_assert(!(std::is_const::value), "message"); -// expected-error@-1{{static_assert failed due to requirement '!(std::is_const::value)': message}} +// expected-error@-1{{static assertion failed due to requirement '!(std::is_const::value)': message}} static_assert(std::is_const::value == false, "message"); -// expected-error@-1{{static_assert failed due to requirement 'std::is_const::value == false': message}} +// expected-error@-1{{static assertion failed due to requirement 'std::is_const::value == false': message}} static_assert(!(std::is_const::value == true), "message"); -// expected-error@-1{{static_assert failed due to requirement '!(std::is_const::value == true)': message}} +// expected-error@-1{{static assertion failed due to requirement '!(std::is_const::value == true)': message}} static_assert(std::is_const(), "message"); -// expected-error@-1{{static_assert failed due to requirement 'std::is_const()': message}} +// expected-error@-1{{static assertion failed due to requirement 'std::is_const()': message}} static_assert(!(std::is_const()()), "message"); -// expected-error@-1{{static_assert failed due to requirement '!(std::is_const()())': message}} +// expected-error@-1{{static assertion failed due to requirement '!(std::is_const()())': message}} static_assert(std::is_same()), int>::value, "message"); -// expected-error@-1{{static_assert failed due to requirement 'std::is_same, int>::value': message}} +// expected-error@-1{{static assertion failed due to requirement 'std::is_same, int>::value': message}} static_assert(std::is_const::value, "message"); -// expected-error@-1{{static_assert failed due to requirement 'std::is_const::value': message}} +// expected-error@-1{{static assertion failed due to requirement 'std::is_const::value': message}} static_assert(std::is_const::value, "message"); -// expected-error@-1{{static_assert failed due to requirement 'std::is_const::value': message}} +// expected-error@-1{{static assertion failed due to requirement 'std::is_const::value': message}} static_assert(std::is_const::value, "message"); -// expected-error@-1{{static_assert failed due to requirement 'std::is_const::value': message}} +// expected-error@-1{{static assertion failed due to requirement 'std::is_const::value': message}} struct BI_tag {}; struct RAI_tag : BI_tag {}; @@ -160,7 +160,7 @@ template void foo() { static_assert(std::is_same::value, "message"); - // expected-error@-1{{static_assert failed due to requirement 'std::is_same::value': message}} + // expected-error@-1{{static assertion failed due to requirement 'std::is_same::value': message}} } template void foo(); // expected-note@-1{{in instantiation of function template specialization 'foo' requested here}} @@ -178,7 +178,7 @@ template void foo2() { static_assert(::ns::NestedTemplates1::NestedTemplates2::template NestedTemplates3::value, "message"); - // expected-error@-1{{static_assert failed due to requirement '::ns::NestedTemplates1::NestedTemplates2::NestedTemplates3::value': message}} + // expected-error@-1{{static assertion failed due to requirement '::ns::NestedTemplates1::NestedTemplates2::NestedTemplates3::value': message}} } template void foo2(); // expected-note@-1{{in instantiation of function template specialization 'foo2' requested here}} @@ -186,9 +186,9 @@ template void foo3(T t) { static_assert(std::is_const::value, "message"); - // expected-error-re@-1{{static_assert failed due to requirement 'std::is_const<(lambda at {{.*}}static-assert.cpp:{{[0-9]*}}:{{[0-9]*}})>::value': message}} + // expected-error-re@-1{{static assertion failed due to requirement 'std::is_const<(lambda at {{.*}}static-assert.cpp:{{[0-9]*}}:{{[0-9]*}})>::value': message}} static_assert(std::is_const::value, "message"); - // expected-error-re@-1{{static_assert failed due to requirement 'std::is_const<(lambda at {{.*}}static-assert.cpp:{{[0-9]*}}:{{[0-9]*}})>::value': message}} + // expected-error-re@-1{{static assertion failed due to requirement 'std::is_const<(lambda at {{.*}}static-assert.cpp:{{[0-9]*}}:{{[0-9]*}})>::value': message}} } void callFoo3() { foo3([]() {}); @@ -206,10 +206,12 @@ static_assert(42, "message"); static_assert(42.0, "message"); // expected-warning {{implicit conversion from 'double' to 'bool' changes value from 42 to true}} constexpr int *p = 0; -static_assert(p, "message"); // expected-error {{static_assert failed}} +static_assert(p, "message"); // expected-error {{static assertion failed}} struct NotBool { } notBool; constexpr NotBool constexprNotBool; static_assert(notBool, "message"); // expected-error {{value of type 'struct NotBool' is not contextually convertible to 'bool'}} static_assert(constexprNotBool, "message"); // expected-error {{value of type 'const NotBool' is not contextually convertible to 'bool'}} + +static_assert(1 , "") // expected-error {{expected ';' after 'static_assert'}} diff --git a/clang/test/SemaCXX/using-decl-templates.cpp b/clang/test/SemaCXX/using-decl-templates.cpp --- a/clang/test/SemaCXX/using-decl-templates.cpp +++ b/clang/test/SemaCXX/using-decl-templates.cpp @@ -95,7 +95,7 @@ namespace DontDiagnoseInvalidTest { template struct Base { - static_assert(Value, ""); // expected-error {{static_assert failed}} + static_assert(Value, ""); // expected-error {{static assertion failed}} }; struct Derived : Base { // expected-note {{requested here}} using Base::Base; // OK. Don't diagnose that 'Base' isn't a base class of Derived. diff --git a/clang/test/SemaCXX/weak-init.cpp b/clang/test/SemaCXX/weak-init.cpp --- a/clang/test/SemaCXX/weak-init.cpp +++ b/clang/test/SemaCXX/weak-init.cpp @@ -2,7 +2,7 @@ extern const int W1 __attribute__((weak)) = 10; // expected-note {{declared here}} -static_assert(W1 == 10, ""); // expected-error {{static_assert expression is not an integral constant expression}} +static_assert(W1 == 10, ""); // expected-error {{static assertion expression is not an integral constant expression}} // expected-note@-1 {{initializer of weak variable 'W1' is not considered constant because it may be different at runtime}} extern const int W2 __attribute__((weak)) = 20; diff --git a/clang/test/SemaTemplate/instantiate-var-template.cpp b/clang/test/SemaTemplate/instantiate-var-template.cpp --- a/clang/test/SemaTemplate/instantiate-var-template.cpp +++ b/clang/test/SemaTemplate/instantiate-var-template.cpp @@ -31,7 +31,7 @@ static_assert(b == 1, ""); // expected-note {{in instantiation of}} expected-error {{not an integral constant}} template void f() { - static_assert(a == 0, ""); // expected-error {{static_assert failed due to requirement 'a == 0'}} + static_assert(a == 0, ""); // expected-error {{static assertion failed due to requirement 'a == 0'}} } } diff --git a/clang/test/SemaTemplate/pr52909.cpp b/clang/test/SemaTemplate/pr52909.cpp --- a/clang/test/SemaTemplate/pr52909.cpp +++ b/clang/test/SemaTemplate/pr52909.cpp @@ -15,7 +15,7 @@ // expected-note@-1 {{because 't.begin' would be invalid: reference to non-static member function must be called}} }; -static_assert(Beginable); // expected-error {{static_assert failed}} +static_assert(Beginable); // expected-error {{static assertion failed}} // expected-note@-1 {{does not satisfy 'Beginable'}} } // namespace PR52905 @@ -48,7 +48,7 @@ static void begin(double); }; -static_assert(C); // expected-error {{static_assert failed}} +static_assert(C); // expected-error {{static assertion failed}} // expected-note@-1 {{because 'PR52909b::A' does not satisfy 'C'}} } // namespace PR52909b @@ -65,7 +65,7 @@ int *f() const; }; -static_assert(C); // expected-error {{static_assert failed}} +static_assert(C); // expected-error {{static assertion failed}} // expected-note@-1 {{because 'PR53075::S' does not satisfy 'C'}} } // namespace PR53075 diff --git a/clang/test/SemaTemplate/pr52970.cpp b/clang/test/SemaTemplate/pr52970.cpp --- a/clang/test/SemaTemplate/pr52970.cpp +++ b/clang/test/SemaTemplate/pr52970.cpp @@ -32,7 +32,7 @@ static_assert(C); static_assert(!C); -static_assert(C); // cxx20-error {{static_assert failed}} +static_assert(C); // cxx20-error {{static assertion failed}} // cxx20-note@-1 {{because 'DotFollowingFunctionName::Bad' does not satisfy 'C'}} #endif } // namespace DotFollowingFunctionName @@ -57,7 +57,7 @@ static_assert(C); static_assert(!C); -static_assert(C); // cxx20-error {{static_assert failed}} +static_assert(C); // cxx20-error {{static assertion failed}} // cxx20-note@-1 {{because 'DotFollowingPointer::Bad' (aka 'Holder *') does not satisfy 'C'}} #endif } // namespace DotFollowingPointer diff --git a/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp b/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp --- a/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp +++ b/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp @@ -184,7 +184,7 @@ namespace Diags { struct A { int n, m; }; - template struct X { static_assert(a.n == a.m); }; // expected-error {{static_assert failed due to requirement 'Diags::A{1, 2}.n == Diags::A{1, 2}.m'}} + template struct X { static_assert(a.n == a.m); }; // expected-error {{static assertion failed due to requirement 'Diags::A{1, 2}.n == Diags::A{1, 2}.m'}} template struct X; // expected-note {{in instantiation of template class 'Diags::X<{1, 2}>' requested here}} }