]> granicus.if.org Git - llvm/commitdiff
IR: Allow 32-bits for lines in debug location
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 6 Feb 2015 22:50:13 +0000 (22:50 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 6 Feb 2015 22:50:13 +0000 (22:50 +0000)
Remove unnecessary restriction of 24-bits for line numbers in
`MDLocation`.

The rest of the debug info schema (with the exception of local
variables) uses 32-bits for line numbers.  As I introduce the
specialized nodes, it makes sense to canonicalize on one size or the
other.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228455 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/LLParser.cpp
lib/IR/DebugInfoMetadata.cpp
test/Assembler/invalid-mdlocation-overflow-line.ll
test/Assembler/mdlocation.ll
unittests/IR/MetadataTest.cpp

index 65627097fdf2dcd378b3c7c8d47b27cb12a2d445..6bf3d803a21a60236f681dbbe0a3aca12250628f 100644 (file)
@@ -2946,7 +2946,7 @@ struct MDUnsignedField : public MDFieldImpl<uint64_t> {
       : ImplTy(Default), Max(Max) {}
 };
 struct LineField : public MDUnsignedField {
-  LineField() : MDUnsignedField(0, UINT32_MAX >> 8) {}
+  LineField() : MDUnsignedField(0, UINT32_MAX) {}
 };
 struct ColumnField : public MDUnsignedField {
   ColumnField() : MDUnsignedField(0, UINT16_MAX) {}
index 467d21ad36ade826c92a53f3b0799a8266061f98..c540cc45a61a18cb4fd50c26f6e1a2c8835940f8 100644 (file)
@@ -24,19 +24,12 @@ MDLocation::MDLocation(LLVMContext &C, StorageType Storage, unsigned Line,
          "Expected a scope and optional inlined-at");
 
   // Set line and column.
-  assert(Line < (1u << 24) && "Expected 24-bit line");
   assert(Column < (1u << 16) && "Expected 16-bit column");
 
   SubclassData32 = Line;
   SubclassData16 = Column;
 }
 
-static void adjustLine(unsigned &Line) {
-  // Set to unknown on overflow.  Still use 24 bits for now.
-  if (Line >= (1u << 24))
-    Line = 0;
-}
-
 static void adjustColumn(unsigned &Column) {
   // Set to unknown on overflow.  We only have 16 bits to play with here.
   if (Column >= (1u << 16))
@@ -47,8 +40,7 @@ MDLocation *MDLocation::getImpl(LLVMContext &Context, unsigned Line,
                                 unsigned Column, Metadata *Scope,
                                 Metadata *InlinedAt, StorageType Storage,
                                 bool ShouldCreate) {
-  // Fixup line/column.
-  adjustLine(Line);
+  // Fixup column.
   adjustColumn(Column);
 
   if (Storage == Uniqued) {
index 8e19f6919bf9dd823567e49c4a06965636192693..535b4c9a5c93dce694c03cf3654a0e08ef9f1955 100644 (file)
@@ -3,7 +3,7 @@
 !0 = !{}
 
 ; CHECK-NOT: error
-!1 = !MDLocation(line: 16777215, scope: !0)
+!1 = !MDLocation(line: 4294967295, scope: !0)
 
-; CHECK: <stdin>:[[@LINE+1]]:24: error: value for 'line' too large, limit is 16777215
-!2 = !MDLocation(line: 16777216, scope: !0)
+; CHECK: <stdin>:[[@LINE+1]]:24: error: value for 'line' too large, limit is 4294967295
+!2 = !MDLocation(line: 4294967296, scope: !0)
index c0a7b24cc7525264616f757aa05b9b68809c5738..e095d900d648058e2139605c7b467ce436958f24 100644 (file)
@@ -19,5 +19,5 @@
 !5 = !MDLocation(scope: !0)
 !6 = !MDLocation(scope: !0, column: 0, line: 0)
 
-; CHECK-NEXT: !4 = !MDLocation(line: 16777215, column: 65535, scope: !0)
-!7 = !MDLocation(line: 16777215, column: 65535, scope: !0)
+; CHECK-NEXT: !4 = !MDLocation(line: 4294967295, column: 65535, scope: !0)
+!7 = !MDLocation(line: 4294967295, column: 65535, scope: !0)
index 8282017ed0eb11b93f8aef81737647d015fbfad1..ce55d954fb7f9d4ad0a76c673fc1123d025660b6 100644 (file)
@@ -538,21 +538,20 @@ TEST_F(MDLocationTest, Overflow) {
     EXPECT_EQ(2u, L->getLine());
     EXPECT_EQ(7u, L->getColumn());
   }
-  unsigned U24 = 1u << 24;
   unsigned U16 = 1u << 16;
   {
-    MDLocation *L = MDLocation::get(Context, U24 - 1, U16 - 1, N);
-    EXPECT_EQ(U24 - 1, L->getLine());
+    MDLocation *L = MDLocation::get(Context, UINT32_MAX, U16 - 1, N);
+    EXPECT_EQ(UINT32_MAX, L->getLine());
     EXPECT_EQ(U16 - 1, L->getColumn());
   }
   {
-    MDLocation *L = MDLocation::get(Context, U24, U16, N);
-    EXPECT_EQ(0u, L->getLine());
+    MDLocation *L = MDLocation::get(Context, UINT32_MAX, U16, N);
+    EXPECT_EQ(UINT32_MAX, L->getLine());
     EXPECT_EQ(0u, L->getColumn());
   }
   {
-    MDLocation *L = MDLocation::get(Context, U24 + 1, U16 + 1, N);
-    EXPECT_EQ(0u, L->getLine());
+    MDLocation *L = MDLocation::get(Context, UINT32_MAX, U16 + 1, N);
+    EXPECT_EQ(UINT32_MAX, L->getLine());
     EXPECT_EQ(0u, L->getColumn());
   }
 }