// RUN: %clang_cc1 -triple x86_64-unknown-linux -emit-llvm -DUNWIND -fcxx-exceptions -fexceptions -o - %s | FileCheck -check-prefixes CHECK,CHECK-UNWIND %s // RUN: %clang_cc1 -triple x86_64-unknown-linux -emit-llvm -fcxx-exceptions -fexceptions -o - %s | FileCheck -check-prefixes CHECK,CHECK-NO-UNWIND %s extern "C" void printf(const char *fmt, ...); struct DropBomb { bool defused = false; ~DropBomb() { if (defused) { return; } printf("Boom!\n"); } }; extern "C" void trap() { throw "Trap"; } // CHECK: define dso_local void @test() extern "C" void test() { DropBomb bomb; // CHECK-UNWIND: invoke void asm sideeffect unwind "call trap" // CHECK-NO-UNWIND: call void asm sideeffect "call trap" #ifdef UNWIND asm volatile("call trap" :: : "unwind"); #else asm volatile("call trap" :: :); #endif bomb.defused = true; }