From: Richard Smith Date: Thu, 29 Dec 2011 21:57:33 +0000 (+0000) Subject: Change the diagnostics which said 'accepted as an extension' to instead say X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d7c56e1114bfe7d461786903bb720d2c6efc05a1;p=clang Change the diagnostics which said 'accepted as an extension' to instead say 'is an extension'. The former is inappropriate and confusing when building with -Werror/-pedantic-errors. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147357 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index a7f614fe70..c609cc4457 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -38,9 +38,10 @@ def ext_integer_complex : Extension< "complex integer types are an extension">; def ext_thread_before : Extension<"'__thread' before 'static'">; -def ext_empty_struct_union : Extension<"empty %select{struct|union}0 " - "(accepted as an extension) has size 0 in C, size 1 in C++">, - InGroup; +def ext_empty_struct_union : Extension< + "empty %select{struct|union}0 is a GNU extension">, InGroup; +def warn_empty_struct_union_compat : Warning<"empty %select{struct|union}0 " + "has size 0 in C, size 1 in C++">, InGroup, DefaultIgnore; def error_empty_enum : Error<"use of empty enum">; def err_invalid_sign_spec : Error<"'%0' cannot be signed or unsigned">; def err_invalid_short_spec : Error<"'short %0' is invalid">; @@ -540,21 +541,20 @@ def err_missing_whitespace_digraph : Error< "%select{template name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0" " which forms the digraph '<:' (aka '[') and a ':', did you mean '< ::'?">; -def warn_deleted_function_accepted_as_extension: ExtWarn< - "deleted function definition accepted as a C++11 extension">, InGroup; +def ext_deleted_function : ExtWarn< + "deleted function definitions are a C++11 extension">, InGroup; def warn_cxx98_compat_deleted_function : Warning< "deleted function definitions are incompatible with C++98">, InGroup, DefaultIgnore; -def warn_defaulted_function_accepted_as_extension: ExtWarn< - "defaulted function definition accepted as a C++11 extension">, - InGroup; +def ext_defaulted_function : ExtWarn< + "defaulted function definitions are a C++11 extension">, InGroup; def warn_cxx98_compat_defaulted_function : Warning< "defaulted function definitions are incompatible with C++98">, InGroup, DefaultIgnore; // C++11 in-class member initialization def ext_nonstatic_member_init : ExtWarn< - "in-class initialization of non-static data member accepted as a C++11 extension">, + "in-class initialization of non-static data member is a C++11 extension">, InGroup; def warn_cxx98_compat_nonstatic_member_init : Warning< "in-class initialization of non-static data members is incompatible with C++98">, @@ -566,7 +566,7 @@ def err_incomplete_array_member_init: Error< // C++11 alias-declaration def ext_alias_declaration : ExtWarn< - "alias declarations accepted as a C++11 extension">, InGroup; + "alias declarations are a C++11 extension">, InGroup; def warn_cxx98_compat_alias_declaration : Warning< "alias declarations are incompatible with C++98">, InGroup, DefaultIgnore; @@ -577,7 +577,7 @@ def err_alias_declaration_specialization : Error< // C++11 override control def ext_override_control_keyword : ExtWarn< - "'%0' keyword accepted as a C++11 extension">, InGroup; + "'%0' keyword is a C++11 extension">, InGroup; def warn_cxx98_compat_override_control_keyword : Warning< "'%0' keyword is incompatible with C++98">, InGroup, DefaultIgnore; diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index df10a2df5d..ff60e1bb61 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -35,8 +35,7 @@ def warn_double_const_requires_fp64 : Warning< "double precision constant requires cl_khr_fp64, casting to single precision">; // C99 variable-length arrays -def ext_vla : Extension< - "variable length arrays are a C99 feature, accepted as an extension">, +def ext_vla : Extension<"variable length arrays are a C99 feature">, InGroup; def err_vla_non_pod : Error<"variable length array of non-POD element type %0">; def err_vla_in_sfinae : Error< @@ -63,8 +62,6 @@ def err_variably_modified_new_type : Error< // C99 Designated Initializers def ext_designated_init : Extension< "designated initializers are a C99 feature">; -def ext_designated_init_cxx : Extension< - "designated initializers are a C99 feature, accepted in C++ as an extension">; def err_array_designator_negative : Error< "array designator value '%0' is negative">; def err_array_designator_empty_range : Error< @@ -653,8 +650,8 @@ def warn_cxx98_compat_friend_is_member : Warning< "friend declaration naming a member of the declaring class is incompatible " "with C++98">, InGroup, DefaultIgnore; def ext_unelaborated_friend_type : ExtWarn< - "specify '%select{struct|union|class|enum}0' to befriend %1; accepted " - "as a C++11 extension">, InGroup; + "unelaborated friend declaration is a C++11 extension; specify " + "'%select{struct|union|class|enum}0' to befriend %1">, InGroup; def warn_cxx98_compat_unelaborated_friend_type : Warning< "befriending %1 without '%select{struct|union|class|enum}0' keyword is " "incompatible with C++98">, InGroup, DefaultIgnore; @@ -750,9 +747,9 @@ def err_class_redeclared_with_different_access : Error< "%0 redeclared with '%1' access">; def err_access : Error< "%1 is a %select{private|protected}0 member of %3">, AccessControl; -def war_ms_using_declaration_inaccessible : ExtWarn< - "using declaration refers to inaccessible member '%0', which refers " - "to accessible member '%1', accepted for Microsoft compatibility">, +def ext_ms_using_declaration_inaccessible : ExtWarn< + "using declaration referring to inaccessible member '%0' (which refers " + "to accessible member '%1') is a Microsoft compatibility extension">, AccessControl, InGroup; def err_access_ctor : Error< "calling a %select{private|protected}0 constructor of class %2">, @@ -2314,9 +2311,9 @@ def err_template_spec_decl_out_of_scope : Error< "function|static data member|member class}0 specialization of %1 must " "originally be declared in namespace %2">; def ext_template_spec_decl_out_of_scope : ExtWarn< - "%select{class template|class template partial|function template|member " - "function|static data member|member class}0 specialization of %1 must " - "originally be declared in namespace %2; accepted as a C++11 extension">, + "first declaration of %select{class template|class template partial|" + "function template|member function|static data member|member class}0 " + "specialization of %1 outside namespace %2 is a C++11 extension">, InGroup; def warn_cxx98_compat_template_spec_decl_out_of_scope : Warning< "%select{class template|class template partial|function template|member " @@ -4329,8 +4326,8 @@ def warn_typecheck_cond_pointer_integer_mismatch : ExtWarn< InGroup>; def err_typecheck_choose_expr_requires_constant : Error< "'__builtin_choose_expr' requires a constant expression">; -def ext_typecheck_expression_not_constant_but_accepted : Extension< - "expression is not a constant, but is accepted as one by GNU extensions">, +def ext_typecheck_expression_not_constant : Extension< + "expression is not a constant; folding it to one is a GNU extension">, InGroup; def warn_unused_expr : Warning<"expression result unused">, InGroup; @@ -4447,10 +4444,11 @@ def err_in_class_initializer_literal_type : Error< "in-class initializer for static data member of type %0 requires " "'constexpr' specifier">; def err_in_class_initializer_non_constant : Error< - "in-class initializer is not a constant expression">; + "in-class initializer for static data member is not a constant expression">; def ext_in_class_initializer_non_constant : Extension< - "in-class initializer is not a constant expression, accepted as an extension">; + "in-class initializer for static data member is not a constant expression; " + "folding it to a constant is a GNU extension">; // C++ anonymous unions and GNU anonymous structs/unions def ext_anonymous_union : Extension< @@ -5021,9 +5019,11 @@ def err_missing_param_declspec : Error< def err_objc_array_of_interfaces : Error< "array of interface %0 is invalid (probably should be an array of pointers)">; def ext_c99_array_usage : Extension< - "use of C99-specific array features, accepted as an extension">, InGroup; + "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 " + "feature">, InGroup; def err_c99_array_usage_cxx : Error< - "C99-specific array features are not permitted in C++">; + "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 " + "feature, not permitted in C++">; def err_double_requires_fp64 : Error< "use of type 'double' requires cl_khr_fp64 extension to be enabled">; def err_nsconsumed_attribute_mismatch : Error< diff --git a/lib/Parse/ParseCXXInlineMethods.cpp b/lib/Parse/ParseCXXInlineMethods.cpp index d5b240ab79..51dc5c88f8 100644 --- a/lib/Parse/ParseCXXInlineMethods.cpp +++ b/lib/Parse/ParseCXXInlineMethods.cpp @@ -76,7 +76,7 @@ Decl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, if (Tok.is(tok::kw_delete)) { Diag(Tok, getLang().CPlusPlus0x ? diag::warn_cxx98_compat_deleted_function : - diag::warn_deleted_function_accepted_as_extension); + diag::ext_deleted_function); KWLoc = ConsumeToken(); Actions.SetDeclDeleted(FnD, KWLoc); @@ -84,7 +84,7 @@ Decl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, } else if (Tok.is(tok::kw_default)) { Diag(Tok, getLang().CPlusPlus0x ? diag::warn_cxx98_compat_defaulted_function : - diag::warn_defaulted_function_accepted_as_extension); + diag::ext_defaulted_function); KWLoc = ConsumeToken(); Actions.SetDeclDefaulted(FnD, KWLoc); diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 94f7b9bb7d..ee4a51e184 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -2725,9 +2725,10 @@ void Parser::ParseStructUnionBody(SourceLocation RecordLoc, // Empty structs are an extension in C (C99 6.7.2.1p7), but are allowed in // C++. - if (Tok.is(tok::r_brace) && !getLang().CPlusPlus) - Diag(Tok, diag::ext_empty_struct_union) - << (TagType == TST_union); + if (Tok.is(tok::r_brace) && !getLang().CPlusPlus) { + Diag(Tok, diag::ext_empty_struct_union) << (TagType == TST_union); + Diag(Tok, diag::warn_empty_struct_union_compat) << (TagType == TST_union); + } SmallVector FieldDecls; diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index b2de1046fd..8cfc02bde1 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -933,7 +933,7 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, if (Tok.is(tok::kw_delete)) { Diag(Tok, getLang().CPlusPlus0x ? diag::warn_cxx98_compat_deleted_function : - diag::warn_deleted_function_accepted_as_extension); + diag::ext_deleted_function); KWLoc = ConsumeToken(); Actions.SetDeclDeleted(Res, KWLoc); @@ -941,7 +941,7 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, } else if (Tok.is(tok::kw_default)) { Diag(Tok, getLang().CPlusPlus0x ? diag::warn_cxx98_compat_defaulted_function : - diag::warn_defaulted_function_accepted_as_extension); + diag::ext_defaulted_function); KWLoc = ConsumeToken(); Actions.SetDeclDefaulted(Res, KWLoc); diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp index acc19d6c92..7991a46ca6 100644 --- a/lib/Sema/SemaAccess.cpp +++ b/lib/Sema/SemaAccess.cpp @@ -1166,7 +1166,7 @@ static bool IsMicrosoftUsingDeclarationAccessBug(Sema& S, if (Entity.getTargetDecl()->getAccess() == AS_private && (OrigDecl->getAccess() == AS_public || OrigDecl->getAccess() == AS_protected)) { - S.Diag(AccessLoc, diag::war_ms_using_declaration_inaccessible) + S.Diag(AccessLoc, diag::ext_ms_using_declaration_inaccessible) << Shadow->getUsingDecl()->getQualifiedNameAsString() << OrigDecl->getQualifiedNameAsString(); return true; diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index e8fa40f263..7a28a44823 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -2242,10 +2242,7 @@ ExprResult Sema::ActOnDesignatedInitializer(Designation &Desig, InitExpressions.data(), InitExpressions.size(), Loc, GNUSyntax, Init.takeAs()); - if (getLangOptions().CPlusPlus) - Diag(DIE->getLocStart(), diag::ext_designated_init_cxx) - << DIE->getSourceRange(); - else if (!getLangOptions().C99) + if (!getLangOptions().C99) Diag(DIE->getLocStart(), diag::ext_designated_init) << DIE->getSourceRange(); diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 34f6a93528..3cececb8c4 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -1357,9 +1357,9 @@ QualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, else Diag(Loc, diag::ext_vla); } else if (ASM != ArrayType::Normal || Quals != 0) - Diag(Loc, + Diag(Loc, getLangOptions().CPlusPlus? diag::err_c99_array_usage_cxx - : diag::ext_c99_array_usage); + : diag::ext_c99_array_usage) << ASM; } return T; diff --git a/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp b/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp index 2295235570..dff7cd5b40 100644 --- a/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp +++ b/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp @@ -36,7 +36,8 @@ namespace N1 { template<> void N0::f0(long) { } // expected-error{{not in a namespace enclosing}} } -template<> void N0::f0(double) { } // expected-warning{{originally be declared}} +template<> void N0::f0(double); // expected-warning{{C++11 extension}} +template<> void N0::f0(double) { } struct X1 { template void f(T); @@ -75,7 +76,7 @@ void N0::X0::ft1(T t, U u) { template T N0::X0::member; -template<> struct N0::X0 { }; // expected-warning{{originally}} +template<> struct N0::X0 { }; // expected-warning{{C++11 extension}} N0::X0 test_X0; namespace N1 { @@ -124,7 +125,7 @@ NonDefaultConstructible &get_static_member() { return N0::X0::member; } -template<> int N0::X0::member; // expected-warning{{originally}} +template<> int N0::X0::member; // expected-warning{{C++11 extension}} template<> float N0::X0::member = 3.14f; @@ -152,7 +153,7 @@ namespace N0 { } template<> -struct N0::X0::Inner { }; // expected-warning{{originally}} +struct N0::X0::Inner { }; // expected-warning{{C++11 extension}} template<> struct N0::X0::Inner { }; diff --git a/test/Misc/warning-flags.c b/test/Misc/warning-flags.c index 8a3b941eba..5e05e0b87a 100644 --- a/test/Misc/warning-flags.c +++ b/test/Misc/warning-flags.c @@ -17,7 +17,7 @@ This test serves two purposes: The list of warnings below should NEVER grow. It should gradually shrink to 0. -CHECK: Warnings without flags (269): +CHECK: Warnings without flags (268): CHECK-NEXT: ext_anon_param_requires_type_specifier CHECK-NEXT: ext_anonymous_struct_union_qualified CHECK-NEXT: ext_array_init_copy @@ -25,7 +25,6 @@ CHECK-NEXT: ext_binary_literal CHECK-NEXT: ext_cast_fn_obj CHECK-NEXT: ext_delete_void_ptr_operand CHECK-NEXT: ext_designated_init -CHECK-NEXT: ext_designated_init_cxx CHECK-NEXT: ext_duplicate_declspec CHECK-NEXT: ext_ellipsis_exception_spec CHECK-NEXT: ext_empty_fnmacro_arg diff --git a/test/Parser/cxx-ext-delete-default.cpp b/test/Parser/cxx-ext-delete-default.cpp index be6efee241..af8b6d6d34 100644 --- a/test/Parser/cxx-ext-delete-default.cpp +++ b/test/Parser/cxx-ext-delete-default.cpp @@ -1,11 +1,11 @@ // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s struct A { - A(const A&) = delete; // expected-warning {{accepted as a C++11 extension}} - A& operator=(const A&) = delete; // expected-warning {{accepted as a C++11 extension}} - A() = default; // expected-warning {{accepted as a C++11 extension}} + A(const A&) = delete; // expected-warning {{C++11 extension}} + A& operator=(const A&) = delete; // expected-warning {{C++11 extension}} + A() = default; // expected-warning {{C++11 extension}} ~A(); }; -void f() = delete; // expected-warning {{accepted as a C++11 extension}} -A::~A() = default; //expected-warning {{accepted as a C++11 extension}} +void f() = delete; // expected-warning {{C++11 extension}} +A::~A() = default; //expected-warning {{C++11 extension}} diff --git a/test/Parser/cxx0x-in-cxx98.cpp b/test/Parser/cxx0x-in-cxx98.cpp index e5f104168a..b4bda89d27 100644 --- a/test/Parser/cxx0x-in-cxx98.cpp +++ b/test/Parser/cxx0x-in-cxx98.cpp @@ -12,9 +12,9 @@ struct B { virtual void f(); virtual void g(); }; -struct D final : B { // expected-warning {{'final' keyword accepted as a C++11 extension}} - virtual void f() override; // expected-warning {{'override' keyword accepted as a C++11 extension}} - virtual void g() final; // expected-warning {{'final' keyword accepted as a C++11 extension}} +struct D final : B { // expected-warning {{'final' keyword is a C++11 extension}} + virtual void f() override; // expected-warning {{'override' keyword is a C++11 extension}} + virtual void g() final; // expected-warning {{'final' keyword is a C++11 extension}} }; void NewBracedInitList() { diff --git a/test/Sema/array-init.c b/test/Sema/array-init.c index bc958c3eea..a8ee3ca8df 100644 --- a/test/Sema/array-init.c +++ b/test/Sema/array-init.c @@ -218,7 +218,7 @@ void varArray() { } // PR2151 -void emptyInit() {struct {} x[] = {6};} //expected-warning{{empty struct (accepted as an extension) has size 0 in C, size 1 in C++}} \ +void emptyInit() {struct {} x[] = {6};} //expected-warning{{empty struct is a GNU extension}} \ // expected-error{{initializer for aggregate with no elements}} void noNamedInit() { @@ -242,7 +242,7 @@ struct soft_segment_descriptor gdt_segs[] = { }; static void sppp_ipv6cp_up(); -const struct {} ipcp = { sppp_ipv6cp_up }; //expected-warning{{empty struct (accepted as an extension) has size 0 in C, size 1 in C++}} \ +const struct {} ipcp = { sppp_ipv6cp_up }; //expected-warning{{empty struct is a GNU extension}} \ // expected-warning{{excess elements in struct initializer}} struct _Matrix { union { float m[4][4]; }; }; //expected-warning{{anonymous unions are a GNU extension in C}} diff --git a/test/Sema/c89.c b/test/Sema/c89.c index e11cd4e6f1..2a791b3c48 100644 --- a/test/Sema/c89.c +++ b/test/Sema/c89.c @@ -61,11 +61,11 @@ void foo(T); /* typedef for void is allowed */ void foo(void) {} /* PR2759 */ -void test10 (int x[*]); /* expected-warning {{variable length arrays are a C99 feature, accepted as an extension}} */ -void test11 (int x[static 4]); /* expected-warning {{use of C99-specific array features}} */ +void test10 (int x[*]); /* expected-warning {{variable length arrays are a C99 feature}} */ +void test11 (int x[static 4]); /* expected-warning {{static array size is a C99 feature}} */ -void test12 (int x[const 4]) { /* expected-warning {{use of C99-specific array features}} */ - int Y[x[1]]; /* expected-warning {{variable length arrays are a C99 feature, accepted as an extension}} */ +void test12 (int x[const 4]) { /* expected-warning {{qualifier in array size is a C99 feature}} */ + int Y[x[1]]; /* expected-warning {{variable length arrays are a C99 feature}} */ } /* PR4074 */ diff --git a/test/Sema/compound-literal.c b/test/Sema/compound-literal.c index 4130762599..beec6ca66e 100644 --- a/test/Sema/compound-literal.c +++ b/test/Sema/compound-literal.c @@ -12,7 +12,7 @@ static int x = (int){1}; static int *p2 = (int []){2,x}; // -expected-error {{initializer element is not a compile-time constant}} static long *p3 = (long []){2,"x"}; // -expected-warning {{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char [2]'}} -typedef struct { } cache_t; // -expected-warning{{empty struct (accepted as an extension) has size 0 in C, size 1 in C++}} +typedef struct { } cache_t; // -expected-warning{{empty struct is a GNU extension}} static cache_t clo_I1_cache = ((cache_t) { } ); // -expected-warning{{use of GNU empty initializer extension}} typedef struct Test {int a;int b;} Test; diff --git a/test/SemaCXX/MicrosoftCompatibility.cpp b/test/SemaCXX/MicrosoftCompatibility.cpp index 4ae949544e..4db5437205 100644 --- a/test/SemaCXX/MicrosoftCompatibility.cpp +++ b/test/SemaCXX/MicrosoftCompatibility.cpp @@ -84,7 +84,7 @@ private: class C : public B { private: - using B::f; // expected-warning {{using declaration refers to inaccessible member 'ms_using_declaration_bug::B::f', which refers to accessible member 'ms_using_declaration_bug::A::f', accepted for Microsoft compatibility}} + using B::f; // expected-warning {{using declaration referring to inaccessible member 'ms_using_declaration_bug::B::f' (which refers to accessible member 'ms_using_declaration_bug::A::f') is a Microsoft compatibility extension}} }; } diff --git a/test/SemaCXX/PR9572.cpp b/test/SemaCXX/PR9572.cpp index b0bbfa6318..b475b57416 100644 --- a/test/SemaCXX/PR9572.cpp +++ b/test/SemaCXX/PR9572.cpp @@ -3,7 +3,7 @@ class Base { virtual ~Base(); // expected-note {{implicitly declared private here}} }; struct Foo : public Base { // expected-error {{base class 'Base' has private destructor}} - const int kBlah = 3; // expected-warning {{accepted as a C++11 extension}} + const int kBlah = 3; // expected-warning {{is a C++11 extension}} Foo(); }; struct Bar : public Foo { diff --git a/test/SemaCXX/c99-variable-length-array.cpp b/test/SemaCXX/c99-variable-length-array.cpp index 3f1d6a8a55..37115abc68 100644 --- a/test/SemaCXX/c99-variable-length-array.cpp +++ b/test/SemaCXX/c99-variable-length-array.cpp @@ -14,8 +14,8 @@ struct POD { // We allow VLAs of POD types, only. void vla(int N) { - int array1[N]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} - POD array2[N]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + int array1[N]; // expected-warning{{variable length arrays are a C99 feature}} + POD array2[N]; // expected-warning{{variable length arrays are a C99 feature}} NonPOD array3[N]; // expected-error{{variable length array of non-POD element type 'NonPOD'}} NonPOD2 array4[N][3]; // expected-error{{variable length array of non-POD element type 'NonPOD2'}} } @@ -23,7 +23,7 @@ void vla(int N) { /// Warn about VLAs in templates. template void vla_in_template(int N, T t) { - int array1[N]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + int array1[N]; // expected-warning{{variable length arrays are a C99 feature}} } struct HasConstantValue { @@ -36,7 +36,7 @@ struct HasNonConstantValue { template void vla_in_template(T t) { - int array2[T::value]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + int array2[T::value]; // expected-warning{{variable length arrays are a C99 feature}} } template void vla_in_template(HasConstantValue); @@ -47,14 +47,14 @@ template struct X0 { }; // Cannot use any variably-modified type with a template parameter or // argument. void inst_with_vla(int N) { - int array[N]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + int array[N]; // expected-warning{{variable length arrays are a C99 feature}} X0<__typeof__(array)> x0a; // expected-error{{variably modified type 'typeof (array)' (aka 'int [N]') cannot be used as a template argument}} } template struct X1 { template // expected-error{{non-type template parameter of variably modified type 'int (&)[HasNonConstantValue::value]'}} \ - // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + // expected-warning{{variable length arrays are a C99 feature}} struct Inner { }; @@ -68,7 +68,7 @@ template void accept_array(T (&array)[N]); // expected-note{{candidate template ignored: failed template argument deduction}} void test_accept_array(int N) { - int array[N]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + int array[N]; // expected-warning{{variable length arrays are a C99 feature}} accept_array(array); // expected-error{{no matching function for call to 'accept_array'}} } @@ -77,7 +77,7 @@ void local_classes(int N) { struct X { int size; int array[N]; // expected-error{{fields must have a constant size: 'variable length array in structure' extension will never be supported}} \ - // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + // expected-warning{{variable length arrays are a C99 feature}} }; } @@ -87,7 +87,7 @@ namespace PR7206 { float left; float right; }; - struct edge_info edgeInfo[x]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + struct edge_info edgeInfo[x]; // expected-warning{{variable length arrays are a C99 feature}} } } @@ -95,7 +95,7 @@ namespace rdar8020206 { template void f(int i) { const unsigned value = i; - int array[value * i]; // expected-warning 2{{variable length arrays are a C99 feature, accepted as an extension}} + int array[value * i]; // expected-warning 2{{variable length arrays are a C99 feature}} } template void f(int); // expected-note{{instantiation of}} @@ -109,7 +109,7 @@ namespace rdar8021385 { typedef typename T::my_int my_int; void f0() { int M = 4; - my_int a[M]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + my_int a[M]; // expected-warning{{variable length arrays are a C99 feature}} } }; B a; @@ -117,7 +117,7 @@ namespace rdar8021385 { namespace PR8209 { void f(int n) { - typedef int vla_type[n]; // expected-warning{{variable length arrays are a C99 feature, accepted as an extension}} + typedef int vla_type[n]; // expected-warning{{variable length arrays are a C99 feature}} (void)new vla_type; // expected-error{{variably}} } } diff --git a/test/SemaCXX/c99.cpp b/test/SemaCXX/c99.cpp index cda069cf47..13918dcf5e 100644 --- a/test/SemaCXX/c99.cpp +++ b/test/SemaCXX/c99.cpp @@ -4,6 +4,6 @@ void f1(int i[static 5]) { // expected-error{{C99}} struct Point { int x; int y; }; -Point p1 = { .x = 17, // expected-warning{{designated initializers are a C99 feature, accepted in C++ as an extension}} - y: 25 }; // expected-warning{{designated initializers are a C99 feature, accepted in C++ as an extension}} \ +Point p1 = { .x = 17, // expected-warning{{designated initializers are a C99 feature}} + y: 25 }; // expected-warning{{designated initializers are a C99 feature}} \ // expected-warning{{use of GNU old-style field designator extension}} diff --git a/test/SemaCXX/class.cpp b/test/SemaCXX/class.cpp index 30b977913a..e079d0cc17 100644 --- a/test/SemaCXX/class.cpp +++ b/test/SemaCXX/class.cpp @@ -34,10 +34,10 @@ public: enum E1 { en1, en2 }; - int i = 0; // expected-warning {{in-class initialization of non-static data member accepted as a C++11 extension}} + int i = 0; // expected-warning {{in-class initialization of non-static data member is a C++11 extension}} static int si = 0; // expected-error {{non-const static data member must be initialized out of line}} static const NestedC ci = 0; // expected-error {{static data member of type 'const C::NestedC' must be initialized out of line}} - static const int nci = vs; // expected-error {{in-class initializer is not a constant expression}} + static const int nci = vs; // expected-error {{in-class initializer for static data member is not a constant expression}} static const int vi = 0; static const volatile int cvi = 0; // ok, illegal in C++11 static const E evi = 0; @@ -174,7 +174,7 @@ namespace rdar8367341 { struct A { static const float x = 5.0f; // expected-warning {{in-class initializer for static data member of type 'const float' is a GNU extension}} - static const float y = foo(); // expected-warning {{in-class initializer for static data member of type 'const float' is a GNU extension}} expected-error {{in-class initializer is not a constant expression}} + static const float y = foo(); // expected-warning {{in-class initializer for static data member of type 'const float' is a GNU extension}} expected-error {{in-class initializer for static data member is not a constant expression}} }; } diff --git a/test/SemaCXX/constant-expression-cxx11.cpp b/test/SemaCXX/constant-expression-cxx11.cpp index d78c16cca6..3dbb3c7e9e 100644 --- a/test/SemaCXX/constant-expression-cxx11.cpp +++ b/test/SemaCXX/constant-expression-cxx11.cpp @@ -168,7 +168,7 @@ namespace FunctionCast { constexpr int f() { return 1; } typedef double (*DoubleFn)(); typedef int (*IntFn)(); - int a[(int)DoubleFn(f)()]; // expected-error {{variable length array}} expected-warning{{extension}} + int a[(int)DoubleFn(f)()]; // expected-error {{variable length array}} expected-warning{{C99 feature}} int b[(int)IntFn(f)()]; // ok } @@ -462,7 +462,7 @@ static_assert(fail(*(&(&(*(*&(&zs[2] - 1)[0] + 2 - 2))[2])[-1][-1] + 1)) == 11, expected-error {{static_assert 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 }; // expected-warning {{extension}} +constexpr int arr[40] = { 1, 2, 3, [8] = 4 }; // expected-warning {{C99 feature}} constexpr int SumNonzero(const int *p) { return *p + (*p ? SumNonzero(p+1) : 0); } @@ -718,7 +718,7 @@ union U { int b; }; -constexpr U u[4] = { { .a = 0 }, { .b = 1 }, { .a = 2 }, { .b = 3 } }; // expected-warning 4{{extension}} +constexpr U u[4] = { { .a = 0 }, { .b = 1 }, { .a = 2 }, { .b = 3 } }; // expected-warning 4{{C99 feature}} static_assert(u[0].a == 0, ""); static_assert(u[0].b, ""); // expected-error {{constant expression}} expected-note {{read of member 'b' of union with active member 'a'}} static_assert(u[1].b == 1, ""); diff --git a/test/SemaCXX/cxx0x-class.cpp b/test/SemaCXX/cxx0x-class.cpp index 2ceacfc9b2..d5590c5e22 100644 --- a/test/SemaCXX/cxx0x-class.cpp +++ b/test/SemaCXX/cxx0x-class.cpp @@ -11,7 +11,7 @@ public: int i = 0; static int si = 0; // expected-error {{non-const static data member must be initialized out of line}} static const NestedC ci = 0; // expected-error {{static data member of type 'const C::NestedC' must be initialized out of line}} - static const int nci = vs; // expected-error {{in-class initializer is not a constant expression}} + static const int nci = vs; // expected-error {{in-class initializer for static data member is not a constant expression}} static const int vi = 0; static const volatile int cvi = 0; // expected-error {{static const volatile data member must be initialized out of line}} }; @@ -21,7 +21,7 @@ namespace rdar8367341 { struct A { static const float x = 5.0f; // expected-warning {{GNU extension}} expected-note {{use 'constexpr' specifier to silence this warning}} - static const float y = foo(); // expected-warning {{GNU extension}} expected-note {{use 'constexpr' specifier to silence this warning}} expected-error {{in-class initializer is not a constant expression}} + static const float y = foo(); // expected-warning {{GNU extension}} expected-note {{use 'constexpr' specifier to silence this warning}} expected-error {{in-class initializer for static data member is not a constant expression}} static constexpr float x2 = 5.0f; static constexpr float y2 = foo(); // expected-error {{must be initialized by a constant expression}} expected-note {{non-constexpr function 'foo'}} }; diff --git a/test/SemaCXX/i-c-e-cxx.cpp b/test/SemaCXX/i-c-e-cxx.cpp index eae354814b..47a47b5e2f 100644 --- a/test/SemaCXX/i-c-e-cxx.cpp +++ b/test/SemaCXX/i-c-e-cxx.cpp @@ -48,7 +48,7 @@ void pr6373(const unsigned x = 0) { namespace rdar9204520 { struct A { - static const int B = int(0.75 * 1000 * 1000); // expected-warning {{not a constant expression, accepted as an extension}} + static const int B = int(0.75 * 1000 * 1000); // expected-warning {{not a constant expression; folding it to a constant is a GNU extension}} }; int foo() { return A::B; } diff --git a/test/SemaTemplate/class-template-spec.cpp b/test/SemaTemplate/class-template-spec.cpp index 8213a72635..f9015b37ea 100644 --- a/test/SemaTemplate/class-template-spec.cpp +++ b/test/SemaTemplate/class-template-spec.cpp @@ -86,7 +86,7 @@ namespace N { template<> struct N::B { }; // okay -template<> struct N::B { }; // expected-warning{{originally}} +template<> struct N::B { }; // expected-warning{{C++11 extension}} namespace M { template<> struct ::N::B { }; // expected-error{{class template specialization of 'B' not in a namespace enclosing 'N'}} diff --git a/test/SemaTemplate/instantiate-static-var.cpp b/test/SemaTemplate/instantiate-static-var.cpp index d2b0459ccc..f309f29eaf 100644 --- a/test/SemaTemplate/instantiate-static-var.cpp +++ b/test/SemaTemplate/instantiate-static-var.cpp @@ -2,7 +2,7 @@ template class X { public: - static const T value = 10 / Divisor; // expected-error{{in-class initializer is not a constant expression}} + static const T value = 10 / Divisor; // expected-error{{in-class initializer for static data member is not a constant expression}} }; int array1[X::value == 5? 1 : -1]; @@ -114,4 +114,3 @@ namespace PR6449 { template class X1; } - diff --git a/test/SemaTemplate/temp_class_spec_neg.cpp b/test/SemaTemplate/temp_class_spec_neg.cpp index 6b129a5369..be5fbb154e 100644 --- a/test/SemaTemplate/temp_class_spec_neg.cpp +++ b/test/SemaTemplate/temp_class_spec_neg.cpp @@ -9,7 +9,7 @@ namespace N { } template -struct N::M::A { }; // expected-warning{{originally}} +struct N::M::A { }; // expected-warning{{C++11 extension}} // C++ [temp.class.spec]p9 // bullet 1