From 673b3960bb51f96f48d9690e6e3d419a0632c6f9 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sun, 12 Oct 2014 06:58:22 +0000 Subject: [PATCH] CodeGen: Strip qualifiers from qualified array types in catches While we ran getUnqualifiedType over the catch type, it isn't enough for array types. Use getUnqualifiedArrayType instead. This fixes PR21252. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219582 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGException.cpp | 5 +++-- test/CodeGenCXX/try-catch.cpp | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp index 0b7e57a3c5..9da910d9d0 100644 --- a/lib/CodeGen/CGException.cpp +++ b/lib/CodeGen/CGException.cpp @@ -610,8 +610,9 @@ void CodeGenFunction::EnterCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock) { // existing compilers do, and it's not clear that the standard // personality routine is capable of doing this right. See C++ DR 388: // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#388 - QualType CaughtType = C->getCaughtType(); - CaughtType = CaughtType.getNonReferenceType().getUnqualifiedType(); + Qualifiers CaughtTypeQuals; + QualType CaughtType = CGM.getContext().getUnqualifiedArrayType( + C->getCaughtType().getNonReferenceType(), CaughtTypeQuals); llvm::Constant *TypeInfo = nullptr; if (CaughtType->isObjCObjectPointerType()) diff --git a/test/CodeGenCXX/try-catch.cpp b/test/CodeGenCXX/try-catch.cpp index 89f229fee3..b50214ecdb 100644 --- a/test/CodeGenCXX/try-catch.cpp +++ b/test/CodeGenCXX/try-catch.cpp @@ -11,3 +11,11 @@ void f() { } catch (const X x) { } } + +void h() { + try { + throw "ABC"; + // CHECK: @_ZTIPKc to i8 + } catch (char const(&)[4]) { + } +} -- 2.40.0