diff options
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 6 | ||||
-rw-r--r-- | clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index de11666747a..74db24f28dc 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -7047,10 +7047,12 @@ bool InitializationSequence::Diagnose(Sema &S, SourceRange R; auto *InitList = dyn_cast<InitListExpr>(Args[0]); - if (InitList && InitList->getNumInits() == 1) + if (InitList && InitList->getNumInits() >= 1) { R = SourceRange(InitList->getInit(0)->getLocEnd(), InitList->getLocEnd()); - else + } else { + assert(Args.size() > 1 && "Expected multiple initializers!"); R = SourceRange(Args.front()->getLocEnd(), Args.back()->getLocEnd()); + } R.setBegin(S.getLocForEndOfToken(R.getBegin())); if (Kind.isCStyleOrFunctionalCast()) diff --git a/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp b/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp index 0e9a97d5bb0..1b01a351f78 100644 --- a/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp +++ b/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp @@ -129,3 +129,7 @@ namespace array_addressof { using T = int[5]; T *p = &T{1,2,3,4,5}; // expected-error {{taking the address of a temporary object of type 'T' (aka 'int [5]')}} } + +namespace PR24816 { + struct { int i; } ne = {{0, 1}}; // expected-error{{excess elements in scalar initializer}} +} |