| // RUN: %clang_cc1 %s -triple x86_64-windows-msvc -gcodeview \ |
| // RUN: -debug-info-kind=line-tables-only -emit-llvm -o - | FileCheck %s |
| // Checks that clang with "-gline-tables-only" with CodeView emits some debug |
| // info for variables and types when they appear in function scopes. |
| |
| namespace NS { |
| struct C { |
| void m() {} |
| // Test externally visible lambda. |
| void lambda2() { []() {}(); } |
| |
| // Test naming for function parameters. |
| void lambda_params(int x = [](){ return 0; }(), int y = [](){ return 1; }()) {} |
| }; |
| void f() {} |
| } |
| |
| // Test non- externally visible lambda. |
| auto lambda1 = []() { return 1; }; |
| |
| NS::C c; |
| |
| |
| void test() { |
| // CHECK: !DISubprogram(name: "f", scope: ![[NS:[0-9]+]], |
| // CHECK-SAME: type: ![[F:[0-9]+]] |
| // CHECK: ![[NS]] = !DINamespace(name: "NS", scope: null) |
| // CHECK: ![[F]] = !DISubroutineType(types: ![[FTYPE:[0-9]+]]) |
| // CHECK: ![[FTYPE]] = !{null} |
| NS::f(); |
| |
| // CHECK: ![[M:[0-9]+]] = distinct !DISubprogram(name: "m", scope: ![[C:[0-9]+]], |
| // CHECK-SAME: type: ![[MTYPE:[0-9]+]], |
| // CHECK: ![[C]] = !DICompositeType(tag: DW_TAG_structure_type, name: "C", |
| // CHECK-SAME: flags: DIFlagFwdDecl |
| // CHECK-NOT: identifier |
| // CHECK: ![[MTYPE]] = !DISubroutineType({{.*}}types: !{{.*}}) |
| c.m(); |
| |
| // CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA0:[0-9]+]], |
| // CHECK: ![[LAMBDA0]] = !DICompositeType(tag: DW_TAG_class_type, |
| // CHECK-SAME: name: "<lambda_0>", |
| // CHECK-SAME: flags: DIFlagFwdDecl |
| lambda1(); |
| |
| // CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA1_1:[0-9]+]], |
| // CHECK: ![[LAMBDA1_1]] = !DICompositeType(tag: DW_TAG_class_type, |
| // CHECK-SAME: name: "<lambda_1_1>", |
| // CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA2_1:[0-9]+]], |
| // CHECK: ![[LAMBDA2_1]] = !DICompositeType(tag: DW_TAG_class_type, |
| // CHECK-SAME: name: "<lambda_2_1>", |
| c.lambda_params(); |
| |
| // CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA1:[0-9]+]], |
| // CHECK: ![[LAMBDA1]] = !DICompositeType(tag: DW_TAG_class_type, |
| // CHECK-SAME: name: "<lambda_1>", |
| // CHECK-SAME: flags: DIFlagFwdDecl |
| c.lambda2(); |
| } |