diff options
| author | Chris Lattner <sabre@nondot.org> | 2001-10-03 19:35:04 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2001-10-03 19:35:04 +0000 | 
| commit | e504b4395bc3b0d9dc77aa5986fa323bc3769adf (patch) | |
| tree | 07e2249759455e913d613c9bb2d4c2a0638965b5 /llvm/lib | |
| parent | 25033250278efdbdbe8a7841be31b35d56483cd9 (diff) | |
| download | bcm5719-llvm-e504b4395bc3b0d9dc77aa5986fa323bc3769adf.tar.gz bcm5719-llvm-e504b4395bc3b0d9dc77aa5986fa323bc3769adf.zip | |
Support multiple global's definitions
llvm-svn: 711
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/AsmParser/llvmAsmParser.y | 36 | 
1 files changed, 13 insertions, 23 deletions
| diff --git a/llvm/lib/AsmParser/llvmAsmParser.y b/llvm/lib/AsmParser/llvmAsmParser.y index f2ae016de3b..6edd2797c2a 100644 --- a/llvm/lib/AsmParser/llvmAsmParser.y +++ b/llvm/lib/AsmParser/llvmAsmParser.y @@ -103,7 +103,6 @@ static struct PerMethodInfo {  } CurMeth;  // Info for the current method...  static bool inMethodScope() { return CurMeth.CurrentMethod != 0; } -static bool inModuleScope() { return CurMeth.CurrentMethod == 0; }  //===----------------------------------------------------------------------===// @@ -457,25 +456,18 @@ static bool setValueName(Value *V, char *NameStr) {        // cerr << "Type: " << Ty->getDescription() << " != "        //      << cast<const Type>(V)->getDescription() << "!\n";      } else if (GlobalVariable *EGV = dyn_cast<GlobalVariable>(Existing)) { -      GlobalVariable *GV = cast<GlobalVariable>(V); - -      // 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. -      // -      // This can only be done if the const'ness of the vars is the same. -      // -      if (EGV->isConstant() == GV->isConstant() && -          (!EGV->hasInitializer() || !GV->hasInitializer() || -           EGV->getInitializer() == GV->getInitializer())) { - -        // Make sure the existing global version gets the initializer! -        if (GV->hasInitializer() && !EGV->hasInitializer()) -          EGV->setInitializer(GV->getInitializer()); - -        return true;   // They are equivalent! +      if (GlobalVariable *GV = dyn_cast<GlobalVariable>(V)) { +        if (EGV->isConstant() == GV->isConstant() && +            (!EGV->hasInitializer() || !GV->hasInitializer() || +             EGV->getInitializer() == GV->getInitializer())) { + +          // Make sure the existing global version gets the initializer! +          if (GV->hasInitializer() && !EGV->hasInitializer()) +            EGV->setInitializer(GV->getInitializer()); +           +          return true;   // They are equivalent! +        }        } -            }      ThrowException("Redefinition of value name '" + Name + "' in the '" +  		   V->getType()->getDescription() + "' type plane!"); @@ -1167,12 +1159,10 @@ ResolvedVal : Types ValueRef {  BasicBlockList : BasicBlockList BasicBlock { -    $1->getBasicBlocks().push_back($2); -    $$ = $1; +    ($$ = $1)->getBasicBlocks().push_back($2);    }    | MethodHeader BasicBlock { // Do not allow methods with 0 basic blocks    -    $$ = $1;                  // in them... -    $1->getBasicBlocks().push_back($2); +    ($$ = $1)->getBasicBlocks().push_back($2);    } | 

