16a14c21dSNAKAMURA Takumi // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -g %s -o - | FileCheck %s 2d45ba252SAdrian Prantl 3d45ba252SAdrian Prantl struct A 4d45ba252SAdrian Prantl { 5*f04be1fbSDuncan P. N. Exon Smith // CHECK: !MDSubprogram(name: "a", linkageName: "_ZN1A1aEiz" 6*f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: line: [[@LINE+2]] 7*f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: type: ![[ATY:[0-9]+]] 8d45ba252SAdrian Prantl void a(int c, ...) {} 9*f04be1fbSDuncan P. N. Exon Smith // CHECK: ![[ATY]] = !MDSubroutineType(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 14*f04be1fbSDuncan P. N. Exon Smith // CHECK: !MDSubprogram(name: "b", linkageName: "_Z1biz" 15*f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: line: [[@LINE+2]] 16*f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: type: ![[BTY:[0-9]+]] 17d45ba252SAdrian Prantl void b(int c, ...) { 18*f04be1fbSDuncan P. N. Exon Smith // CHECK: ![[BTY]] = !MDSubroutineType(types: ![[BARGS:[0-9]+]]) 19b3a66691SDuncan P. N. Exon Smith // CHECK: ![[BARGS]] = !{null, !{{[0-9]+}}, null} 20d45ba252SAdrian Prantl 21d45ba252SAdrian Prantl A a; 22d45ba252SAdrian Prantl 23*f04be1fbSDuncan P. N. Exon Smith // CHECK: !MDLocalVariable(tag: DW_TAG_auto_variable, name: "fptr" 24*f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: line: [[@LINE+2]] 25*f04be1fbSDuncan P. N. Exon Smith // CHECK-SAME: type: ![[PST:[0-9]+]] 26d45ba252SAdrian Prantl void (*fptr)(int, ...) = b; 27*f04be1fbSDuncan P. N. Exon Smith // CHECK: ![[PST]] = !MDDerivedType(tag: DW_TAG_pointer_type, baseType: ![[BTY]], 28d45ba252SAdrian Prantl } 29