forked from OSchip/llvm-project
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. llvm-svn: 147357
This commit is contained in:
parent
4ea99816ef
commit
e434590bd9
|
@ -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<CXXCompat>;
|
||||
def ext_empty_struct_union : Extension<
|
||||
"empty %select{struct|union}0 is a GNU extension">, InGroup<GNU>;
|
||||
def warn_empty_struct_union_compat : Warning<"empty %select{struct|union}0 "
|
||||
"has size 0 in C, size 1 in C++">, InGroup<CXXCompat>, 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<CXX11>;
|
||||
def ext_deleted_function : ExtWarn<
|
||||
"deleted function definitions are a C++11 extension">, InGroup<CXX11>;
|
||||
def warn_cxx98_compat_deleted_function : Warning<
|
||||
"deleted function definitions are incompatible with C++98">,
|
||||
InGroup<CXX98Compat>, DefaultIgnore;
|
||||
def warn_defaulted_function_accepted_as_extension: ExtWarn<
|
||||
"defaulted function definition accepted as a C++11 extension">,
|
||||
InGroup<CXX11>;
|
||||
def ext_defaulted_function : ExtWarn<
|
||||
"defaulted function definitions are a C++11 extension">, InGroup<CXX11>;
|
||||
def warn_cxx98_compat_defaulted_function : Warning<
|
||||
"defaulted function definitions are incompatible with C++98">,
|
||||
InGroup<CXX98Compat>, 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<CXX11>;
|
||||
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<CXX11>;
|
||||
"alias declarations are a C++11 extension">, InGroup<CXX11>;
|
||||
def warn_cxx98_compat_alias_declaration : Warning<
|
||||
"alias declarations are incompatible with C++98">,
|
||||
InGroup<CXX98Compat>, 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<CXX11>;
|
||||
"'%0' keyword is a C++11 extension">, InGroup<CXX11>;
|
||||
def warn_cxx98_compat_override_control_keyword : Warning<
|
||||
"'%0' keyword is incompatible with C++98">,
|
||||
InGroup<CXX98Compat>, DefaultIgnore;
|
||||
|
|
|
@ -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<VLA>;
|
||||
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<CXX98Compat>, DefaultIgnore;
|
||||
def ext_unelaborated_friend_type : ExtWarn<
|
||||
"specify '%select{struct|union|class|enum}0' to befriend %1; accepted "
|
||||
"as a C++11 extension">, InGroup<CXX11>;
|
||||
"unelaborated friend declaration is a C++11 extension; specify "
|
||||
"'%select{struct|union|class|enum}0' to befriend %1">, InGroup<CXX11>;
|
||||
def warn_cxx98_compat_unelaborated_friend_type : Warning<
|
||||
"befriending %1 without '%select{struct|union|class|enum}0' keyword is "
|
||||
"incompatible with C++98">, InGroup<CXX98Compat>, 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<Microsoft>;
|
||||
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<CXX11>;
|
||||
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<DiagGroup<"conditional-type-mismatch">>;
|
||||
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<GNU>;
|
||||
def warn_unused_expr : Warning<"expression result unused">,
|
||||
InGroup<UnusedValue>;
|
||||
|
@ -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<C99>;
|
||||
"%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 "
|
||||
"feature">, InGroup<C99>;
|
||||
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<
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<Decl *, 32> FieldDecls;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -2242,10 +2242,7 @@ ExprResult Sema::ActOnDesignatedInitializer(Designation &Desig,
|
|||
InitExpressions.data(), InitExpressions.size(),
|
||||
Loc, GNUSyntax, Init.takeAs<Expr>());
|
||||
|
||||
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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<typename T> void f(T);
|
||||
|
@ -75,7 +76,7 @@ void N0::X0<T>::ft1(T t, U u) {
|
|||
|
||||
template<typename T> T N0::X0<T>::member;
|
||||
|
||||
template<> struct N0::X0<void> { }; // expected-warning{{originally}}
|
||||
template<> struct N0::X0<void> { }; // expected-warning{{C++11 extension}}
|
||||
N0::X0<void> test_X0;
|
||||
|
||||
namespace N1 {
|
||||
|
@ -124,7 +125,7 @@ NonDefaultConstructible &get_static_member() {
|
|||
return N0::X0<NonDefaultConstructible>::member;
|
||||
}
|
||||
|
||||
template<> int N0::X0<int>::member; // expected-warning{{originally}}
|
||||
template<> int N0::X0<int>::member; // expected-warning{{C++11 extension}}
|
||||
|
||||
template<> float N0::X0<float>::member = 3.14f;
|
||||
|
||||
|
@ -152,7 +153,7 @@ namespace N0 {
|
|||
}
|
||||
|
||||
template<>
|
||||
struct N0::X0<long>::Inner { }; // expected-warning{{originally}}
|
||||
struct N0::X0<long>::Inner { }; // expected-warning{{C++11 extension}}
|
||||
|
||||
template<>
|
||||
struct N0::X0<float>::Inner { };
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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}}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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<typename T>
|
||||
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<typename T>
|
||||
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>(HasConstantValue);
|
||||
|
@ -47,14 +47,14 @@ template<typename T> 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<typename T>
|
||||
struct X1 {
|
||||
template<int (&Array)[T::value]> // 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<typename T, unsigned N>
|
|||
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<typename T>
|
||||
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>(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> 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}}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -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}}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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, "");
|
||||
|
|
|
@ -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'}}
|
||||
};
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -86,7 +86,7 @@ namespace N {
|
|||
|
||||
template<> struct N::B<int> { }; // okay
|
||||
|
||||
template<> struct N::B<float> { }; // expected-warning{{originally}}
|
||||
template<> struct N::B<float> { }; // expected-warning{{C++11 extension}}
|
||||
|
||||
namespace M {
|
||||
template<> struct ::N::B<short> { }; // expected-error{{class template specialization of 'B' not in a namespace enclosing 'N'}}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
template<typename T, T Divisor>
|
||||
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<int, 2>::value == 5? 1 : -1];
|
||||
|
@ -114,4 +114,3 @@ namespace PR6449 {
|
|||
template class X1<char>;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace N {
|
|||
}
|
||||
|
||||
template<typename T>
|
||||
struct N::M::A<T*> { }; // expected-warning{{originally}}
|
||||
struct N::M::A<T*> { }; // expected-warning{{C++11 extension}}
|
||||
|
||||
// C++ [temp.class.spec]p9
|
||||
// bullet 1
|
||||
|
|
Loading…
Reference in New Issue