summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-02-27 18:53:28 +0000
committerChris Lattner <sabre@nondot.org>2009-02-27 18:53:28 +0000
commit7b0ec8a9dfe3f46b4677fcafde901c717021e56c (patch)
treeb89b7e8aba9a52bbb70b945226098db342df37b5 /clang
parentde39c3efcb27e240bf175b5462c8b6350de0df5f (diff)
downloadbcm5719-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.def6
-rw-r--r--clang/lib/Sema/SemaType.cpp10
-rw-r--r--clang/test/Parser/MicrosoftExtensions.c2
-rw-r--r--clang/test/Parser/objc-forcollection-neg-2.m2
-rw-r--r--clang/test/Parser/traditional_arg_scope.c6
-rw-r--r--clang/test/Parser/typeof.c2
-rw-r--r--clang/test/Sema/address_spaces.c2
-rw-r--r--clang/test/Sema/block-literal.c2
-rw-r--r--clang/test/Sema/implicit-int.c10
-rw-r--r--clang/test/Sema/invalid-decl.c2
-rw-r--r--clang/test/Sema/invalid-struct-init.c5
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;
OpenPOWER on IntegriCloud