From: John McCall Date: Fri, 26 Aug 2011 00:46:38 +0000 (+0000) Subject: The allocated exception slot does not alias anything; should fix self-host. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1366862c3f5d390140b5978380d9ac7317d60fc6;p=clang The allocated exception slot does not alias anything; should fix self-host. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138615 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp index 263ac63ccc..0605f62b27 100644 --- a/lib/CodeGen/CGException.cpp +++ b/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/test/CodeGenCXX/exceptions.cpp b/test/CodeGenCXX/exceptions.cpp index 0ce9679a34..4a32de024a 100644 --- a/test/CodeGenCXX/exceptions.cpp +++ b/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(); + } +}