Fix bug: Assembler/2003-03-03-DuplicateConstant.ll
authorChris Lattner <sabre@nondot.org>
Mon, 3 Mar 2003 23:28:55 +0000 (23:28 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 3 Mar 2003 23:28:55 +0000 (23:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5692 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/llvmAsmParser.y

index fd86d50ead85cc73db40ab68a800a420fb8d5f23..f2135a7ad25383cf41aa7a15c5e6c327e8b784d7 100644 (file)
@@ -501,10 +501,12 @@ static bool setValueName(Value *V, char *NameStr) {
 
     // Otherwise, we are a simple redefinition of a value, check to see if it
     // is defined the same as the old one...
-    if (const Type *Ty = dyn_cast<const Type>(Existing)) {
-      if (Ty == cast<const Type>(V)) return true;  // Yes, it's equal.
+    if (const Type *Ty = dyn_cast<Type>(Existing)) {
+      if (Ty == cast<Type>(V)) return true;  // Yes, it's equal.
       // std::cerr << "Type: " << Ty->getDescription() << " != "
       //      << cast<const Type>(V)->getDescription() << "!\n";
+    } else if (const Constant *C = dyn_cast<Constant>(Existing)) {
+      if (C == V) return true;      // Constants are equal to themselves
     } else if (GlobalVariable *EGV = dyn_cast<GlobalVariable>(Existing)) {
       // We are allowed to redefine a global variable in two circumstances:
       // 1. If at least one of the globals is uninitialized or 
@@ -1097,8 +1099,8 @@ FunctionList : FunctionList Function {
 
 // ConstPool - Constants with optional names assigned to them.
 ConstPool : ConstPool OptAssign CONST ConstVal { 
-    if (setValueName($4, $2)) { assert(0 && "No redefinitions allowed!"); }
-    InsertValue($4);
+    if (!setValueName($4, $2))
+      InsertValue($4);
   }
   | ConstPool OptAssign TYPE TypesV {  // Types can be defined in the const pool
     // Eagerly resolve types.  This is not an optimization, this is a