// RUN: %clang_cc1 -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics \ // RUN: -emit-llvm -std=c++11 -O1 -disable-llvm-passes \ // RUN: -debug-info-kind=limited %s -o - | FileCheck %s // RUN: %clang_cc1 -triple aarch64-linux-gnu -fptrauth-calls -fptrauth-intrinsics \ // RUN: -emit-llvm -std=c++11 -O1 -disable-llvm-passes \ // RUN: -debug-info-kind=limited %s -o - | FileCheck %s // Check that compiler-generated *_vfpthunk_ function has a !dbg location // attached to the call instruction. // CHECK: define {{.*}}@_ZN1A2f0Ev_vfpthunk_({{.*}}) // CHECK-SAME: !dbg ![[SCOPE_INDEX:[0-9]+]] // CHECK-NOT: define // CHECK: %[[DISCR:[0-9]+]] = call i64 @llvm.ptrauth.blend(i64 %{{[0-9]+}}, i64 9385) // CHECK-NOT: define // CHECK: musttail call void %{{[0-9]+}}(ptr // CHECK-SAME: [ "ptrauth"(i32 0, i64 %[[DISCR]]) ] // CHECK-SAME: !dbg ![[LOCATION_INDEX:[0-9]+]] // CHECK: ![[SCOPE_INDEX]] = distinct !DISubprogram( // CHECK-SAME: linkageName: "_ZN1A2f0Ev_vfpthunk_" // CHECK-SAME: flags: DIFlagArtificial | DIFlagThunk // CHECK: ![[LOCATION_INDEX]] = !DILocation(line: 0, scope: ![[SCOPE_INDEX]]) volatile long T; struct A { virtual void f0() { T = 0; } }; typedef void (A::*MFP)(); void caller() { A a; MFP x = &A::f0; (a.*x)(); }