diff options
-rw-r--r-- | lib/CodeGen/Mangle.cpp | 4 | ||||
-rw-r--r-- | test/CodeGenCXX/mangle.cpp | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index e47d9cb43a..37ecf28598 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -1324,7 +1324,9 @@ void CXXNameMangler::mangleType(const ConstantArrayType *T) { } void CXXNameMangler::mangleType(const VariableArrayType *T) { Out << 'A'; - mangleExpression(T->getSizeExpr()); + // decayed vla types (size 0) will just be skipped. + if (T->getSizeExpr()) + mangleExpression(T->getSizeExpr()); Out << '_'; mangleType(T->getElementType()); } diff --git a/test/CodeGenCXX/mangle.cpp b/test/CodeGenCXX/mangle.cpp index 55357c7d63..e78ad3996e 100644 --- a/test/CodeGenCXX/mangle.cpp +++ b/test/CodeGenCXX/mangle.cpp @@ -624,3 +624,9 @@ namespace test20 { template <class T> void test1(decltype(f<>(T()))) {} template void test1<int>(decltype(f<>(int()))); } + +// rdar:// 8620510 +namespace test21 { + // CHECK: define void @_ZN6test2112vla_arg_funcEiPA_i( + void vla_arg_func(int X, int a[X][X]) {} +} |