diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/CodeGen/CGException.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/exceptions.cpp | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp index 263ac63ccc5..0605f62b279 100644 --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -1034,7 +1034,8 @@ static void InitCatchParam(CodeGenFunction &CGF, // Perform the copy construction. CGF.EmitAggExpr(copyExpr, AggValueSlot::forAddr(ParamAddr, Qualifiers(), AggValueSlot::IsNotDestructed, - AggValueSlot::DoesNotNeedGCBarriers)); + AggValueSlot::DoesNotNeedGCBarriers, + AggValueSlot::IsNotAliased)); // Leave the terminate scope. CGF.EHStack.popTerminate(); diff --git a/clang/test/CodeGenCXX/exceptions.cpp b/clang/test/CodeGenCXX/exceptions.cpp index 0ce9679a34b..4a32de024a3 100644 --- a/clang/test/CodeGenCXX/exceptions.cpp +++ b/clang/test/CodeGenCXX/exceptions.cpp @@ -390,3 +390,16 @@ namespace test7 { return new B(A(), new B(A(), 0)); } } + +// Just don't crash. +namespace test8 { + struct A { + A(const A&); + ~A(); + }; + + A makeA(); + void test() { + throw makeA(); + } +} |