From: Jordy Rose Date: Fri, 20 Aug 2010 01:05:59 +0000 (+0000) Subject: Handle nested compound values in BindArray for multidimensional arrays. Fixes PR7945. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=59b6dca7e5160d6f2aff42b1cf077d1cbd64e330;p=clang Handle nested compound values in BindArray for multidimensional arrays. Fixes PR7945. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111602 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Checker/RegionStore.cpp b/lib/Checker/RegionStore.cpp index d6422ab338..ab3234774f 100644 --- a/lib/Checker/RegionStore.cpp +++ b/lib/Checker/RegionStore.cpp @@ -1504,6 +1504,8 @@ Store RegionStoreManager::BindArray(Store store, const TypedRegion* R, if (ElementTy->isStructureOrClassType()) store = BindStruct(store, ER, *VI); + else if (ElementTy->isArrayType()) + store = BindArray(store, ER, *VI); else store = Bind(store, ValMgr.makeLoc(ER), *VI); } diff --git a/test/Analysis/array-struct-region.c b/test/Analysis/array-struct-region.c index 2966d13004..dabd25bb1f 100644 --- a/test/Analysis/array-struct-region.c +++ b/test/Analysis/array-struct-region.c @@ -23,3 +23,25 @@ int string_literal_init() { return 42; } + +void nested_compound_literals(int rad) { + int vec[6][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, + {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; + int a; + + for (a = 0; a < 6; ++a) { + vec[a][0] *= rad; // no-warning + vec[a][1] *= rad; // no-warning + } +} + +void nested_compound_literals_float(float rad) { + float vec[6][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, + {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; + int a; + + for (a = 0; a < 6; ++a) { + vec[a][0] *= rad; // no-warning + vec[a][1] *= rad; // no-warning + } +}