1*3459ce2eSDouglas Katzman // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s 2d45ba252SAdrian Prantl 3d45ba252SAdrian Prantl struct A 4d45ba252SAdrian Prantl { 59dd4e4e6SDuncan P. N. Exon Smith // CHECK: !DISubprogram(name: "a", linkageName: "_ZN1A1aEiz" 6f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: line: [[@LINE+2]] 7f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: type: ![[ATY:[0-9]+]] 8d45ba252SAdrian Prantl void a(int c, ...) {} 99dd4e4e6SDuncan P. N. Exon Smith // CHECK: ![[ATY]] = !DISubroutineType(types: ![[AARGS:[0-9]+]]) 10264da422SManman Ren // We no longer use an explicit unspecified parameter. Instead we use a trailing null to mean the function is variadic. 11b3a66691SDuncan P. N. Exon Smith // CHECK: ![[AARGS]] = !{null, !{{[0-9]+}}, !{{[0-9]+}}, null} 12d45ba252SAdrian Prantl }; 13d45ba252SAdrian Prantl 149dd4e4e6SDuncan P. N. Exon Smith // CHECK: !DISubprogram(name: "b", linkageName: "_Z1biz" 15f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: line: [[@LINE+2]] 16f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: type: ![[BTY:[0-9]+]] 17d45ba252SAdrian Prantl void b(int c, ...) { 189dd4e4e6SDuncan P. N. Exon Smith // CHECK: ![[BTY]] = !DISubroutineType(types: ![[BARGS:[0-9]+]]) 19b3a66691SDuncan P. N. Exon Smith // CHECK: ![[BARGS]] = !{null, !{{[0-9]+}}, null} 20d45ba252SAdrian Prantl 21d45ba252SAdrian Prantl A a; 22d45ba252SAdrian Prantl 2338a7f11aSDuncan P. N. Exon Smith // CHECK: !DILocalVariable(name: "fptr" 24f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: line: [[@LINE+2]] 25f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: type: ![[PST:[0-9]+]] 26d45ba252SAdrian Prantl void (*fptr)(int, ...) = b; 279dd4e4e6SDuncan P. N. Exon Smith // CHECK: ![[PST]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[BTY]], 28d45ba252SAdrian Prantl } 29