forked from OSchip/llvm-project
For PR645:
Keep track of global constant and variable definitions for eventual use in resolving conflicts between global and local symbol usage. llvm-svn: 32234
This commit is contained in:
parent
844668d2ef
commit
c77c7157f8
|
@ -60,6 +60,12 @@ struct TypeInfo {
|
||||||
|
|
||||||
void destroy() const { delete newTy; }
|
void destroy() const { delete newTy; }
|
||||||
|
|
||||||
|
TypeInfo clone() const {
|
||||||
|
TypeInfo result = *this;
|
||||||
|
result.newTy = new std::string(*newTy);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
Types getElementType() const { return elemTy; }
|
Types getElementType() const { return elemTy; }
|
||||||
|
|
||||||
bool isSigned() const {
|
bool isSigned() const {
|
||||||
|
|
|
@ -39,6 +39,7 @@ typedef std::vector<TypeInfo> TypeVector;
|
||||||
static TypeVector EnumeratedTypes;
|
static TypeVector EnumeratedTypes;
|
||||||
typedef std::map<std::string,TypeInfo> TypeMap;
|
typedef std::map<std::string,TypeInfo> TypeMap;
|
||||||
static TypeMap NamedTypes;
|
static TypeMap NamedTypes;
|
||||||
|
static TypeMap Globals;
|
||||||
|
|
||||||
void destroy(ValueList* VL) {
|
void destroy(ValueList* VL) {
|
||||||
while (!VL->empty()) {
|
while (!VL->empty()) {
|
||||||
|
@ -777,29 +778,37 @@ ConstPool : ConstPool OptAssign TYPE TypesV {
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| ConstPool OptAssign OptLinkage GlobalType ConstVal GlobalVarAttributes {
|
| ConstPool OptAssign OptLinkage GlobalType ConstVal GlobalVarAttributes {
|
||||||
if (!$2->empty())
|
if (!$2->empty()) {
|
||||||
*O << *$2 << " = ";
|
*O << *$2 << " = ";
|
||||||
|
Globals[*$2] = $5.type.clone();
|
||||||
|
}
|
||||||
*O << *$3 << " " << *$4 << " " << *$5.cnst << " " << *$6 << "\n";
|
*O << *$3 << " " << *$4 << " " << *$5.cnst << " " << *$6 << "\n";
|
||||||
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| ConstPool OptAssign External GlobalType Types GlobalVarAttributes {
|
| ConstPool OptAssign External GlobalType Types GlobalVarAttributes {
|
||||||
if (!$2->empty())
|
if (!$2->empty()) {
|
||||||
*O << *$2 << " = ";
|
*O << *$2 << " = ";
|
||||||
|
Globals[*$2] = $5.clone();
|
||||||
|
}
|
||||||
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
||||||
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| ConstPool OptAssign DLLIMPORT GlobalType Types GlobalVarAttributes {
|
| ConstPool OptAssign DLLIMPORT GlobalType Types GlobalVarAttributes {
|
||||||
if (!$2->empty())
|
if (!$2->empty()) {
|
||||||
*O << *$2 << " = ";
|
*O << *$2 << " = ";
|
||||||
|
Globals[*$2] = $5.clone();
|
||||||
|
}
|
||||||
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
||||||
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
}
|
}
|
||||||
| ConstPool OptAssign EXTERN_WEAK GlobalType Types GlobalVarAttributes {
|
| ConstPool OptAssign EXTERN_WEAK GlobalType Types GlobalVarAttributes {
|
||||||
if (!$2->empty())
|
if (!$2->empty()) {
|
||||||
*O << *$2 << " = ";
|
*O << *$2 << " = ";
|
||||||
|
Globals[*$2] = $5.clone();
|
||||||
|
}
|
||||||
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
*O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
|
||||||
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
|
|
Loading…
Reference in New Issue