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