diff options
| -rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 15 | ||||
| -rw-r--r-- | clang/test/Sema/array-init.c | 2 | 
2 files changed, 11 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index fada7fe0adb..6f71e1b3f72 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -529,15 +529,16 @@ void InitListChecker::CheckExplicitInitList(InitListExpr *IList, QualType &T,    if (Index < IList->getNumInits()) {      // We have leftover initializers -    if (IList->getNumInits() > 0 && -        IsStringInit(IList->getInit(Index), T, SemaRef.Context)) { +    if (StructuredIndex == 1 && +        IsStringInit(StructuredList->getInit(0), T, SemaRef.Context)) {        unsigned DK = diag::warn_excess_initializers_in_char_array_initializer; -      if (SemaRef.getLangOptions().CPlusPlus) +      if (SemaRef.getLangOptions().CPlusPlus) {          DK = diag::err_excess_initializers_in_char_array_initializer; +        hadError = true; +      }        // Special-case        SemaRef.Diag(IList->getInit(Index)->getLocStart(), DK)          << IList->getInit(Index)->getSourceRange(); -      hadError = true;       } else if (!T->isIncompleteType()) {        // Don't complain for incomplete types, since we'll get an error        // elsewhere @@ -550,8 +551,10 @@ void InitListChecker::CheckExplicitInitList(InitListExpr *IList, QualType &T,          4;        unsigned DK = diag::warn_excess_initializers; -      if (SemaRef.getLangOptions().CPlusPlus) -          DK = diag::err_excess_initializers; +      if (SemaRef.getLangOptions().CPlusPlus) { +        DK = diag::err_excess_initializers; +        hadError = true; +      }        SemaRef.Diag(IList->getInit(Index)->getLocStart(), DK)          << initKind << IList->getInit(Index)->getSourceRange(); diff --git a/clang/test/Sema/array-init.c b/clang/test/Sema/array-init.c index dfaaa87ef5b..50148a83ae1 100644 --- a/clang/test/Sema/array-init.c +++ b/clang/test/Sema/array-init.c @@ -261,3 +261,5 @@ void test_matrix() {      13.0f, 14.0f, 15.0f, 16.0f     };  } + +char badchararray[1] = { badchararray[0], "asdf" }; // expected-warning {{excess elements in array initializer}} expected-error {{initializer element is not a compile-time constant}}  | 

