blob: 9428940d6da484cd30d74359bd2233bdee439f61 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
// RUN: %clang_cc1 -triple arm64-apple-ios11 -fptrauth-calls -fptrauth-intrinsics -std=c++11 -fobjc-arc -emit-llvm -o - %s | FileCheck %s
#define AQ __ptrauth(1,1,50)
struct AddrDiscStrong0 {
int * AQ f0; // Signed using address discrimination.
__strong id f1;
};
struct AddrDiscStrong1 {
AddrDiscStrong1(const AddrDiscStrong1 &);
int * AQ f0; // Signed using address discrimination.
__strong id f1;
};
// Check that AddrDiscStrong0 is destructed in the callee.
// CHECK: define void @_Z24testParamAddrDiscStrong015AddrDiscStrong0(ptr dead_on_return noundef %[[A:.*]])
// CHECK: call noundef ptr @_ZN15AddrDiscStrong0D1Ev(ptr noundef nonnull align {{[0-9]+}} dereferenceable(16) %[[A]])
// CHECK: ret void
// CHECK: define linkonce_odr noundef ptr @_ZN15AddrDiscStrong0D1Ev(
void testParamAddrDiscStrong0(AddrDiscStrong0 a) {
}
// Check that AddrDiscStrong1 is not destructed in the callee because it has a
// non-trivial copy constructor.
// CHECK: define void @_Z24testParamAddrDiscStrong115AddrDiscStrong1(ptr noundef %{{.*}})
// CHECK-NOT: call
// CHECK: ret void
void testParamAddrDiscStrong1(AddrDiscStrong1 a) {
}
|