diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2009-05-16 11:45:48 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2009-05-16 11:45:48 +0000 |
| commit | 0b4af8f7554d8ae782fbd9e92a6d4211e8c95c2a (patch) | |
| tree | af7500e64aa19393c7e7475db881534a99a3d138 | |
| parent | 18bb9284fffb62977647bffaf0bd5fec17241751 (diff) | |
| download | bcm5719-llvm-0b4af8f7554d8ae782fbd9e92a6d4211e8c95c2a.tar.gz bcm5719-llvm-0b4af8f7554d8ae782fbd9e92a6d4211e8c95c2a.zip | |
PR3009: Get rid of bogus warning for scalar compound literals.
This patch isn't quite ideal in that it eliminates the warning for
constructs like "int a = {1};", where the braces are in fact redundant.
However, that would have required a bunch of refactoring, and it's
much less likely to cause confusion compared to redundant nested braces.
llvm-svn: 71939
| -rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 2 | ||||
| -rw-r--r-- | clang/test/Analysis/stack-addr-ps.c | 2 | ||||
| -rw-r--r-- | clang/test/Sema/array-init.c | 2 | ||||
| -rw-r--r-- | clang/test/Sema/compound-literal.c | 2 |
4 files changed, 4 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index a8a0ea3aeac..17113f68bd4 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -538,7 +538,7 @@ void InitListChecker::CheckExplicitInitList(InitListExpr *IList, QualType &T, } } - if (T->isScalarType()) + if (T->isScalarType() && !TopLevelObject) SemaRef.Diag(IList->getLocStart(), diag::warn_braces_around_scalar_init) << IList->getSourceRange() << CodeModificationHint::CreateRemoval(SourceRange(IList->getLocStart())) diff --git a/clang/test/Analysis/stack-addr-ps.c b/clang/test/Analysis/stack-addr-ps.c index aa3c135f374..4bc9a7def2c 100644 --- a/clang/test/Analysis/stack-addr-ps.c +++ b/clang/test/Analysis/stack-addr-ps.c @@ -24,7 +24,7 @@ int* f3(int x, int *y) { void* compound_literal(int x, int y) { if (x) - return &(unsigned short){((unsigned short)0x22EF)}; // expected-warning{{Address of stack memory}} expected-warning{{braces around scalar initializer}} + return &(unsigned short){((unsigned short)0x22EF)}; // expected-warning{{Address of stack memory}} int* array[] = {}; struct s { int z; double y; int w; }; diff --git a/clang/test/Sema/array-init.c b/clang/test/Sema/array-init.c index 4e95a018760..dfaaa87ef5b 100644 --- a/clang/test/Sema/array-init.c +++ b/clang/test/Sema/array-init.c @@ -20,7 +20,7 @@ void func() { int x3[x] = { 1, 2 }; // expected-error{{variable-sized object may not be initialized}} - int x4 = { 1, 2 }; // expected-warning{{braces around scalar initializer}} expected-warning{{excess elements in scalar initializer}} + int x4 = { 1, 2 }; // expected-warning{{excess elements in scalar initializer}} int y[4][3] = { { 1, 3, 5 }, diff --git a/clang/test/Sema/compound-literal.c b/clang/test/Sema/compound-literal.c index 24ec223ae6a..b51bcfe2a23 100644 --- a/clang/test/Sema/compound-literal.c +++ b/clang/test/Sema/compound-literal.c @@ -6,7 +6,7 @@ static struct foo t = (struct foo){0,0}; static struct foo t2 = {0,0}; static struct foo t3 = t2; // -expected-error {{initializer element is not a compile-time constant}} static int *p = (int []){2,4}; -static int x = (int){1}; // -expected-warning{{braces around scalar initializer}} +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 'char [2]', expected 'long'}} |

