<div dir="ltr">In r189286.<div><br></div><div>Thanks,</div><div>Manman</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Aug 26, 2013 at 3:57 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Mon, Aug 26, 2013 at 3:40 PM, Manman Ren <<a href="mailto:manman.ren@gmail.com">manman.ren@gmail.com</a>> wrote:<br>

> Author: mren<br>
> Date: Mon Aug 26 17:40:31 2013<br>
> New Revision: 189283<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=189283&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=189283&view=rev</a><br>
> Log:<br>
> Debug Info: add an identifier field to DICompositeType.<br>
><br>
> Paired with llvm r189282.<br>
> Update testing cases to handle an extra field for DICompositeType.<br>
><br>
> Modified:<br>
>     cfe/trunk/test/CodeGen/debug-info-args.c<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-class.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-enum.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-method.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-template.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-union-template.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info-zero-length-arrays.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-info.cpp<br>
>     cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp<br>
>     cfe/trunk/test/CodeGenObjC/debug-info-instancetype.m<br>
><br>
> Modified: cfe/trunk/test/CodeGen/debug-info-args.c<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-info-args.c?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-info-args.c?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGen/debug-info-args.c (original)<br>
> +++ cfe/trunk/test/CodeGen/debug-info-args.c Mon Aug 26 17:40:31 2013<br>
> @@ -2,7 +2,7 @@<br>
><br>
>  int somefunc(char *x, int y, double z) {<br>
><br>
> -  // CHECK: metadata ![[NUM:[^,]*]], i32 0, i32 0} ; [ DW_TAG_subroutine_type<br>
> +  // CHECK: metadata ![[NUM:[^,]*]], i32 0, null{{.*}}} ; [ DW_TAG_subroutine_type<br>
<br>
</div></div>Not strictly necessary, but several test case specify all metadata<br>
operands from the beginning or from the end to ensure they find the<br>
intended field to match on (eg: perhaps there are other sequences of<br>
"metadata !XXX, i32 0, null" in a subroutine_type record sometimes) -<br>
making it not match all the way to the end may cause these tests to<br>
pass or fail in strange ways in the future. (the risk of an accidental<br>
pass is rather scary, though less likely)<br>
<br>
Removing these "{{.*}}" you've added & replacing them with the<br>
requisite ", null, null" (I think, guessing, based on the change<br>
you'vem ade) may be a safer change.<br>
<div><div class="h5"><br>
>    // CHECK: ![[NUM]] = {{metadata !{metadata ![^,]*, metadata ![^,]*, metadata ![^,]*, metadata ![^,]*}}}<br>
><br>
>    return y;<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-artificial-arg.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -25,5 +25,5 @@ int main(int argc, char **argv) {<br>
>  // CHECK: ![[ARTARG:.*]] = {{.*}} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from A]<br>
>  // CHECK: ![[CLASSTYPE:.*]] = {{.*}} ; [ DW_TAG_class_type ] [A]<br>
>  // CHECK: metadata ![[CLASSTYPE]], {{.*}} ; [ DW_TAG_subprogram ] [line 12] [A]<br>
> -// CHECK: metadata [[FUNCTYPE:![0-9]*]], i32 0, i32 0} ; [ DW_TAG_subroutine_type ]<br>
> +// CHECK: metadata [[FUNCTYPE:![0-9]*]], i32 0, null{{.*}}} ; [ DW_TAG_subroutine_type ]<br>
>  // CHECK: [[FUNCTYPE]] = metadata !{null, metadata ![[ARTARG]], metadata !{{.*}}, metadata !{{.*}}}<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-class.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-class.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-class.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-class.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-class.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -96,7 +96,7 @@ int main(int argc, char **argv) {<br>
>  // CHECK: DW_TAG_class_type ] [B]<br>
>  // CHECK: metadata !"_vptr$B", {{.*}}, i32 64, metadata !{{.*}}} ; [ DW_TAG_member ]<br>
><br>
> -// CHECK: [[C:![0-9]*]] = {{.*}} metadata [[C_MEM:![0-9]*]], i32 0, metadata [[C]], null} ; [ DW_TAG_structure_type ] [C] {{.*}} [def]<br>
> +// CHECK: [[C:![0-9]*]] = {{.*}} metadata [[C_MEM:![0-9]*]], i32 0, metadata [[C]], null, null} ; [ DW_TAG_structure_type ] [C] {{.*}} [def]<br>
>  // CHECK: [[C_MEM]] = metadata !{metadata [[C_VPTR:![0-9]*]], metadata [[C_S:![0-9]*]], metadata [[C_DTOR:![0-9]*]]}<br>
>  // CHECK: [[C_VPTR]] = {{.*}} ; [ DW_TAG_member ] [_vptr$C] {{.*}} [artificial]<br>
>  // CHECK: [[C_S]] = {{.*}} ; [ DW_TAG_member ] [s] {{.*}} [static] [from int]<br>
> @@ -104,7 +104,7 @@ int main(int argc, char **argv) {<br>
><br>
>  // CHECK: ; [ DW_TAG_structure_type ] [A]<br>
>  // CHECK: HdrSize<br>
> -// CHECK: metadata [[D_MEM:![0-9]*]], i32 0, null} ; [ DW_TAG_structure_type ] [D] {{.*}} [decl]<br>
> +// CHECK: metadata [[D_MEM:![0-9]*]], i32 0, null, null, null} ; [ DW_TAG_structure_type ] [D] {{.*}} [decl]<br>
>  // CHECK: [[D_MEM]] = metadata !{metadata [[D_FUNC:![0-9]*]]}<br>
>  // CHECK: [[D_FUNC]] = {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [func]<br>
><br>
> @@ -112,15 +112,15 @@ int main(int argc, char **argv) {<br>
><br>
>  // CHECK: [[F_I_DEF:![0-9]*]] = {{.*}}, metadata [[F_I:![0-9]*]]} ; [ DW_TAG_variable ] [i]<br>
>  // CHECK: [[F_I]] = {{.*}} ; [ DW_TAG_member ] [i]<br>
> -// CHECK: [[F:![0-9]*]] = {{.*}} metadata [[F_MEM:![0-9]*]], i32 0, null, null} ; [ DW_TAG_structure_type ] [F] {{.*}} [def]<br>
> +// CHECK: [[F:![0-9]*]] = {{.*}} metadata [[F_MEM:![0-9]*]], i32 0, null, null, null} ; [ DW_TAG_structure_type ] [F] {{.*}} [def]<br>
>  // CHECK: [[F_MEM]] = metadata !{metadata [[F_I]]}<br>
><br>
> -// CHECK: null, i32 0, null} ; [ DW_TAG_structure_type ] [E] {{.*}} [decl]<br>
> +// CHECK: null, i32 0, null, null, null} ; [ DW_TAG_structure_type ] [E] {{.*}} [decl]<br>
><br>
> -// CHECK: metadata [[G_INNER_MEM:![0-9]*]], i32 0, null, null} ; [ DW_TAG_structure_type ] [inner] [line 50, {{.*}} [def]<br>
> +// CHECK: metadata [[G_INNER_MEM:![0-9]*]], i32 0, null, null, null} ; [ DW_TAG_structure_type ] [inner] [line 50, {{.*}} [def]<br>
>  // Context chains (in Clang -flimit-debug-info and in GCC generally) contain<br>
>  // definitions without members (& without a vbase 'containing type'):<br>
> -// CHECK: null, i32 0, null, null} ; [ DW_TAG_structure_type ] [G] {{.*}} [def]<br>
> +// CHECK: null, i32 0, null, null, null} ; [ DW_TAG_structure_type ] [G] {{.*}} [def]<br>
>  // CHECK: [[G_INNER_MEM]] = metadata !{metadata [[G_INNER_I:![0-9]*]]}<br>
>  // CHECK: [[G_INNER_I]] = {{.*}} ; [ DW_TAG_member ] [j] {{.*}} [from int]<br>
><br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-enum.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-enum.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-enum.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-enum.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-enum.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -4,7 +4,7 @@<br>
>  // CHECK: [[ENUMS]] = metadata !{metadata [[E1:![0-9]*]], metadata [[E2:![0-9]*]], metadata [[E3:![0-9]*]]}<br>
><br>
>  namespace test1 {<br>
> -// CHECK: [[E1]] = metadata !{i32 {{[^,]*}}, {{[^,]*}}, metadata [[TEST1:![0-9]*]], {{.*}}, metadata [[TEST1_ENUMS:![0-9]*]], {{[^,]*}}, {{[^,]*}}} ; [ DW_TAG_enumeration_type ] [e]<br>
> +// CHECK: [[E1]] = metadata !{i32 {{[^,]*}}, {{[^,]*}}, metadata [[TEST1:![0-9]*]], {{.*}}, metadata [[TEST1_ENUMS:![0-9]*]], {{[^,]*}}, null{{.*}}} ; [ DW_TAG_enumeration_type ] [e]<br>
>  // CHECK: [[TEST1]] = {{.*}} ; [ DW_TAG_namespace ] [test1]<br>
>  // CHECK: [[TEST1_ENUMS]] = metadata !{metadata [[TEST1_E:![0-9]*]]}<br>
>  // CHECK: [[TEST1_E]] = {{.*}}, metadata !"E", i64 0} ; [ DW_TAG_enumerator ] [E :: 0]<br>
> @@ -16,7 +16,7 @@ void foo() {<br>
><br>
>  namespace test2 {<br>
>  // rdar://8195980<br>
> -// CHECK: [[E2]] = metadata !{i32 {{[^,]*}}, {{[^,]*}}, metadata [[TEST2:![0-9]*]], {{.*}}, metadata [[TEST1_ENUMS]], {{[^,]*}}, {{[^,]*}}} ; [ DW_TAG_enumeration_type ] [e]<br>
> +// CHECK: [[E2]] = metadata !{i32 {{[^,]*}}, {{[^,]*}}, metadata [[TEST2:![0-9]*]], {{.*}}, metadata [[TEST1_ENUMS]], {{[^,]*}}, null{{.*}}} ; [ DW_TAG_enumeration_type ] [e]<br>
>  // CHECK: [[TEST2]] = {{.*}} ; [ DW_TAG_namespace ] [test2]<br>
>  enum e { E };<br>
>  bool func(int i) {<br>
> @@ -25,7 +25,7 @@ bool func(int i) {<br>
>  }<br>
><br>
>  namespace test3 {<br>
> -// CHECK: [[E3]] = metadata !{i32 {{[^,]*}}, {{[^,]*}}, metadata [[TEST3:![0-9]*]], {{.*}}, metadata [[TEST3_ENUMS:![0-9]*]], {{[^,]*}}, {{[^,]*}}} ; [ DW_TAG_enumeration_type ] [e]<br>
> +// CHECK: [[E3]] = metadata !{i32 {{[^,]*}}, {{[^,]*}}, metadata [[TEST3:![0-9]*]], {{.*}}, metadata [[TEST3_ENUMS:![0-9]*]], {{[^,]*}}, null{{.*}}} ; [ DW_TAG_enumeration_type ] [e]<br>
<br>
</div></div>Notice here, the regex were designed to match a specific number of<br>
fields by searching for "any number of non-commas" each time. Adding<br>
{{.*}} loses the value of those patterns. It'd be more appropriate to<br>
add another one of the same, or just add the requisite number of<br>
nulls. (I'd prefer the non-regex field values where it's appropriate<br>
(where they're likely to be stable & not change for unrelated reasons<br>
(eg: hardcoding a line number when not needed is bad, but hardcoding<br>
null for a template argument list when the test case has no templates<br>
seems safe/stable)).<br>
<div class="HOEnZb"><div class="h5"><br>
>  // CHECK: [[TEST3]] = {{.*}} ; [ DW_TAG_namespace ] [test3]<br>
>  // CHECK: [[TEST3_ENUMS]] = metadata !{metadata [[TEST3_E:![0-9]*]]}<br>
>  // CHECK: [[TEST3_E]] = {{.*}}, metadata !"E", i64 -1} ; [ DW_TAG_enumerator ] [E :: -1]<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-method.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-method.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-method.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-method.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-method.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -3,7 +3,7 @@<br>
>  // CHECK: metadata !"_ZN1A3fooEiS_3$_0", {{.*}} [protected]<br>
>  // CHECK: DW_TAG_ptr_to_member_type<br>
>  // CHECK: {{.*}}metadata ![[MEMFUNTYPE:[0-9]+]], metadata !{{.*}}} ; [ DW_TAG_ptr_to_member_type ] {{.*}} [from ]<br>
> -// CHECK: ![[MEMFUNTYPE]] = {{.*}}metadata ![[MEMFUNARGS:[0-9]+]], i32 0, i32 0} ; [ DW_TAG_subroutine_type ] {{.*}} [from ]<br>
> +// CHECK: ![[MEMFUNTYPE]] = {{.*}}metadata ![[MEMFUNARGS:[0-9]+]], i32 0, null{{.*}}} ; [ DW_TAG_subroutine_type ] {{.*}} [from ]<br>
>  // CHECK: ![[MEMFUNARGS]] = {{.*}}, metadata ![[THISTYPE]],<br>
>  // CHECK: ""{{.*}}DW_TAG_arg_variable<br>
>  // CHECK: ""{{.*}}DW_TAG_arg_variable<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -14,7 +14,7 @@ inline int add3(int x) {<br>
>    return MyClass().add<3>(x); // even though add<3> is ODR used, don't emit it since we don't codegen it<br>
>  }<br>
><br>
> -// CHECK: metadata [[C_MEM:![0-9]*]], i32 0, null, null} ; [ DW_TAG_structure_type ] [MyClass]<br>
> +// CHECK: metadata [[C_MEM:![0-9]*]], i32 0, null, null, null} ; [ DW_TAG_structure_type ] [MyClass]<br>
>  // CHECK: [[C_MEM]] = metadata !{metadata [[C_TEMP:![0-9]*]]}<br>
>  // CHECK: [[C_TEMP]] = {{.*}} ; [ DW_TAG_subprogram ] [line 4] [add<2>]<br>
><br>
> @@ -40,8 +40,8 @@ outer<foo>::inner x;<br>
><br>
>  // CHECK: metadata [[OUTER_FOO_INNER:![0-9]*]], i32 {{[0-9]*}}, i32 {{[0-9]*}}, %"struct.outer<foo>::inner"* @x, {{.*}} ; [ DW_TAG_variable ] [x]<br>
>  // CHECK: [[OUTER_FOO_INNER]] = {{.*}} ; [ DW_TAG_structure_type ] [inner]<br>
> -// CHECK: [[FOO_MEM:![0-9]*]], i32 0, null, null} ; [ DW_TAG_structure_type ] [foo]<br>
> +// CHECK: [[FOO_MEM:![0-9]*]], i32 0, null, null, null} ; [ DW_TAG_structure_type ] [foo]<br>
>  // CHECK: [[FOO_MEM]] = metadata !{metadata [[FOO_FUNC:![0-9]*]]}<br>
>  // CHECK: [[FOO_FUNC]] = {{.*}}, metadata !"_ZN3foo4funcEN5outerIS_E5innerE", i32 {{[0-9]*}}, metadata [[FOO_FUNC_TYPE:![0-9]*]], {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [func]<br>
> -// CHECK: [[FOO_FUNC_TYPE]] = {{.*}}, metadata [[FOO_FUNC_PARAMS:![0-9]*]], i32 0, i32 0} ; [ DW_TAG_subroutine_type ]<br>
> +// CHECK: [[FOO_FUNC_TYPE]] = {{.*}}, metadata [[FOO_FUNC_PARAMS:![0-9]*]], i32 0, null{{.*}}} ; [ DW_TAG_subroutine_type ]<br>
>  // CHECK: [[FOO_FUNC_PARAMS]] = metadata !{null, metadata !{{[0-9]*}}, metadata [[OUTER_FOO_INNER]]}<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-template-quals.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -20,7 +20,7 @@ void foo (const char *c) {<br>
>  // CHECK: [[CH]] = {{.*}} ; [ DW_TAG_base_type ] [char] [line 0, size 8, align 8, offset 0, enc DW_ATE_signed_char]<br>
><br>
>  // CHECK: {{.*}} metadata [[TYPE:![0-9]*]], {{.*}}, metadata !{{[0-9]*}}, metadata !{{[0-9]*}}, i32 8} ; [ DW_TAG_subprogram ] [line 7] [def] [scope 8] [assign]<br>
> -// CHECK: [[TYPE]] = metadata !{i32 {{.*}}, metadata [[ARGS:.*]], i32 0, i32 0} ; [ DW_TAG_subroutine_type ]<br>
> +// CHECK: [[TYPE]] = metadata !{i32 {{.*}}, metadata [[ARGS:.*]], i32 0, null{{.*}}} ; [ DW_TAG_subroutine_type ]<br>
>  // CHECK: [[ARGS]] = metadata !{metadata !{{.*}}, metadata !{{.*}}, metadata [[P]], metadata [[R:.*]]}<br>
>  // CHECK: [[BS:.*]] = {{.*}} ; [ DW_TAG_structure_type ] [basic_string<char>] [line 4, size 8, align 8, offset 0] [def] [from ]<br>
>  // CHECK: [[R]] = {{.*}}, metadata [[CON2:![0-9]*]]} ; [ DW_TAG_reference_type ] [line 0, size 0, align 0, offset 0] [from ]<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-template.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-template.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-template.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -6,7 +6,7 @@<br>
>  // CHECK: [[INT:![0-9]*]] = {{.*}} ; [ DW_TAG_base_type ] [int]<br>
>  // CHECK: metadata [[TCNESTED:![0-9]*]], i32 0, i32 1, %"struct.TC<unsigned int, 2, &glb, &foo::e, &foo::f, &func, tmpl_impl, 1, 2, 3>::nested"* @tci, null} ; [ DW_TAG_variable ] [tci]<br>

>  // CHECK: [[TCNESTED]] = metadata !{i32 {{[0-9]*}}, metadata !{{[0-9]*}}, metadata [[TC:![0-9]*]], {{.*}} ; [ DW_TAG_structure_type ] [nested]<br>
> -// CHECK: [[TC]] = {{.*}}, metadata [[TCARGS:![0-9]*]]} ; [ DW_TAG_structure_type ] [TC<unsigned int, 2, &glb, &foo::e, &foo::f, &func, tmpl_impl, 1, 2, 3>]<br>
> +// CHECK: [[TC]] = {{.*}}, metadata [[TCARGS:![0-9]*]], null} ; [ DW_TAG_structure_type ] [TC<unsigned int, 2, &glb, &foo::e, &foo::f, &func, tmpl_impl, 1, 2, 3>]<br>
>  // CHECK: [[TCARGS]] = metadata !{metadata [[TCARG1:![0-9]*]], metadata [[TCARG2:![0-9]*]], metadata [[TCARG3:![0-9]*]], metadata [[TCARG4:![0-9]*]], metadata [[TCARG5:![0-9]*]], metadata [[TCARG6:![0-9]*]], metadata [[TCARG7:![0-9]*]], metadata [[TCARG8:![0-9]*]]}<br>

>  //<br>
>  // We seem to be missing file/line/col info on template value parameters -<br>
> @@ -26,7 +26,7 @@<br>
>  // pointer type)<br>
>  // CHECK: [[FOO]] = {{.*}} ; [ DW_TAG_structure_type ] [foo]<br>
>  // CHECK: metadata !"f", metadata !"_ZN3foo1fEv", i32 {{[0-9]*}}, metadata [[FTYPE:![0-9]*]],<br>
> -// CHECK: [[FTYPE:![0-9]*]] = {{.*}}, metadata [[FARGS:![0-9]*]], i32 0, i32 0} ; [ DW_TAG_subroutine_type ]<br>
> +// CHECK: [[FTYPE:![0-9]*]] = {{.*}}, metadata [[FARGS:![0-9]*]], i32 0, null{{.*}}} ; [ DW_TAG_subroutine_type ]<br>
>  // CHECK: [[FARGS]] = metadata !{null, metadata [[FARG1:![0-9]*]]}<br>
>  // CHECK: [[FARG1]] = {{.*}} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from foo]<br>
>  //<br>
> @@ -38,7 +38,7 @@<br>
>  // CHECK: [[MEMFUNPTR]] = {{.*}}, metadata [[FTYPE]], metadata [[FOO]]} ; [ DW_TAG_ptr_to_member_type ]<br>
>  // CHECK: [[TCARG6]] = {{.*}}metadata !"f", metadata [[FUNPTR:![0-9]*]], void ()* @_Z4funcv, {{.*}} ; [ DW_TAG_template_value_parameter ]<br>
>  // CHECK: [[FUNPTR]] = {{.*}}, metadata [[FUNTYPE:![0-9]*]]} ; [ DW_TAG_pointer_type ]<br>
> -// CHECK: [[FUNTYPE]] = {{.*}}, metadata [[FUNARGS:![0-9]*]], i32 0, i32 0} ; [ DW_TAG_subroutine_type ]<br>
> +// CHECK: [[FUNTYPE]] = {{.*}}, metadata [[FUNARGS:![0-9]*]], i32 0, null{{.*}}} ; [ DW_TAG_subroutine_type ]<br>
>  // CHECK: [[FUNARGS]] = metadata !{null}<br>
>  // CHECK: [[TCARG7]] = {{.*}}metadata !"tmpl", null, metadata !"tmpl_impl", {{.*}} ; [ DW_TAG_GNU_template_template_param ]<br>
>  // CHECK: [[TCARG8]] = {{.*}}metadata !"Is", null, metadata [[TCARG8_VALS:![0-9]*]], {{.*}} ; [ DW_TAG_GNU_template_parameter_pack ]<br>
> @@ -49,7 +49,7 @@<br>
><br>
><br>
>  // CHECK: metadata [[TCNT:![0-9]*]], i32 0, i32 1, %struct.TC* @tcn, null} ; [ DW_TAG_variable ] [tcn]<br>
> -// CHECK: [[TCNT:![0-9]*]] = {{.*}}, metadata [[TCNARGS:![0-9]*]]} ; [ DW_TAG_structure_type ] [TC<int, -3, nullptr, nullptr, nullptr, nullptr, tmpl_impl>]<br>
> +// CHECK: [[TCNT:![0-9]*]] = {{.*}}, metadata [[TCNARGS:![0-9]*]], null} ; [ DW_TAG_structure_type ] [TC<int, -3, nullptr, nullptr, nullptr, nullptr, tmpl_impl>]<br>
>  // CHECK: [[TCNARGS]] = metadata !{metadata [[TCNARG1:![0-9]*]], metadata [[TCNARG2:![0-9]*]], metadata [[TCNARG3:![0-9]*]], metadata [[TCNARG4:![0-9]*]], metadata [[TCNARG5:![0-9]*]], metadata [[TCNARG6:![0-9]*]], metadata [[TCARG7:![0-9]*]], metadata [[TCNARG8:![0-9]*]]}<br>

>  // CHECK: [[TCNARG1]] = {{.*}}metadata !"T", metadata [[INT]], {{.*}} ; [ DW_TAG_template_type_parameter ]<br>
>  // CHECK: [[TCNARG2]] = {{.*}}metadata !"", metadata [[INT]], i32 -3, {{.*}} ; [ DW_TAG_template_value_parameter ]<br>
> @@ -69,14 +69,14 @@<br>
>  // CHECK: [[TCNARG5]] = {{.*}}metadata !"b", metadata [[MEMFUNPTR]], i8 0, {{.*}} ; [ DW_TAG_template_value_parameter ]<br>
>  // CHECK: [[TCNARG6]] = {{.*}}metadata !"f", metadata [[FUNPTR]], i8 0, {{.*}} ; [ DW_TAG_template_value_parameter ]<br>
>  // CHECK: [[TCNARG8]] = {{.*}}metadata !"Is", null, metadata [[EMPTY]], {{.*}} ; [ DW_TAG_GNU_template_parameter_pack ]<br>
> -// CHECK: metadata [[TGIARGS:![0-9]*]]} ; [ DW_TAG_structure_type ] [tmpl_guid<&__uuidof(uuid)>]<br>
> +// CHECK: metadata [[TGIARGS:![0-9]*]], null} ; [ DW_TAG_structure_type ] [tmpl_guid<&__uuidof(uuid)>]<br>
>  // CHECK: [[TGIARGS]] = metadata !{metadata [[TGIARG1:![0-9]*]]}<br>
>  // CHECK: [[TGIARG1]] = {{.*}}metadata !"", metadata [[CONST_GUID_PTR:![0-9]*]], { i32, i16, i16, [8 x i8] }* @_GUID_12345678_1234_1234_1234_1234567890ab, {{.*}} ; [ DW_TAG_template_value_parameter ]<br>
>  // CHECK: [[CONST_GUID_PTR]] = {{.*}}, metadata [[CONST_GUID:![0-9]*]]} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from ]<br>
>  // CHECK: [[CONST_GUID]] = {{.*}}, metadata [[GUID:![0-9]*]]} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from _GUID]<br>
>  // CHECK: [[GUID]] = {{.*}} ; [ DW_TAG_structure_type ] [_GUID]<br>
><br>
> -// CHECK: metadata [[PTOARGS:![0-9]*]]} ; [ DW_TAG_structure_type ] [PaddingAtEndTemplate<&PaddedObj>]<br>
> +// CHECK: metadata [[PTOARGS:![0-9]*]], null} ; [ DW_TAG_structure_type ] [PaddingAtEndTemplate<&PaddedObj>]<br>
>  // CHECK: [[PTOARGS]] = metadata !{metadata [[PTOARG1:![0-9]*]]}<br>
>  // CHECK: [[PTOARG1]] = {{.*}}metadata !"", metadata [[CONST_PADDINGATEND_PTR:![0-9]*]], { i32, i8, [3 x i8] }* @PaddedObj, {{.*}} ; [ DW_TAG_template_value_parameter ]<br>
>  // CHECK: [[CONST_PADDINGATEND_PTR]] = {{.*}} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from PaddingAtEnd]<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-union-template.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-union-template.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-union-template.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-union-template.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-union-template.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -10,6 +10,6 @@ namespace PR15637 {<br>
>    Value<float> f;<br>
>  }<br>
><br>
> -// CHECK: {{.*}}, metadata !"Value<float>", {{.*}}, null, metadata [[TTPARAM:.*]]} ; [ DW_TAG_union_type ] [Value<float>]<br>
> +// CHECK: {{.*}}, metadata !"Value<float>", {{.*}}, null, metadata [[TTPARAM:.*]], null} ; [ DW_TAG_union_type ] [Value<float>]<br>
>  // CHECK: [[TTPARAM]] = metadata !{metadata [[PARAMS:.*]]}<br>
>  // CHECK: [[PARAMS]] = metadata !{{{.*}}metadata !"T",{{.*}}} ; [ DW_TAG_template_type_parameter ]<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-zero-length-arrays.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-zero-length-arrays.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-zero-length-arrays.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info-zero-length-arrays.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info-zero-length-arrays.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -7,6 +7,6 @@ class A {<br>
>  A a;<br>
><br>
>  // CHECK: metadata [[ARRAY_TYPE:![0-9]*]]} ; [ DW_TAG_member ] [x]<br>
> -// CHECK: metadata [[ELEM_TYPE:![0-9]*]], i32 0, i32 0} ; [ DW_TAG_array_type ] [line 0, size 0, align 32, offset 0] [from int]<br>
> +// CHECK: metadata [[ELEM_TYPE:![0-9]*]], i32 0, null{{.*}}} ; [ DW_TAG_array_type ] [line 0, size 0, align 32, offset 0] [from int]<br>
>  // CHECK: [[ELEM_TYPE]] = metadata !{metadata [[SUBRANGE:.*]]}<br>
>  // CHECK: [[SUBRANGE]] = metadata !{i32 786465, i64 0, i64 -1} ; [ DW_TAG_subrange_type ] [unbounded]<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-info.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-info.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -87,7 +87,7 @@ struct incomplete;<br>
>  incomplete (*x)[3];<br>
>  // CHECK: metadata [[INCARRAYPTR:![0-9]*]], i32 0, i32 1, [3 x i8]** @_ZN6pr96081xE, null} ; [ DW_TAG_variable ] [x]<br>
>  // CHECK: [[INCARRAYPTR]] = {{.*}}metadata [[INCARRAY:![0-9]*]]} ; [ DW_TAG_pointer_type ]<br>
> -// CHECK: [[INCARRAY]] = {{.*}}metadata [[INCTYPE:![0-9]*]], metadata {{![0-9]*}}, i32 0, i32 0} ; [ DW_TAG_array_type ] [line 0, size 0, align 0, offset 0] [from incomplete]<br>
> +// CHECK: [[INCARRAY]] = {{.*}}metadata [[INCTYPE:![0-9]*]], metadata {{![0-9]*}}, i32 0, null{{.*}}} ; [ DW_TAG_array_type ] [line 0, size 0, align 0, offset 0] [from incomplete]<br>
>  // CHECK: [[INCTYPE]] = {{.*}} ; [ DW_TAG_structure_type ] [incomplete]{{.*}} [decl]<br>
>  }<br>
><br>
> @@ -112,7 +112,7 @@ void func() {<br>
>    const bt *b_cnst_ptr_inst;<br>
>  }<br>
><br>
> -// CHECK: metadata [[A_MEM:![0-9]*]], i32 0, null, null} ; [ DW_TAG_structure_type ] [a]<br>
> +// CHECK: metadata [[A_MEM:![0-9]*]], i32 0, null, null, null} ; [ DW_TAG_structure_type ] [a]<br>
>  // CHECK: [[A_MEM]] = metadata !{metadata [[A_I:![0-9]*]]}<br>
>  // CHECK: [[A_I]] = {{.*}} ; [ DW_TAG_member ] [i] {{.*}} [from int]<br>
>  // CHECK: ; [ DW_TAG_structure_type ] [b] {{.*}}[decl]<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/debug-lambda-expressions.cpp Mon Aug 26 17:40:31 2013<br>
> @@ -30,7 +30,7 @@ int d(int x) { D y[10]; return [x,y] { r<br>
>  // CHECK: [[D_FUNC:.*]] = {{.*}} [ DW_TAG_subprogram ] [line [[D_LINE:.*]]] [def] [d]<br>
><br>
>  // Back to D. -- 24<br>
> -// CHECK: [[LAM_D:.*]] = {{.*}}, metadata [[D_FUNC]], {{.*}}, metadata [[LAM_D_ARGS:.*]], i32 0, null, null} ; [ DW_TAG_class_type ] [line [[D_LINE]],<br>
> +// CHECK: [[LAM_D:.*]] = {{.*}}, metadata [[D_FUNC]], {{.*}}, metadata [[LAM_D_ARGS:.*]], i32 0, null, null, null} ; [ DW_TAG_class_type ] [line [[D_LINE]],<br>
>  // CHECK: [[LAM_D_ARGS]] = metadata !{metadata [[CAP_D_X:.*]], metadata [[CAP_D_Y:.*]], metadata [[CON_LAM_D:.*]]}<br>
>  // CHECK: [[CAP_D_X]] = {{.*}}, metadata [[LAM_D]], {{.*}} [ DW_TAG_member ] [x] [line [[D_LINE]],<br>
>  // CHECK: [[CAP_D_Y]] = {{.*}}, metadata [[LAM_D]], {{.*}} [ DW_TAG_member ] [y] [line [[D_LINE]],<br>
> @@ -38,7 +38,7 @@ int d(int x) { D y[10]; return [x,y] { r<br>
><br>
><br>
>  // Back to C. -- 55<br>
> -// CHECK: [[LAM_C:.*]] = {{.*}}, metadata [[C_FUNC]], {{.*}}, metadata [[LAM_C_ARGS:.*]], i32 0, null, null} ; [ DW_TAG_class_type ] [line [[C_LINE]],<br>
> +// CHECK: [[LAM_C:.*]] = {{.*}}, metadata [[C_FUNC]], {{.*}}, metadata [[LAM_C_ARGS:.*]], i32 0, null, null, null} ; [ DW_TAG_class_type ] [line [[C_LINE]],<br>
>  // CHECK: [[LAM_C_ARGS]] = metadata !{metadata [[CAP_C:.*]], metadata [[CON_LAM_C:.*]]}<br>
>  // Ignoring the member type for now.<br>
>  // CHECK: [[CAP_C]] = {{.*}}, metadata [[LAM_C]], {{.*}}} ; [ DW_TAG_member ] [x] [line [[C_LINE]],<br>
> @@ -46,22 +46,22 @@ int d(int x) { D y[10]; return [x,y] { r<br>
><br>
><br>
>  // Back to B. -- 67<br>
> -// CHECK: [[LAM_B:.*]] = {{.*}}, metadata [[B_FUNC]], {{.*}}, metadata [[LAM_B_ARGS:.*]], i32 0, null, null} ; [ DW_TAG_class_type ] [line [[B_LINE]],<br>
> +// CHECK: [[LAM_B:.*]] = {{.*}}, metadata [[B_FUNC]], {{.*}}, metadata [[LAM_B_ARGS:.*]], i32 0, null, null, null} ; [ DW_TAG_class_type ] [line [[B_LINE]],<br>
>  // CHECK: [[LAM_B_ARGS]] = metadata !{metadata [[CAP_B:.*]], metadata [[CON_LAM_B:.*]]}<br>
>  // CHECK: [[CAP_B]] = {{.*}}, metadata [[LAM_B]], {{.*}}} ; [ DW_TAG_member ] [x] [line [[B_LINE]],<br>
>  // CHECK: [[CON_LAM_B]] = {{.*}}, metadata [[LAM_B]], {{.*}} [ DW_TAG_subprogram ] [line [[B_LINE]]] [operator()]<br>
><br>
>  // Back to A. -- 78<br>
> -// CHECK: [[LAM_A:.*]] = {{.*}}, metadata [[A_FUNC]], {{.*}}, metadata [[LAM_A_ARGS:.*]], i32 0, null, null} ; [ DW_TAG_class_type ] [line [[A_LINE]],<br>
> +// CHECK: [[LAM_A:.*]] = {{.*}}, metadata [[A_FUNC]], {{.*}}, metadata [[LAM_A_ARGS:.*]], i32 0, null, null, null} ; [ DW_TAG_class_type ] [line [[A_LINE]],<br>
>  // CHECK: [[LAM_A_ARGS]] = metadata !{metadata [[CON_LAM_A:.*]]}<br>
>  // CHECK: [[CON_LAM_A]] = {{.*}}, metadata [[LAM_A]], {{.*}} [ DW_TAG_subprogram ] [line [[A_LINE]]] [operator()]<br>
><br>
>  // CVAR:<br>
>  // CHECK: {{.*}} metadata [[CVAR_T:![0-9]*]], {{.*}} ; [ DW_TAG_variable ] [cvar] [line [[CVAR_LINE:[0-9]*]]]<br>
> -// CHECK: [[CVAR_T]] = {{.*}}, metadata ![[CVAR_ARGS:.*]], i32 0, null, null} ; [ DW_TAG_class_type ] [line [[CVAR_LINE]],<br>
> +// CHECK: [[CVAR_T]] = {{.*}}, metadata ![[CVAR_ARGS:.*]], i32 0, null, null, null} ; [ DW_TAG_class_type ] [line [[CVAR_LINE]],<br>
>  // CHECK: [[CVAR_ARGS]] = metadata !{metadata !{{.*}}}<br>
><br>
>  // VAR:<br>
>  // CHECK: {{.*}} metadata [[VAR_T:![0-9]*]], {{.*}} ; [ DW_TAG_variable ] [var] [line [[VAR_LINE:[0-9]*]]]<br>
> -// CHECK: [[VAR_T]] = {{.*}}, metadata [[VAR_ARGS:![0-9]*]], i32 0, null, null} ; [ DW_TAG_class_type ] [line [[VAR_LINE]],<br>
> +// CHECK: [[VAR_T]] = {{.*}}, metadata [[VAR_ARGS:![0-9]*]], i32 0, null, null, null} ; [ DW_TAG_class_type ] [line [[VAR_LINE]],<br>
>  // CHECK: [[VAR_ARGS]] = metadata !{metadata !{{.*}}}<br>
><br>
> Modified: cfe/trunk/test/CodeGenObjC/debug-info-instancetype.m<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/debug-info-instancetype.m?rev=189283&r1=189282&r2=189283&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/debug-info-instancetype.m?rev=189283&r1=189282&r2=189283&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenObjC/debug-info-instancetype.m (original)<br>
> +++ cfe/trunk/test/CodeGenObjC/debug-info-instancetype.m Mon Aug 26 17:40:31 2013<br>
> @@ -15,7 +15,7 @@<br>
>  +(instancetype)defaultFoo {return 0;}<br>
>  // CHECK: ![[FOO:[0-9]+]] = metadata {{.*}}; [ DW_TAG_structure_type ] [Foo]<br>
>  // CHECK: metadata !"+[Foo defaultFoo]", metadata !"", i32 [[@LINE-2]], metadata ![[TYPE:[0-9]+]]<br>
> -// CHECK: ![[TYPE]] = {{.*}} metadata ![[RESULT:[0-9]+]], i32 {{.*}}, i32 {{.*}}} ; [ DW_TAG_subroutine_type ]<br>
> +// CHECK: ![[TYPE]] = {{.*}} metadata ![[RESULT:[0-9]+]], i32 {{.*}}, null{{.*}}} ; [ DW_TAG_subroutine_type ]<br>
>  // CHECK: ![[RESULT]] = metadata {{.*}}{metadata ![[FOOPTR:[0-9]+]],<br>
>  // CHECK: ![[FOOPTR]] = {{.*}}, metadata ![[FOO]]}{{.*}}[ DW_TAG_pointer_type ] {{.*}} [from Foo]<br>
>  @end<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br></div>