xref: /llvm-project/clang/test/CodeGenCXX/debug-info-object-pointer.cpp (revision a5fb2bbb2ad8488482843e2298fbe6f6a1d45bbd)
13d24c77fSMichael Buch // RUN: %clang_cc1 -x c++ -std=c++23 -debug-info-kind=limited -emit-llvm < %s | FileCheck %s
23d24c77fSMichael Buch 
33d24c77fSMichael Buch // CHECK: !DISubprogram(name: "bar",
43d24c77fSMichael Buch // CHECK-SAME:          flags: DIFlagPrototyped
53d24c77fSMichael Buch // CHECK: !DIDerivedType(tag: DW_TAG_pointer_type
63d24c77fSMichael Buch // CHECK-SAME:           flags: DIFlagArtificial | DIFlagObjectPointer
73d24c77fSMichael Buch //
83d24c77fSMichael Buch // CHECK: !DISubprogram(name: "explicit_this",
93d24c77fSMichael Buch //                      flags: DIFlagPrototyped
10*a5fb2bbbSMichael Buch //
11*a5fb2bbbSMichael Buch // CHECK: !DIDerivedType(tag: DW_TAG_rvalue_reference_type
12*a5fb2bbbSMichael Buch // CHECK-SAME:           flags: DIFlagObjectPointer)
133d24c77fSMichael Buch //
143d24c77fSMichael Buch // CHECK: !DILocalVariable(name: "this", arg: 1
153d24c77fSMichael Buch // CHECK-SAME:             flags: DIFlagArtificial | DIFlagObjectPointer
163d24c77fSMichael Buch //
173d24c77fSMichael Buch // CHECK-NOT: DIFlagArtificial
183d24c77fSMichael Buch // CHECK: !DILocalVariable(arg: 1, {{.*}}, flags: DIFlagObjectPointer)
193d24c77fSMichael Buch 
203d24c77fSMichael Buch struct Foo {
213d24c77fSMichael Buch   void bar() {}
223d24c77fSMichael Buch   void explicit_this(this Foo &&) {}
233d24c77fSMichael Buch };
243d24c77fSMichael Buch 
253d24c77fSMichael Buch void f() {
263d24c77fSMichael Buch   Foo{}.bar();
273d24c77fSMichael Buch   Foo{}.explicit_this();
283d24c77fSMichael Buch }
29