Mind adding the C++ you used for the test to the comments in the test please?<br><br><div>Thanks!</div><div><br></div><div>-eric</div><br><div>On Wed Dec 18 2013 at 1:54:57 PM, Adrian Prantl <<a href="mailto:aprantl@apple.com">aprantl@apple.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: adrian<br>
Date: Wed Dec 18 15:48:19 2013<br>
New Revision: 197613<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=197613&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=197613&view=rev</a><br>
Log:<br>
Debug info: Implement (rvalue) reference qualifiers for C++11 non-static<br>
member functions. Paired commit with CFE.<br>
<br>
rdar://problem/15356637<br>
<br>
Added:<br>
llvm/trunk/test/DebugInfo/<u></u>debug-info-qualifiers.ll<br>
Modified:<br>
llvm/trunk/include/llvm/<u></u>DIBuilder.h<br>
llvm/trunk/include/llvm/<u></u>DebugInfo.h<br>
llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/DwarfUnit.cpp<br>
llvm/trunk/lib/IR/DIBuilder.<u></u>cpp<br>
llvm/trunk/lib/IR/DebugInfo.<u></u>cpp<br>
<br>
Modified: llvm/trunk/include/llvm/<u></u>DIBuilder.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DIBuilder.h?rev=197613&r1=197612&r2=197613&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/include/<u></u>llvm/DIBuilder.h?rev=197613&<u></u>r1=197612&r2=197613&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/include/llvm/<u></u>DIBuilder.h (original)<br>
+++ llvm/trunk/include/llvm/<u></u>DIBuilder.h Wed Dec 18 15:48:19 2013<br>
@@ -415,10 +415,13 @@ namespace llvm {<br>
StringRef UniqueIdentifier = StringRef());<br>
<br>
/// createSubroutineType - Create subroutine type.<br>
- /// @param File File in which this subroutine is defined.<br>
- /// @param ParameterTypes An array of subroutine parameter types. This<br>
- /// includes return type at 0th index.<br>
- DICompositeType createSubroutineType(DIFile File, DIArray ParameterTypes);<br>
+ /// @param File File in which this subroutine is defined.<br>
+ /// @param ParameterTypes An array of subroutine parameter types. This<br>
+ /// includes return type at 0th index.<br>
+ /// @param Flags E.g.: LValueReference.<br>
+ /// These flags are used to emit dwarf attributes.<br>
+ DICompositeType createSubroutineType(DIFile File, DIArray ParameterTypes,<br>
+ unsigned Flags = 0);<br>
<br>
/// createArtificialType - Create a new DIType with "artificial" flag set.<br>
DIType createArtificialType(DIType Ty);<br>
<br>
Modified: llvm/trunk/include/llvm/<u></u>DebugInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo.h?rev=197613&r1=197612&r2=197613&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/include/<u></u>llvm/DebugInfo.h?rev=197613&<u></u>r1=197612&r2=197613&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/include/llvm/<u></u>DebugInfo.h (original)<br>
+++ llvm/trunk/include/llvm/<u></u>DebugInfo.h Wed Dec 18 15:48:19 2013<br>
@@ -64,20 +64,22 @@ class DIDescriptor {<br>
<br>
public:<br>
enum {<br>
- FlagPrivate = 1 << 0,<br>
- FlagProtected = 1 << 1,<br>
- FlagFwdDecl = 1 << 2,<br>
- FlagAppleBlock = 1 << 3,<br>
- FlagBlockByrefStruct = 1 << 4,<br>
- FlagVirtual = 1 << 5,<br>
- FlagArtificial = 1 << 6,<br>
- FlagExplicit = 1 << 7,<br>
- FlagPrototyped = 1 << 8,<br>
+ FlagPrivate = 1 << 0,<br>
+ FlagProtected = 1 << 1,<br>
+ FlagFwdDecl = 1 << 2,<br>
+ FlagAppleBlock = 1 << 3,<br>
+ FlagBlockByrefStruct = 1 << 4,<br>
+ FlagVirtual = 1 << 5,<br>
+ FlagArtificial = 1 << 6,<br>
+ FlagExplicit = 1 << 7,<br>
+ FlagPrototyped = 1 << 8,<br>
FlagObjcClassComplete = 1 << 9,<br>
- FlagObjectPointer = 1 << 10,<br>
- FlagVector = 1 << 11,<br>
- FlagStaticMember = 1 << 12,<br>
- FlagIndirectVariable = 1 << 13<br>
+ FlagObjectPointer = 1 << 10,<br>
+ FlagVector = 1 << 11,<br>
+ FlagStaticMember = 1 << 12,<br>
+ FlagIndirectVariable = 1 << 13,<br>
+ FlagLValueReference = 1 << 14,<br>
+ FlagRValueReference = 1 << 15<br>
};<br>
<br>
protected:<br>
@@ -313,6 +315,12 @@ public:<br>
}<br>
bool isVector() const { return (getFlags() & FlagVector) != 0; }<br>
bool isStaticMember() const { return (getFlags() & FlagStaticMember) != 0; }<br>
+ bool isLValueReference() const {<br>
+ return (getFlags() & FlagLValueReference) != 0;<br>
+ }<br>
+ bool isRValueReference() const {<br>
+ return (getFlags() & FlagRValueReference) != 0;<br>
+ }<br>
bool isValid() const { return DbgNode && isType(); }<br>
<br>
/// replaceAllUsesWith - Replace all uses of debug info referenced by<br>
@@ -470,6 +478,19 @@ public:<br>
return (getUnsignedField(13) & FlagPrototyped) != 0;<br>
}<br>
<br>
+ /// Return true if this subprogram is a C++11 reference-qualified<br>
+ /// non-static member function (void foo() &).<br>
+ unsigned isLValueReference() const {<br>
+ return (getUnsignedField(13) & FlagLValueReference) != 0;<br>
+ }<br>
+<br>
+ /// Return true if this subprogram is a C++11<br>
+ /// rvalue-reference-qualified non-static member function<br>
+ /// (void foo() &&).<br>
+ unsigned isRValueReference() const {<br>
+ return (getUnsignedField(13) & FlagRValueReference) != 0;<br>
+ }<br>
+<br>
unsigned isOptimized() const;<br>
<br>
/// Verify - Verify that a subprogram descriptor is well formed.<br>
<br>
Modified: llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/DwarfUnit.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=197613&r1=197612&r2=197613&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/<u></u>CodeGen/AsmPrinter/DwarfUnit.<u></u>cpp?rev=197613&r1=197612&r2=<u></u>197613&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/DwarfUnit.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/DwarfUnit.cpp Wed Dec 18 15:48:19 2013<br>
@@ -1218,6 +1218,12 @@ void DwarfUnit::constructTypeDIE(<u></u>DIE &Bu<br>
(Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||<br>
Language == dwarf::DW_LANG_ObjC))<br>
addFlag(&Buffer, dwarf::DW_AT_prototyped);<br>
+<br>
+ if (CTy.isLValueReference())<br>
+ addFlag(&Buffer, dwarf::DW_AT_reference);<br>
+<br>
+ if (CTy.isRValueReference())<br>
+ addFlag(&Buffer, dwarf::DW_AT_rvalue_reference)<u></u>;<br>
} break;<br>
case dwarf::DW_TAG_structure_type:<br>
case dwarf::DW_TAG_union_type:<br>
@@ -1520,6 +1526,12 @@ DIE *DwarfUnit::<u></u>getOrCreateSubprogramDIE<br>
addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);<br>
}<br>
<br>
+ if (SP.isLValueReference())<br>
+ addFlag(SPDie, dwarf::DW_AT_reference);<br>
+<br>
+ if (SP.isRValueReference())<br>
+ addFlag(SPDie, dwarf::DW_AT_rvalue_reference)<u></u>;<br>
+<br>
return SPDie;<br>
}<br>
<br>
<br>
Modified: llvm/trunk/lib/IR/DIBuilder.<u></u>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuilder.cpp?rev=197613&r1=197612&r2=197613&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/IR/<u></u>DIBuilder.cpp?rev=197613&r1=<u></u>197612&r2=197613&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/IR/DIBuilder.<u></u>cpp (original)<br>
+++ llvm/trunk/lib/IR/DIBuilder.<u></u>cpp Wed Dec 18 15:48:19 2013<br>
@@ -706,7 +706,8 @@ DICompositeType DIBuilder::createUnionTy<br>
<br>
/// createSubroutineType - Create subroutine type.<br>
DICompositeType DIBuilder::<u></u>createSubroutineType(DIFile File,<br>
- DIArray ParameterTypes) {<br>
+ DIArray ParameterTypes,<br>
+ unsigned Flags) {<br>
// TAG_subroutine_type is encoded in DICompositeType format.<br>
Value *Elts[] = {<br>
GetTagConstant(VMContext, dwarf::DW_TAG_subroutine_type)<u></u>,<br>
@@ -717,7 +718,7 @@ DICompositeType DIBuilder::createSubrout<br>
ConstantInt::get(Type::<u></u>getInt64Ty(VMContext), 0), // Size<br>
ConstantInt::get(Type::<u></u>getInt64Ty(VMContext), 0), // Align<br>
ConstantInt::get(Type::<u></u>getInt64Ty(VMContext), 0), // Offset<br>
- ConstantInt::get(Type::<u></u>getInt32Ty(VMContext), 0), // Flags<br>
+ ConstantInt::get(Type::<u></u>getInt32Ty(VMContext), Flags), // Flags<br>
NULL,<br>
ParameterTypes,<br>
ConstantInt::get(Type::<u></u>getInt32Ty(VMContext), 0),<br>
<br>
Modified: llvm/trunk/lib/IR/DebugInfo.<u></u>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=197613&r1=197612&r2=197613&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/IR/<u></u>DebugInfo.cpp?rev=197613&r1=<u></u>197612&r2=197613&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/IR/DebugInfo.<u></u>cpp (original)<br>
+++ llvm/trunk/lib/IR/DebugInfo.<u></u>cpp Wed Dec 18 15:48:19 2013<br>
@@ -504,6 +504,10 @@ bool DICompositeType::Verify() const {<br>
if (!fieldIsMDString(DbgNode, 14))<br>
return false;<br>
<br>
+ // A subroutine type can't be both & and &&.<br>
+ if (isLValueReference() && isRValueReference())<br>
+ return false;<br>
+<br>
return DbgNode->getNumOperands() == 15;<br>
}<br>
<br>
@@ -520,6 +524,11 @@ bool DISubprogram::Verify() const {<br>
// Containing type @ field 12.<br>
if (!fieldIsTypeRef(DbgNode, 12))<br>
return false;<br>
+<br>
+ // A subprogram can't be both & and &&.<br>
+ if (isLValueReference() && isRValueReference())<br>
+ return false;<br>
+<br>
return DbgNode->getNumOperands() == 20;<br>
}<br>
<br>
@@ -1297,6 +1306,12 @@ void DIType::printInternal(raw_<u></u>ostream &<br>
OS << " [vector]";<br>
if (isStaticMember())<br>
OS << " [static]";<br>
+<br>
+ if (isLValueReference())<br>
+ OS << " [reference]";<br>
+<br>
+ if (isRValueReference())<br>
+ OS << " [rvalue reference]";<br>
}<br>
<br>
void DIDerivedType::printInternal(<u></u>raw_ostream &OS) const {<br>
@@ -1336,6 +1351,12 @@ void DISubprogram::printInternal(<u></u>raw_ost<br>
else if (isProtected())<br>
OS << " [protected]";<br>
<br>
+ if (isLValueReference())<br>
+ OS << " [reference]";<br>
+<br>
+ if (isRValueReference())<br>
+ OS << " [rvalue reference]";<br>
+<br>
StringRef Res = getName();<br>
if (!Res.empty())<br>
OS << " [" << Res << ']';<br>
<br>
Added: llvm/trunk/test/DebugInfo/<u></u>debug-info-qualifiers.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/debug-info-qualifiers.ll?rev=197613&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/test/<u></u>DebugInfo/debug-info-<u></u>qualifiers.ll?rev=197613&view=<u></u>auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/test/DebugInfo/<u></u>debug-info-qualifiers.ll (added)<br>
+++ llvm/trunk/test/DebugInfo/<u></u>debug-info-qualifiers.ll Wed Dec 18 15:48:19 2013<br>
@@ -0,0 +1,93 @@<br>
+; Test (r)value qualifiers on C++11 non-static member functions.<br>
+; Generated from tools/clang/test/CodeGenCXX/<u></u>debug-info-qualifiers.cpp<br>
+;<br>
+; RUN: llc -filetype=obj -O0 < %s | llvm-dwarfdump - | FileCheck %s<br>
+; CHECK: DW_TAG_subroutine_type DW_CHILDREN_yes<br>
+; CHECK-NEXT: DW_AT_reference DW_FORM_flag_present<br>
+; CHECK: DW_TAG_subroutine_type DW_CHILDREN_yes<br>
+; CHECK-NEXT: DW_AT_rvalue_reference DW_FORM_flag_present<br>
+;<br>
+; CHECK: DW_TAG_subprogram<br>
+;<br>
+; CHECK: DW_TAG_subprogram<br>
+; CHECK-NOT: DW_TAG_subprogram<br>
+; CHECK: DW_AT_name {{.*}}"l"<br>
+; CHECK-NOT: DW_TAG_subprogram<br>
+; CHECK: DW_AT_reference [DW_FORM_flag_present] (true)<br>
+<br>
+; CHECK: DW_TAG_subprogram<br>
+; CHECK-NOT: DW_TAG_subprogram<br>
+; CHECK: DW_AT_name {{.*}}"r"<br>
+; CHECK-NOT: DW_TAG_subprogram<br>
+; CHECK: DW_AT_rvalue_reference [DW_FORM_flag_present] (true)<br>
+<br>
+<br>
+target datalayout = "e-i64:64-f80:128-s:64-n8:16:<u></u>32:64-S128"<br>
+target triple = "x86_64-apple-darwin"<br>
+<br>
+%class.A = type { i8 }<br>
+<br>
+; Function Attrs: nounwind<br>
+define void @_Z1gv() #0 {<br>
+ %a = alloca %class.A, align 1<br>
+ %pl = alloca { i64, i64 }, align 8<br>
+ %pr = alloca { i64, i64 }, align 8<br>
+ call void @llvm.dbg.declare(metadata !{%class.A* %a}, metadata !24), !dbg !25<br>
+ call void @llvm.dbg.declare(metadata !{{ i64, i64 }* %pl}, metadata !26), !dbg !31<br>
+ store { i64, i64 } { i64 ptrtoint (void (%class.A*)* @_ZNKR1A1lEv to i64), i64 0 }, { i64, i64 }* %pl, align 8, !dbg !31<br>
+ call void @llvm.dbg.declare(metadata !{{ i64, i64 }* %pr}, metadata !32), !dbg !35<br>
+ store { i64, i64 } { i64 ptrtoint (void (%class.A*)* @_ZNKO1A1rEv to i64), i64 0 }, { i64, i64 }* %pr, align 8, !dbg !35<br>
+ ret void, !dbg !36<br>
+}<br>
+<br>
+; Function Attrs: nounwind readnone<br>
+declare void @llvm.dbg.declare(metadata, metadata) #1<br>
+<br>
+declare void @_ZNKR1A1lEv(%class.A*)<br>
+<br>
+declare void @_ZNKO1A1rEv(%class.A*)<br>
+<br>
+attributes #0 = { nounwind }<br>
+attributes #1 = { nounwind readnone }<br>
+<br>
+!<a href="http://llvm.dbg.cu" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
+!llvm.module.flags = !{!21, !22}<br>
+!llvm.ident = !{!23}<br>
+<br>
+!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.5 ", i1 false, metadata !"", i32 0, metadata !2, metadata !3, metadata !16, metadata !2, metadata !2, metadata !""} ; [ DW_TAG_compile_unit ] [] [DW_LANG_C_plus_plus]<br>
+!1 = metadata !{metadata !"", metadata !""}<br>
+!2 = metadata !{i32 0}<br>
+!3 = metadata !{metadata !4}<br>
+!4 = metadata !{i32 786434, metadata !5, null, metadata !"A", i32 2, i64 8, i64 8, i32 0, i32 0, null, metadata !6, i32 0, null, null, metadata !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 2, size 8, align 8, offset 0] [def] [from ]<br>
+!5 = metadata !{metadata !"debug-info-qualifiers.cpp", metadata !""}<br>
+!6 = metadata !{metadata !7, metadata !13}<br>
+!7 = metadata !{i32 786478, metadata !5, metadata !"_ZTS1A", metadata !"l", metadata !"l", metadata !"_ZNKR1A1lEv", i32 5, metadata !8, i1 false, i1 false, i32 0, i32 0, null, i32 16640, i1 false, null, null, i32 0, metadata !12, i32 5} ; [ DW_TAG_subprogram ] [line 5] [reference] [l]<br>
+!8 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 16384, null, metadata !9, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [reference] [from ]<br>
+!9 = metadata !{null, metadata !10}<br>
+!10 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !11} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from ]<br>
+!11 = metadata !{i32 786470, null, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, metadata !"_ZTS1A"} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from _ZTS1A]<br>
+!12 = metadata !{i32 786468}<br>
+!13 = metadata !{i32 786478, metadata !5, metadata !"_ZTS1A", metadata !"r", metadata !"r", metadata !"_ZNKO1A1rEv", i32 7, metadata !14, i1 false, i1 false, i32 0, i32 0, null, i32 33024, i1 false, null, null, i32 0, metadata !15, i32 7} ; [ DW_TAG_subprogram ] [line 7] [rvalue reference] [r]<br>
+!14 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 32768, null, metadata !9, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [rvalue reference] [from ]<br>
+!15 = metadata !{i32 786468}<br>
+!16 = metadata !{metadata !17}<br>
+!17 = metadata !{i32 786478, metadata !5, metadata !18, metadata !"g", metadata !"g", metadata !"_Z1gv", i32 10, metadata !19, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_Z1gv, null, null, metadata !2, i32 10} ; [ DW_TAG_subprogram ] [line 10] [def] [g]<br>
+!18 = metadata !{i32 786473, metadata !5} ; [ DW_TAG_file_type ]<br>
+!19 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !20, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]<br>
+!20 = metadata !{null}<br>
+!21 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}<br>
+!22 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}<br>
+!23 = metadata !{metadata !"clang version 3.5 "}<br>
+!24 = metadata !{i32 786688, metadata !17, metadata !"a", metadata !18, i32 11, metadata !4, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [a] [line 11]<br>
+!25 = metadata !{i32 11, i32 0, metadata !17, null}<br>
+!26 = metadata !{i32 786688, metadata !17, metadata !"pl", metadata !18, i32 16, metadata !27, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [pl] [line 16]<br>
+!27 = metadata !{i32 786463, null, null, null, i32 0, i64 0, i64 0, i64 0, i32 0, metadata !28, metadata !"_ZTS1A"} ; [ DW_TAG_ptr_to_member_type ] [line 0, size 0, align 0, offset 0] [from ]<br>
+!28 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 16384, null, metadata !29, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [reference] [from ]<br>
+!29 = metadata !{null, metadata !30}<br>
+!30 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A]<br>
+!31 = metadata !{i32 16, i32 0, metadata !17, null}<br>
+!32 = metadata !{i32 786688, metadata !17, metadata !"pr", metadata !18, i32 21, metadata !33, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [pr] [line 21]<br>
+!33 = metadata !{i32 786463, null, null, null, i32 0, i64 0, i64 0, i64 0, i32 0, metadata !34, metadata !"_ZTS1A"} ; [ DW_TAG_ptr_to_member_type ] [line 0, size 0, align 0, offset 0] [from ]<br>
+!34 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 32768, null, metadata !29, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [rvalue reference] [from ]<br>
+!35 = metadata !{i32 21, i32 0, metadata !17, null}<br>
+!36 = metadata !{i32 22, i32 0, metadata !17, null}<br>
<br>
<br>
______________________________<u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
</blockquote>