[llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y

Reid Spencer reid at x10sys.com
Wed Dec 20 09:20:29 PST 2006



Changes in directory llvm/lib/AsmParser:

llvmAsmParser.y updated: 1.289 -> 1.290
---
Log message:

Allow negative constants for unsigned integers and unsigned constants 
greater than MAX_INT64 for signed integers. This is now valid and is just
waiting for the distinction between signed and unsigned to go away.


---
Diffs of the changes:  (+13 -11)

 llvmAsmParser.y |   24 +++++++++++++-----------
 1 files changed, 13 insertions(+), 11 deletions(-)


Index: llvm/lib/AsmParser/llvmAsmParser.y
diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.289 llvm/lib/AsmParser/llvmAsmParser.y:1.290
--- llvm/lib/AsmParser/llvmAsmParser.y:1.289	Fri Dec  8 12:06:15 2006
+++ llvm/lib/AsmParser/llvmAsmParser.y	Wed Dec 20 11:20:09 2006
@@ -926,7 +926,6 @@
 
 // EUINT64VAL - A positive number within uns. long long range
 %token <UInt64Val> EUINT64VAL
-%type  <SInt64Val> EINT64VAL
 
 %token  <SIntVal>   SINTVAL   // Signed 32 bit ints...
 %token  <UIntVal>   UINTVAL   // Unsigned 32 bit ints...
@@ -995,15 +994,6 @@
   CHECK_FOR_ERROR
 };
 
-
-EINT64VAL : ESINT64VAL;      // These have same type and can't cause problems...
-EINT64VAL : EUINT64VAL {
-  if ($1 > (uint64_t)INT64_MAX)     // Outside of my range!
-    GEN_ERROR("Value too large for type!");
-  $$ = (int64_t)$1;
-  CHECK_FOR_ERROR
-};
-
 // Operations that are notably excluded from this list include:
 // RET, BR, & SWITCH because they end basic blocks and are treated specially.
 //
@@ -1486,7 +1476,13 @@
     delete $1;
     CHECK_FOR_ERROR
   }
-  | SIntType EINT64VAL {      // integral constants
+  | SIntType ESINT64VAL {      // integral constants
+    if (!ConstantInt::isValueValidForType($1, $2))
+      GEN_ERROR("Constant value doesn't fit in type!");
+    $$ = ConstantInt::get($1, $2);
+    CHECK_FOR_ERROR
+  }
+  | SIntType EUINT64VAL {      // integral constants
     if (!ConstantInt::isValueValidForType($1, $2))
       GEN_ERROR("Constant value doesn't fit in type!");
     $$ = ConstantInt::get($1, $2);
@@ -1498,6 +1494,12 @@
     $$ = ConstantInt::get($1, $2);
     CHECK_FOR_ERROR
   }
+  | UIntType ESINT64VAL {
+    if (!ConstantInt::isValueValidForType($1, $2))
+      GEN_ERROR("Constant value doesn't fit in type!");
+    $$ = ConstantInt::get($1, $2);
+    CHECK_FOR_ERROR
+  }
   | BOOL TRUETOK {                      // Boolean constants
     $$ = ConstantBool::getTrue();
     CHECK_FOR_ERROR






More information about the llvm-commits mailing list