For PR645:
authorReid Spencer <rspencer@reidspencer.com>
Tue, 5 Dec 2006 19:18:29 +0000 (19:18 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Tue, 5 Dec 2006 19:18:29 +0000 (19:18 +0000)
Keep track of global constant and variable definitions for eventual use
in resolving conflicts between global and local symbol usage.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32234 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-upgrade/ParserInternals.h
tools/llvm-upgrade/UpgradeParser.y

index df9d2a80f3761d1001ad16b0dd1bdcb681c405ce..7fe022efc1d30d39e610c9ab3d1730c8c05597a3 100644 (file)
@@ -60,6 +60,12 @@ struct TypeInfo {
 
   void destroy() const { delete newTy; }
 
+  TypeInfo clone() const { 
+    TypeInfo result = *this; 
+    result.newTy = new std::string(*newTy);
+    return result;
+  }
+
   Types getElementType() const { return elemTy; }
 
   bool isSigned() const {
index 8aa2beb1a74a2a3cd0fd64448093743aee50002a..fd1c293ec309f2e1505ec3c8ebd903213274cd47 100644 (file)
@@ -39,6 +39,7 @@ typedef std::vector<TypeInfo> TypeVector;
 static TypeVector EnumeratedTypes;
 typedef std::map<std::string,TypeInfo> TypeMap;
 static TypeMap NamedTypes;
+static TypeMap Globals;
 
 void destroy(ValueList* VL) {
   while (!VL->empty()) {
@@ -777,29 +778,37 @@ ConstPool : ConstPool OptAssign TYPE TypesV {
     $$ = 0;
   }
   | ConstPool OptAssign OptLinkage GlobalType ConstVal  GlobalVarAttributes {
-    if (!$2->empty())
+    if (!$2->empty()) {
       *O << *$2 << " = ";
+      Globals[*$2] = $5.type.clone();
+    }
     *O << *$3 << " " << *$4 << " " << *$5.cnst << " " << *$6 << "\n";
     delete $2; delete $3; delete $4; $5.destroy(); delete $6; 
     $$ = 0;
   }
   | ConstPool OptAssign External GlobalType Types  GlobalVarAttributes {
-    if (!$2->empty())
+    if (!$2->empty()) {
       *O << *$2 << " = ";
+      Globals[*$2] = $5.clone();
+    }
     *O <<  *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
     delete $2; delete $3; delete $4; $5.destroy(); delete $6;
     $$ = 0;
   }
   | ConstPool OptAssign DLLIMPORT GlobalType Types  GlobalVarAttributes {
-    if (!$2->empty())
+    if (!$2->empty()) {
       *O << *$2 << " = ";
+      Globals[*$2] = $5.clone();
+    }
     *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
     delete $2; delete $3; delete $4; $5.destroy(); delete $6;
     $$ = 0;
   }
   | ConstPool OptAssign EXTERN_WEAK GlobalType Types  GlobalVarAttributes {
-    if (!$2->empty())
+    if (!$2->empty()) {
       *O << *$2 << " = ";
+      Globals[*$2] = $5.clone();
+    }
     *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
     delete $2; delete $3; delete $4; $5.destroy(); delete $6;
     $$ = 0;