blob: 9428940d6da484cd30d74359bd2233bdee439f61 [file] [log] [blame] [edit]
// 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) {
}