diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-10-12 06:58:22 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-10-12 06:58:22 +0000 |
commit | 571162af6bd9cf0ceb8a0e4270b0efeb6707b7e4 (patch) | |
tree | 25c0b52203aca75a115e3ecbdadd3ee46b297d4b | |
parent | 6fd86f1678e984632795736d5692bc17ed4d1322 (diff) | |
download | bcm5719-llvm-571162af6bd9cf0ceb8a0e4270b0efeb6707b7e4.tar.gz bcm5719-llvm-571162af6bd9cf0ceb8a0e4270b0efeb6707b7e4.zip |
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.
llvm-svn: 219582
-rw-r--r-- | clang/lib/CodeGen/CGException.cpp | 5 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/try-catch.cpp | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp index 0b7e57a3c5f..9da910d9d08 100644 --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/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/clang/test/CodeGenCXX/try-catch.cpp b/clang/test/CodeGenCXX/try-catch.cpp index 89f229fee37..b50214ecdb9 100644 --- a/clang/test/CodeGenCXX/try-catch.cpp +++ b/clang/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]) { + } +} |