forked from OSchip/llvm-project
Downgrade the "declaration does not declare anything" error to a
warning. It's not harmful to have such pointless declarations, and GCC does not diagnose this issue consistently. llvm-svn: 100814
This commit is contained in:
parent
d9235dbc02
commit
f19ac0ede9
|
@ -41,7 +41,7 @@ def err_expected_colon_after_setter_name : Error<
|
|||
"must end with ':'">;
|
||||
|
||||
// Parse && Sema
|
||||
def err_no_declarators : Error<"declaration does not declare anything">;
|
||||
def ext_no_declarators : ExtWarn<"declaration does not declare anything">;
|
||||
def err_param_redefinition : Error<"redefinition of parameter %0">;
|
||||
def err_invalid_storage_class_in_func_decl : Error<
|
||||
"invalid storage class specifier in function declarator">;
|
||||
|
|
|
@ -1459,7 +1459,7 @@ Sema::DeclPtrTy Sema::ParsedFreeStandingDeclSpec(Scope *S, DeclSpec &DS) {
|
|||
Record->getDeclContext()->isRecord())
|
||||
return BuildAnonymousStructOrUnion(S, DS, Record);
|
||||
|
||||
Diag(DS.getSourceRange().getBegin(), diag::err_no_declarators)
|
||||
Diag(DS.getSourceRange().getBegin(), diag::ext_no_declarators)
|
||||
<< DS.getSourceRange();
|
||||
}
|
||||
|
||||
|
@ -1481,9 +1481,8 @@ Sema::DeclPtrTy Sema::ParsedFreeStandingDeclSpec(Scope *S, DeclSpec &DS) {
|
|||
return DeclPtrTy::make(Tag);
|
||||
}
|
||||
|
||||
Diag(DS.getSourceRange().getBegin(), diag::err_no_declarators)
|
||||
Diag(DS.getSourceRange().getBegin(), diag::ext_no_declarators)
|
||||
<< DS.getSourceRange();
|
||||
return DeclPtrTy();
|
||||
}
|
||||
|
||||
return DeclPtrTy::make(Tag);
|
||||
|
|
|
@ -8,7 +8,7 @@ protected:
|
|||
|
||||
struct S {};
|
||||
enum {};
|
||||
int; // expected-error {{declaration does not declare anything}}
|
||||
int; // expected-warning {{declaration does not declare anything}}
|
||||
int : 1, : 2;
|
||||
|
||||
public:
|
||||
|
|
|
@ -6,7 +6,7 @@ template x; // expected-error {{C++ requires a type specifier for al
|
|||
// expected-error {{does not refer}}
|
||||
export template x; // expected-error {{expected '<' after 'template'}}
|
||||
export template<class T> class x0; // expected-warning {{exported templates are unsupported}}
|
||||
template < ; // expected-error {{parse error}} expected-error {{declaration does not declare anything}}
|
||||
template < ; // expected-error {{parse error}} expected-warning {{declaration does not declare anything}}
|
||||
template <template X> struct Err1; // expected-error {{expected '<' after 'template'}} \
|
||||
// expected-error{{extraneous}}
|
||||
template <template <typename> > struct Err2; // expected-error {{expected 'class' before '>'}} \
|
||||
|
|
|
@ -50,12 +50,12 @@ struct Redecl {
|
|||
void zz(); // expected-error{{duplicate member 'zz'}}
|
||||
};
|
||||
|
||||
union { // expected-error{{declaration does not declare anything}}
|
||||
union { // expected-warning{{declaration does not declare anything}}
|
||||
int int_val;
|
||||
float float_val;
|
||||
};
|
||||
|
||||
static union { // expected-error{{declaration does not declare anything}}
|
||||
static union { // expected-warning{{declaration does not declare anything}}
|
||||
int int_val2;
|
||||
float float_val2;
|
||||
};
|
||||
|
@ -66,7 +66,7 @@ void f() {
|
|||
}
|
||||
|
||||
void g() {
|
||||
union { // expected-error{{declaration does not declare anything}}
|
||||
union { // expected-warning{{declaration does not declare anything}}
|
||||
int i;
|
||||
float f2;
|
||||
};
|
||||
|
@ -78,7 +78,7 @@ void g() {
|
|||
struct s0 { union { int f0; }; };
|
||||
|
||||
// <rdar://problem/6481130>
|
||||
typedef struct { }; // expected-error{{declaration does not declare anything}}
|
||||
typedef struct { }; // expected-warning{{declaration does not declare anything}}
|
||||
|
||||
// PR3675
|
||||
struct s1 {
|
||||
|
@ -89,7 +89,7 @@ struct s1 {
|
|||
};
|
||||
|
||||
// PR3680
|
||||
struct {}; // expected-error{{declaration does not declare anything}}
|
||||
struct {}; // expected-warning{{declaration does not declare anything}}
|
||||
|
||||
struct s2 {
|
||||
union {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: %clang_cc1 %s -fsyntax-only -verify
|
||||
|
||||
// See Sema::ParsedFreeStandingDeclSpec about the double diagnostic
|
||||
typedef union <anonymous> __mbstate_t; // expected-error {{declaration of anonymous union must be a definition}} expected-error {{declaration does not declare anything}}
|
||||
typedef union <anonymous> __mbstate_t; // expected-error {{declaration of anonymous union must be a definition}} expected-warning {{declaration does not declare anything}}
|
||||
|
||||
|
||||
// PR2017
|
||||
|
@ -13,12 +13,12 @@ int a() {
|
|||
expected-error{{expected identifier or '('}}
|
||||
}
|
||||
|
||||
int; // expected-error {{declaration does not declare anything}}
|
||||
typedef int; // expected-error {{declaration does not declare anything}}
|
||||
const int; // expected-error {{declaration does not declare anything}}
|
||||
struct; // expected-error {{declaration of anonymous struct must be a definition}} // expected-error {{declaration does not declare anything}}
|
||||
int; // expected-warning {{declaration does not declare anything}}
|
||||
typedef int; // expected-warning {{declaration does not declare anything}}
|
||||
const int; // expected-warning {{declaration does not declare anything}}
|
||||
struct; // expected-error {{declaration of anonymous struct must be a definition}} // expected-warning {{declaration does not declare anything}}
|
||||
typedef int I;
|
||||
I; // expected-error {{declaration does not declare anything}}
|
||||
I; // expected-warning {{declaration does not declare anything}}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ int typedef validTypeDecl() { } // expected-error {{function definition declared
|
|||
struct _zend_module_entry { } // expected-error {{expected ';' after struct}}
|
||||
int gv1;
|
||||
typedef struct _zend_function_entry { } // expected-error {{expected ';' after struct}} \
|
||||
// expected-error {{declaration does not declare anything}}
|
||||
// expected-warning {{declaration does not declare anything}}
|
||||
int gv2;
|
||||
|
||||
static void buggy(int *x) { }
|
||||
|
|
|
@ -110,7 +110,7 @@ struct BadMembers {
|
|||
};
|
||||
|
||||
// <rdar://problem/6481130>
|
||||
typedef union { }; // expected-error{{declaration does not declare anything}}
|
||||
typedef union { }; // expected-warning{{declaration does not declare anything}}
|
||||
|
||||
// <rdar://problem/7562438>
|
||||
typedef struct objc_module *Foo ;
|
||||
|
|
|
@ -103,7 +103,7 @@ void ogfn()
|
|||
|
||||
// PR3020: This used to crash due to double ownership of C4.
|
||||
struct C4;
|
||||
C4; // expected-error {{declaration does not declare anything}}
|
||||
C4; // expected-warning {{declaration does not declare anything}}
|
||||
}
|
||||
|
||||
struct C4 {
|
||||
|
|
|
@ -43,9 +43,9 @@ typedef signed char BOOL;
|
|||
int _awesome;
|
||||
}
|
||||
|
||||
@property (readonly) int; // expected-error {{declaration does not declare anything}}
|
||||
@property (readonly) int; // expected-warning {{declaration does not declare anything}}
|
||||
@property (readonly) ; // expected-error {{type name requires a specifier or qualifier}} \
|
||||
expected-error {{declaration does not declare anything}}
|
||||
expected-warning {{declaration does not declare anything}}
|
||||
@property (readonly) int : 4; // expected-error {{property requires fields to be named}}
|
||||
|
||||
|
||||
|
|
|
@ -4,5 +4,5 @@ template<typename T> typedef T X; // expected-error{{typedef cannot be a templat
|
|||
|
||||
template<typename T>
|
||||
enum t0 { A = T::x }; // expected-error{{enumeration cannot be a template}} \
|
||||
// expected-error{{declaration does not declare anything}}
|
||||
// expected-warning{{declaration does not declare anything}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue