diff options
author | Derek Schuff <dschuff@google.com> | 2016-05-10 17:44:55 +0000 |
---|---|---|
committer | Derek Schuff <dschuff@google.com> | 2016-05-10 17:44:55 +0000 |
commit | 8179be4897db025dd7256bbee7c0d9e5794a2b34 (patch) | |
tree | 78dc08b1c3578d7505ee2565cc1f8939f6a93c50 /clang/test/CodeGenCXX/static-destructor.cpp | |
parent | 09b2492387267439d20f59725bd8caf0a24d0a41 (diff) | |
download | bcm5719-llvm-8179be4897db025dd7256bbee7c0d9e5794a2b34.tar.gz bcm5719-llvm-8179be4897db025dd7256bbee7c0d9e5794a2b34.zip |
Introduce CGCXXABI::canCallMismatchedFunctionType
llvm-svn: 269089
Diffstat (limited to 'clang/test/CodeGenCXX/static-destructor.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/static-destructor.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/test/CodeGenCXX/static-destructor.cpp b/clang/test/CodeGenCXX/static-destructor.cpp index 1b6ca305563..24e31d3d863 100644 --- a/clang/test/CodeGenCXX/static-destructor.cpp +++ b/clang/test/CodeGenCXX/static-destructor.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 %s -triple=x86_64-pc-linux -emit-llvm -o - | FileCheck --check-prefix=X86 %s // RUN: %clang_cc1 %s -triple=wasm32 -emit-llvm -o - | FileCheck --check-prefix=WASM %s -// RUN: %clang_cc1 %s -triple=armv7-apple-darwin9 -emit-llvm -o - | FileCheck --check-prefix=WASM %s +// RUN: %clang_cc1 %s -triple=armv7-apple-darwin9 -emit-llvm -o - | FileCheck --check-prefix=ARM %s // Test that destructors are not passed directly to __cxa_atexit when their // signatures do not match the type of its first argument. @@ -20,6 +20,12 @@ Foo global; // X86-NEXT: entry: // X86-NEXT: %0 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%class.Foo*)* @_ZN3FooD1Ev to void (i8*)*), i8* getelementptr inbounds (%class.Foo, %class.Foo* @global, i32 0, i32 0), i8* @__dso_handle) +// ARM destructors return this, but can be registered directly with __cxa_atexit +// because the calling conventions tolerate the mismatch. +// ARM: define internal void @__cxx_global_var_init() +// ARM-NEXT: entry: +// ARM-NEXT: %0 = call i32 @__cxa_atexit(void (i8*)* bitcast (%class.Foo* (%class.Foo*)* @_ZN3FooD1Ev to void (i8*)*), i8* getelementptr inbounds (%class.Foo, %class.Foo* @global, i32 0, i32 0), i8* @__dso_handle) + // Wasm destructors return this, and use a wrapper function, which is registered // with __cxa_atexit. // WASM: define internal void @__cxx_global_var_init() |