From dc9bc5aeb8cc34f9fda7d23e0ddb7c3d50f15bea Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Tue, 2 Nov 2010 16:54:00 +0000 Subject: [PATCH] Fix a crash mangling decayed val argument-typed function. // rdar: //8620510 and PR7666 llvm-svn: 118019 --- clang/lib/CodeGen/Mangle.cpp | 4 +++- clang/test/CodeGenCXX/mangle.cpp | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index e47d9cb43a62..37ecf285983f 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/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/clang/test/CodeGenCXX/mangle.cpp b/clang/test/CodeGenCXX/mangle.cpp index 55357c7d63a4..e78ad3996eeb 100644 --- a/clang/test/CodeGenCXX/mangle.cpp +++ b/clang/test/CodeGenCXX/mangle.cpp @@ -624,3 +624,9 @@ namespace test20 { template void test1(decltype(f<>(T()))) {} template void test1(decltype(f<>(int()))); } + +// rdar:// 8620510 +namespace test21 { + // CHECK: define void @_ZN6test2112vla_arg_funcEiPA_i( + void vla_arg_func(int X, int a[X][X]) {} +}