diff options
author | Chris Lattner <sabre@nondot.org> | 2009-02-27 18:53:28 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-02-27 18:53:28 +0000 |
commit | 7b0ec8a9dfe3f46b4677fcafde901c717021e56c (patch) | |
tree | b89b7e8aba9a52bbb70b945226098db342df37b5 /clang | |
parent | de39c3efcb27e240bf175b5462c8b6350de0df5f (diff) | |
download | bcm5719-llvm-7b0ec8a9dfe3f46b4677fcafde901c717021e56c.tar.gz bcm5719-llvm-7b0ec8a9dfe3f46b4677fcafde901c717021e56c.zip |
upgrade various 'implicit int' warnings from an ext-warn to warning when not
in C89 mode. This makes it enabled by default instead of only enabled with
-pedantic. Clang defaults to c99 mode, so people will see this more often
than with GCC, but they can always use -std=c89 if they really want c89.
llvm-svn: 65647
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.def | 6 | ||||
-rw-r--r-- | clang/lib/Sema/SemaType.cpp | 10 | ||||
-rw-r--r-- | clang/test/Parser/MicrosoftExtensions.c | 2 | ||||
-rw-r--r-- | clang/test/Parser/objc-forcollection-neg-2.m | 2 | ||||
-rw-r--r-- | clang/test/Parser/traditional_arg_scope.c | 6 | ||||
-rw-r--r-- | clang/test/Parser/typeof.c | 2 | ||||
-rw-r--r-- | clang/test/Sema/address_spaces.c | 2 | ||||
-rw-r--r-- | clang/test/Sema/block-literal.c | 2 | ||||
-rw-r--r-- | clang/test/Sema/implicit-int.c | 10 | ||||
-rw-r--r-- | clang/test/Sema/invalid-decl.c | 2 | ||||
-rw-r--r-- | clang/test/Sema/invalid-struct-init.c | 5 |
11 files changed, 30 insertions, 19 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.def b/clang/include/clang/Basic/DiagnosticSemaKinds.def index 5cd8c6be967..af3c8672ac1 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.def +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.def @@ -1413,12 +1413,14 @@ DIAG(err_collection_expr_type, ERROR, // Type DIAG(ext_invalid_sign_spec, EXTENSION, "'%0' cannot be signed or unsigned") -DIAG(ext_missing_declspec, EXTENSION, +DIAG(warn_missing_declspec, WARNING, "declaration specifier missing, defaulting to 'int'") -DIAG(ext_missing_type_specifier, EXTENSION, +DIAG(warn_missing_type_specifier, WARNING, "type specifier missing, defaults to 'int'") DIAG(err_missing_type_specifier, ERROR, "C++ requires a type specifier for all declarations") +DIAG(err_missing_param_declspec, ERROR, + "parameter requires a declaration specifier") DIAG(warn_objc_array_of_interfaces, WARNING, "array of interface %0 should probably be an array of pointers") DIAG(ext_c99_array_usage, EXTENSION, diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index d1dcca6cf12..bfbf8ab9529 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -74,10 +74,10 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) { // parser already though by it pretending to have seen an 'int' in this // case. if (getLangOptions().ImplicitInt) { - if ((DS.getParsedSpecifiers() & (DeclSpec::PQ_StorageClassSpecifier | - DeclSpec::PQ_TypeSpecifier | - DeclSpec::PQ_TypeQualifier)) == 0) - Diag(DS.getSourceRange().getBegin(), diag::ext_missing_declspec); + // In C89 mode, we only warn if there is a completely missing declspec + // when one is not allowed. + if (DS.isEmpty()) + Diag(DS.getSourceRange().getBegin(), diag::warn_missing_declspec); } else if (!DS.hasTypeSpecifier()) { // C99 and C++ require a type specifier. For example, C99 6.7.2p2 says: // "At least one type specifier shall be given in the declaration @@ -86,7 +86,7 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) { // FIXME: Does Microsoft really have the implicit int extension in C++? unsigned DK = getLangOptions().CPlusPlus && !getLangOptions().Microsoft? diag::err_missing_type_specifier - : diag::ext_missing_type_specifier; + : diag::warn_missing_type_specifier; Diag(DS.getSourceRange().getBegin(), DK); } diff --git a/clang/test/Parser/MicrosoftExtensions.c b/clang/test/Parser/MicrosoftExtensions.c index 27283de79cc..039bafea097 100644 --- a/clang/test/Parser/MicrosoftExtensions.c +++ b/clang/test/Parser/MicrosoftExtensions.c @@ -11,7 +11,7 @@ void * __ptr64 PtrToPtr64(const void *p) { return((void * __ptr64) (unsigned __int64) (ULONG_PTR)p ); } -__forceinline InterlockedBitTestAndSet (long *Base, long Bit) +__forceinline InterlockedBitTestAndSet (long *Base, long Bit) // expected-warning {{type specifier missing, defaults to 'int'}} { __asm { mov eax, Bit diff --git a/clang/test/Parser/objc-forcollection-neg-2.m b/clang/test/Parser/objc-forcollection-neg-2.m index 308db0579e5..31c8097ccb2 100644 --- a/clang/test/Parser/objc-forcollection-neg-2.m +++ b/clang/test/Parser/objc-forcollection-neg-2.m @@ -24,7 +24,7 @@ typedef struct objc_object { @implementation MyList (BasicTest) - (void)compilerTestAgainst { - static i; + static i;// expected-warning {{type specifier missing, defaults to 'int'}} for (id el, elem in self) // expected-error {{only one element declaration is allowed}} ++i; for (id el in self) diff --git a/clang/test/Parser/traditional_arg_scope.c b/clang/test/Parser/traditional_arg_scope.c index e1b02567eec..f89708cec14 100644 --- a/clang/test/Parser/traditional_arg_scope.c +++ b/clang/test/Parser/traditional_arg_scope.c @@ -1,7 +1,7 @@ // RUN: clang -fsyntax-only %s -verify -x(a) int a; {return a;} -y(b) int b; {return a;} // expected-error {{use of undeclared identifier}} +int x(a) int a; {return a;} +int y(b) int b; {return a;} // expected-error {{use of undeclared identifier}} // PR2332 -a(a)int a;{a=10;return a;} +int a(a)int a;{a=10;return a;} diff --git a/clang/test/Parser/typeof.c b/clang/test/Parser/typeof.c index 1cf04baefd0..ac51f58021e 100644 --- a/clang/test/Parser/typeof.c +++ b/clang/test/Parser/typeof.c @@ -11,7 +11,7 @@ static void test() { typeof(TInt) anInt; short TInt eee; // expected-error{{parse error}} void ary[7] fff; // expected-error{{array has incomplete element type 'void'}} expected-error{{parse error}} - typeof(void ary[7]) anIntError; // expected-error{{expected ')'}} expected-note {{to match this '('}} + typeof(void ary[7]) anIntError; // expected-error{{expected ')'}} expected-note {{to match this '('}} expected-warning {{type specifier missing, defaults to 'int'}} typeof(const int) aci; const typeof (*pi) aConstInt; int xx; diff --git a/clang/test/Sema/address_spaces.c b/clang/test/Sema/address_spaces.c index 8900b08b0d3..a081b38a8eb 100644 --- a/clang/test/Sema/address_spaces.c +++ b/clang/test/Sema/address_spaces.c @@ -5,7 +5,7 @@ #define _AS3 __attribute__((address_space(3))) void foo(_AS3 float *a) { - _AS2 *x; + _AS2 *x;// expected-warning {{type specifier missing, defaults to 'int'}} _AS1 float * _AS2 *B; int _AS1 _AS2 *Y; // expected-error {{multiple address spaces specified for type}} diff --git a/clang/test/Sema/block-literal.c b/clang/test/Sema/block-literal.c index d5d41abb6cb..7f64c03c1bb 100644 --- a/clang/test/Sema/block-literal.c +++ b/clang/test/Sema/block-literal.c @@ -40,7 +40,7 @@ void test2() { foo: takeclosure(^{ x = 4; }); // expected-error {{variable is not assignable (missing __block type specifier)}} - __block y = 7; + __block y = 7; // expected-warning {{type specifier missing, defaults to 'int'}} takeclosure(^{ y = 8; }); } diff --git a/clang/test/Sema/implicit-int.c b/clang/test/Sema/implicit-int.c index e4a215fb78f..f15a40fa083 100644 --- a/clang/test/Sema/implicit-int.c +++ b/clang/test/Sema/implicit-int.c @@ -1,4 +1,10 @@ -// RUN: clang -fsyntax-only %s +// RUN: clang -fsyntax-only %s -verify -pedantic -foo() { +foo() { // expected-warning {{type specifier missing, defaults to 'int'}} } + +y; // expected-warning {{type specifier missing, defaults to 'int'}} + +// rdar://6131634 +void f((x)); // expected-warning {{type specifier missing, defaults to 'int'}} + diff --git a/clang/test/Sema/invalid-decl.c b/clang/test/Sema/invalid-decl.c index efc199d39b0..17f316884ee 100644 --- a/clang/test/Sema/invalid-decl.c +++ b/clang/test/Sema/invalid-decl.c @@ -6,7 +6,7 @@ void test() { // PR2400 -typedef xtype (*zend_stream_fsizer_t)(void* handle); // expected-error {{function cannot return array or function type}} +typedef xtype (*zend_stream_fsizer_t)(void* handle); // expected-error {{function cannot return array or function type}} expected-warning {{type specifier missing, defaults to 'int'}} expected-warning {{type specifier missing, defaults to 'int'}} typedef struct _zend_module_entry zend_module_entry; struct _zend_module_entry { diff --git a/clang/test/Sema/invalid-struct-init.c b/clang/test/Sema/invalid-struct-init.c index fb965926943..9777a27a0ed 100644 --- a/clang/test/Sema/invalid-struct-init.c +++ b/clang/test/Sema/invalid-struct-init.c @@ -3,7 +3,10 @@ typedef struct _zend_module_entry zend_module_entry; struct _zend_module_entry { _efree((p)); // expected-error{{type name requires a specifier or qualifier}} \ - // expected-error{{field '_efree' declared as a function}} + expected-error{{field '_efree' declared as a function}} \ + expected-warning {{type specifier missing, defaults to 'int'}} \ + expected-warning {{type specifier missing, defaults to 'int'}} + }; typedef struct _zend_function_entry { } zend_function_entry; typedef struct _zend_pcre_globals { } zend_pcre_globals; |