At this point I'm pretty much given up bumping the metadata version number unless I'm really changing the format. It's not meant to be portable and there are so many changes required that it's pretty silly as we're implementing (say) c++11 support or anything else that we should worry about the version number. When it gets to a point where we're happy with the metadata format and have decent debug info coming out (i.e. most changes aren't changing the format of the metadata) we can worry about bumping the version number or setting one at all.<div>
<br></div><div>-eric<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 15, 2012 at 8:09 AM, Robinson, Paul <span dir="ltr"><<a href="mailto:Paul.Robinson@am.sony.com" target="_blank">Paul.Robinson@am.sony.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I know it's been reverted already, but doesn't adding a field to a metdata record<br>
mean we should bump the metadata version number?  (If not, what would the criteria be?)<br>
--paulr<br>
________________________________________<br>
From: <a href="mailto:llvm-commits-bounces@cs.uiuc.edu">llvm-commits-bounces@cs.uiuc.edu</a> [<a href="mailto:llvm-commits-bounces@cs.uiuc.edu">llvm-commits-bounces@cs.uiuc.edu</a>] on behalf of Bill Wendling [<a href="mailto:isanbard@gmail.com">isanbard@gmail.com</a>]<br>

Sent: Monday, November 12, 2012 6:31 PM<br>
To: <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
Subject: [llvm-commits] [llvm] r167806 - in /llvm/trunk: include/llvm/DIBuilder.h include/llvm/DebugInfo.h lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp lib/VMCore/DIBuilder.cpp test/CodeGen/X86/dbg-subrange.ll<br>
<div class="HOEnZb"><div class="h5"><br>
Author: void<br>
Date: Mon Nov 12 20:31:47 2012<br>
New Revision: 167806<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=167806&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=167806&view=rev</a><br>
Log:<br>
Use the 'count' attribute instead of the 'upper_bound' attribute.<br>
<br>
If we have a type 'int a[1]' and a type 'int b[0]', the generated DWARF is the<br>
same for both of them because we use the 'upper_bound' attribute. Instead use<br>
the 'count' attrbute, which gives the correct number of elements in the array.<br>
<rdar://problem/12566646><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/DIBuilder.h<br>
    llvm/trunk/include/llvm/DebugInfo.h<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br>
    llvm/trunk/lib/VMCore/DIBuilder.cpp<br>
    llvm/trunk/test/CodeGen/X86/dbg-subrange.ll<br>
<br>
Modified: llvm/trunk/include/llvm/DIBuilder.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DIBuilder.h?rev=167806&r1=167805&r2=167806&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DIBuilder.h?rev=167806&r1=167805&r2=167806&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm/DIBuilder.h (original)<br>
+++ llvm/trunk/include/llvm/DIBuilder.h Mon Nov 12 20:31:47 2012<br>
@@ -371,7 +371,7 @@<br>
<br>
     /// getOrCreateSubrange - Create a descriptor for a value range.  This<br>
     /// implicitly uniques the values returned.<br>
-    DISubrange getOrCreateSubrange(int64_t Lo, int64_t Hi);<br>
+    DISubrange getOrCreateSubrange(int64_t Lo, int64_t Hi, uint64_t Count);<br>
<br>
     /// createGlobalVariable - Create a new descriptor for the specified global.<br>
     /// @param Name        Name of the variable.<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo.h?rev=167806&r1=167805&r2=167806&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo.h?rev=167806&r1=167805&r2=167806&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo.h Mon Nov 12 20:31:47 2012<br>
@@ -143,6 +143,7 @@<br>
<br>
     uint64_t getLo() const { return getUInt64Field(1); }<br>
     uint64_t getHi() const { return getUInt64Field(2); }<br>
+    uint64_t getCount() const { return getUInt64Field(3); }<br>
   };<br>
<br>
   /// DIArray - This descriptor holds an array of descriptors.<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=167806&r1=167805&r2=167806&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=167806&r1=167805&r2=167806&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Mon Nov 12 20:31:47 2012<br>
@@ -1252,6 +1252,7 @@<br>
   addDIEEntry(DW_Subrange, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IndexTy);<br>
   uint64_t L = SR.getLo();<br>
   uint64_t H = SR.getHi();<br>
+  uint64_t C = SR.getCount();<br>
<br>
   // The L value defines the lower bounds which is typically zero for C/C++. The<br>
   // H value is the upper bounds.  Values are 64 bit.  H - L + 1 is the size<br>
@@ -1265,7 +1266,7 @@<br>
   }<br>
   if (L)<br>
     addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, 0, L);<br>
-  addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, 0, H);<br>
+  addUInt(DW_Subrange, dwarf::DW_AT_count, 0, C);<br>
   Buffer.addChild(DW_Subrange);<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/VMCore/DIBuilder.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/DIBuilder.cpp?rev=167806&r1=167805&r2=167806&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/DIBuilder.cpp?rev=167806&r1=167805&r2=167806&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/VMCore/DIBuilder.cpp (original)<br>
+++ llvm/trunk/lib/VMCore/DIBuilder.cpp Mon Nov 12 20:31:47 2012<br>
@@ -741,11 +741,13 @@<br>
<br>
 /// getOrCreateSubrange - Create a descriptor for a value range.  This<br>
 /// implicitly uniques the values returned.<br>
-DISubrange DIBuilder::getOrCreateSubrange(int64_t Lo, int64_t Hi) {<br>
+DISubrange DIBuilder::getOrCreateSubrange(int64_t Lo, int64_t Hi,<br>
+                                          uint64_t Count) {<br>
   Value *Elts[] = {<br>
     GetTagConstant(VMContext, dwarf::DW_TAG_subrange_type),<br>
     ConstantInt::get(Type::getInt64Ty(VMContext), Lo),<br>
-    ConstantInt::get(Type::getInt64Ty(VMContext), Hi)<br>
+    ConstantInt::get(Type::getInt64Ty(VMContext), Hi),<br>
+    ConstantInt::get(Type::getInt64Ty(VMContext), Count)<br>
   };<br>
<br>
   return DISubrange(MDNode::get(VMContext, Elts));<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/dbg-subrange.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dbg-subrange.ll?rev=167806&r1=167805&r2=167806&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dbg-subrange.ll?rev=167806&r1=167805&r2=167806&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/dbg-subrange.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/dbg-subrange.ll Mon Nov 12 20:31:47 2012<br>
@@ -4,7 +4,7 @@<br>
 target triple = "x86_64-apple-macosx10.7.2"<br>
<br>
 @s = common global [4294967296 x i8] zeroinitializer, align 16<br>
-;CHECK: .long  4294967295<br>
+;CHECK: .quad 4294967296   ## DW_AT_count<br>
<br>
 define void @bar() nounwind uwtable ssp {<br>
 entry:<br>
@@ -31,7 +31,7 @@<br>
 !14 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64 34359738368, i64 8, i32 0, i32 0, metadata !15, metadata !16, i32 0, i32 0} ; [ DW_TAG_array_type ]<br>
 !15 = metadata !{i32 720932, null, metadata !"char", null, i32 0, i64 8, i64 8, i64 0, i32 0, i32 6} ; [ DW_TAG_base_type ]<br>
 !16 = metadata !{metadata !17}<br>
-!17 = metadata !{i32 720929, i64 0, i64 4294967295} ; [ DW_TAG_subrange_type ]<br>
+!17 = metadata !{i32 720929, i64 0, i64 4294967295, i64 4294967296} ; [ DW_TAG_subrange_type ]<br>
 !18 = metadata !{i32 5, i32 3, metadata !19, null}<br>
 !19 = metadata !{i32 720907, metadata !5, i32 4, i32 1, metadata !6, i32 0} ; [ DW_TAG_lexical_block ]<br>
 !20 = metadata !{i32 6, i32 1, metadata !19, null}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">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/mailman/listinfo/llvm-commits</a></div></div></blockquote></div><br></div></div>