[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