1 | // RUN: %clang_cc1 -Werror -triple x86_64-linux -emit-llvm -o - %s | FileCheck %s |
2 | // RUN: %clang_cc1 -Werror -triple i386-linux -emit-llvm -o - %s | FileCheck %s |
3 | // RUN: %clang_cc1 -Werror -triple armv7-linux -emit-llvm -o - %s | FileCheck %s --check-prefix=ARM |
4 | // RUN: %clang_cc1 -Werror -triple powerpc64le-linux -emit-llvm -o - %s | FileCheck %s |
5 | // RUN: %clang_cc1 -Werror -triple aarch64-linux -emit-llvm -o - %s | FileCheck %s |
6 | // RUN: %clang_cc1 -DINFRONT -Werror -triple x86_64-linux -emit-llvm -o - %s | FileCheck %s |
7 | // RUN: %clang_cc1 -DINFRONT -Werror -triple i386-linux -emit-llvm -o - %s | FileCheck %s |
8 | // RUN: %clang_cc1 -DINFRONT -Werror -triple armv7-linux -emit-llvm -o - %s | FileCheck %s --check-prefix=ARM |
9 | // RUN: %clang_cc1 -DINFRONT -Werror -triple powerpc64le-linux -emit-llvm -o - %s | FileCheck %s |
10 | // RUN: %clang_cc1 -DINFRONT -Werror -triple aarch64-linux -emit-llvm -o - %s | FileCheck %s |
11 | |
12 | #ifdef INFRONT |
13 | typedef union __attribute__((transparent_union)) { |
14 | void *f0; |
15 | } transp_t0; |
16 | #else |
17 | typedef union { |
18 | void *f0; |
19 | } transp_t0 __attribute__((transparent_union)); |
20 | #endif |
21 | |
22 | void f0(transp_t0 obj); |
23 | |
24 | // CHECK-LABEL: define void @f1_0(i32* %a0) |
25 | // CHECK: call void @f0(i8* %{{.*}}) |
26 | // CHECK: call void %{{.*}}(i8* %{{[a-z0-9]*}}) |
27 | // CHECK: } |
28 | |
29 | // ARM-LABEL: define arm_aapcscc void @f1_0(i32* %a0) |
30 | // ARM: call arm_aapcscc void @f0(i8* %{{.*}}) |
31 | // ARM: call arm_aapcscc void %{{.*}}(i8* %{{[a-z0-9]*}}) |
32 | // ARM: } |
33 | void f1_0(int *a0) { |
34 | void (*f0p)(void *) = f0; |
35 | f0(a0); |
36 | f0p(a0); |
37 | } |
38 | |
39 | void f1_1(int *a0) { |
40 | f0((transp_t0) { a0 }); |
41 | } |
42 | |