aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/CodeGenFunction.cpp2
-rw-r--r--test/CodeGen/vla.c6
2 files changed, 8 insertions, 0 deletions
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp
index 04661fca47..1a95e61915 100644
--- a/lib/CodeGen/CodeGenFunction.cpp
+++ b/lib/CodeGen/CodeGenFunction.cpp
@@ -487,6 +487,8 @@ llvm::Value *CodeGenFunction::EmitVLASize(QualType Ty)
}
return SizeEntry;
+ } else if (const ArrayType *AT = dyn_cast<ArrayType>(Ty)) {
+ EmitVLASize(AT->getElementType());
} else if (const PointerType *PT = Ty->getAsPointerType())
EmitVLASize(PT->getPointeeType());
else {
diff --git a/test/CodeGen/vla.c b/test/CodeGen/vla.c
index 3666d5ee0d..844e49e72c 100644
--- a/test/CodeGen/vla.c
+++ b/test/CodeGen/vla.c
@@ -29,3 +29,9 @@ f(int count)
if (a[0] != 3) {
}
}
+
+void g(int count) {
+ // Make sure we emit sizes correctly in some obscure cases
+ int (*a[5])[count];
+ int (*b)[][count];
+}