diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-02-09 19:45:19 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-02-09 19:45:19 +0000 |
commit | fdf556936f94344d5482747403f27822cf0ae37f (patch) | |
tree | 1d6b358298c91f6b57c19990118a609a2cfabec7 | |
parent | 5908e9f25bc9a334c99c095e0b1e6a515445be2d (diff) |
When handling "the rest" of a designated array subobject, maybe sure
to tell it that it wasn't (directly) designated. This way, we unwind
back to the explicit initializer list properly rather than getting
stuck in the wrong subobject. Fixes llvm.org/PR3519
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64155 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaInit.cpp | 2 | ||||
-rw-r--r-- | test/Sema/designated-initializers.c | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 496dbcdefa..27d8d5aa2e 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -1197,7 +1197,7 @@ InitListChecker::CheckDesignatedInitializer(InitListExpr *IList, // Check the remaining elements within this array subobject. bool prevHadError = hadError; - CheckArrayType(IList, CurrentObjectType, DesignatedStartIndex, true, Index, + CheckArrayType(IList, CurrentObjectType, DesignatedStartIndex, false, Index, StructuredList, ElementIndex); return hadError && !prevHadError; } diff --git a/test/Sema/designated-initializers.c b/test/Sema/designated-initializers.c index 53da306c4c..9c4429d02d 100644 --- a/test/Sema/designated-initializers.c +++ b/test/Sema/designated-initializers.c @@ -151,3 +151,24 @@ struct XY { int before; struct XX xx, *xp; float* after; } xy[] = { 0, // expected-warning{{initializer overrides prior initialization of this subobject}} &xy[2].xx.a, &xy[2].xx, &global_float }; + +// PR3519 +struct foo { + int arr[10]; +}; + +struct foo Y[10] = { + [1] .arr [1] = 2, + [4] .arr [2] = 4 +}; + +struct bar { + struct foo f; + float *arr[10]; +}; + +extern float f; +struct bar saloon = { + .f.arr[3] = 1, + .arr = { &f } +}; |