xref: /llvm-project/clang/test/CodeGenCXX/debug-info-object-pointer.cpp (revision a5fb2bbb2ad8488482843e2298fbe6f6a1d45bbd)
1 // RUN: %clang_cc1 -x c++ -std=c++23 -debug-info-kind=limited -emit-llvm < %s | FileCheck %s
2 
3 // CHECK: !DISubprogram(name: "bar",
4 // CHECK-SAME:          flags: DIFlagPrototyped
5 // CHECK: !DIDerivedType(tag: DW_TAG_pointer_type
6 // CHECK-SAME:           flags: DIFlagArtificial | DIFlagObjectPointer
7 //
8 // CHECK: !DISubprogram(name: "explicit_this",
9 //                      flags: DIFlagPrototyped
10 //
11 // CHECK: !DIDerivedType(tag: DW_TAG_rvalue_reference_type
12 // CHECK-SAME:           flags: DIFlagObjectPointer)
13 //
14 // CHECK: !DILocalVariable(name: "this", arg: 1
15 // CHECK-SAME:             flags: DIFlagArtificial | DIFlagObjectPointer
16 //
17 // CHECK-NOT: DIFlagArtificial
18 // CHECK: !DILocalVariable(arg: 1, {{.*}}, flags: DIFlagObjectPointer)
19 
20 struct Foo {
21   void bar() {}
22   void explicit_this(this Foo &&) {}
23 };
24 
25 void f() {
26   Foo{}.bar();
27   Foo{}.explicit_this();
28 }
29