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

Reid Spencer reid at x10sys.com
Fri Jan 5 13:50:53 PST 2007



Changes in directory llvm/lib/AsmParser:

llvmAsmParser.y updated: 1.299 -> 1.300
---
Log message:

For PR1077: http://llvm.org/PR1077 :
Disallow merging of dupliate global variables. It is now illegal to declare
or define two global variables of the same name and same type. llvm-gcc3 is 
dead in 2.0 and llvm-gcc4 doesn't have that problem nor need the hack.


---
Diffs of the changes:  (+7 -26)

 llvmAsmParser.y |   33 +++++++--------------------------
 1 files changed, 7 insertions(+), 26 deletions(-)


Index: llvm/lib/AsmParser/llvmAsmParser.y
diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.299 llvm/lib/AsmParser/llvmAsmParser.y:1.300
--- llvm/lib/AsmParser/llvmAsmParser.y:1.299	Fri Jan  5 11:06:19 2007
+++ llvm/lib/AsmParser/llvmAsmParser.y	Fri Jan  5 15:50:38 2007
@@ -635,8 +635,8 @@
     assert(inFunctionScope() && "Must be in function scope!");
     SymbolTable &ST = CurFun.CurrentFunction->getSymbolTable();
     if (ST.lookup(V->getType(), Name)) {
-      GenerateError("Redefinition of value named '" + Name + "' in the '" +
-                     V->getType()->getDescription() + "' type plane!");
+      GenerateError("Redefinition of value '" + Name + "' of type '" +
+                     V->getType()->getDescription() + "'!");
       return;
     }
 
@@ -687,32 +687,13 @@
   }
 
   // If this global has a name, check to see if there is already a definition
-  // of this global in the module.  If so, merge as appropriate.  Note that
-  // this is really just a hack around problems in the CFE.  :(
+  // of this global in the module.  If so, it is an error.
   if (!Name.empty()) {
     // We are a simple redefinition of a value, check to see if it is defined
     // the same as the old one.
-    if (GlobalVariable *EGV =
-                CurModule.CurrentModule->getGlobalVariable(Name, Ty)) {
-      // We are allowed to redefine a global variable in two circumstances:
-      // 1. If at least one of the globals is uninitialized or
-      // 2. If both initializers have the same value.
-      //
-      if (!EGV->hasInitializer() || !Initializer ||
-          EGV->getInitializer() == Initializer) {
-
-        // Make sure the existing global version gets the initializer!  Make
-        // sure that it also gets marked const if the new version is.
-        if (Initializer && !EGV->hasInitializer())
-          EGV->setInitializer(Initializer);
-        if (isConstantGlobal)
-          EGV->setConstant(true);
-        EGV->setLinkage(Linkage);
-        return EGV;
-      }
-
+    if (CurModule.CurrentModule->getGlobalVariable(Name, Ty)) {
       GenerateError("Redefinition of global variable named '" + Name +
-                     "' in the '" + Ty->getDescription() + "' type plane!");
+                     "' of type '" + Ty->getDescription() + "'!");
       return 0;
     }
   }
@@ -767,8 +748,8 @@
     if (Existing == T) return true;  // Yes, it's equal.
 
     // Any other kind of (non-equivalent) redefinition is an error.
-    GenerateError("Redefinition of type named '" + Name + "' in the '" +
-                   T->getDescription() + "' type plane!");
+    GenerateError("Redefinition of type named '" + Name + "' of type '" +
+                   T->getDescription() + "'!");
   }
 
   return false;






More information about the llvm-commits mailing list