mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
Use a std::string rather than a dynamically allocated char* buffer.
This affords us to use std::string's allocation routines and use the destructor for the memory management. Switching to that also means that we can use operator==(const std::string&, const char *) to perform the string comparison rather than resorting to libc functionality (i.e. strcmp). Patch by Saleem Abdulrasool! Differential Revision: http://llvm-reviews.chandlerc.com/D230 llvm-svn: 171042
This commit is contained in:
parent
94a94e9500
commit
c41131afed
@ -206,11 +206,7 @@ ARMConstantPoolSymbol::ARMConstantPoolSymbol(LLVMContext &C, const char *s,
|
||||
bool AddCurrentAddress)
|
||||
: ARMConstantPoolValue(C, id, ARMCP::CPExtSymbol, PCAdj, Modifier,
|
||||
AddCurrentAddress),
|
||||
S(strdup(s)) {}
|
||||
|
||||
ARMConstantPoolSymbol::~ARMConstantPoolSymbol() {
|
||||
free(const_cast<void*>(reinterpret_cast<const void *>(S)));
|
||||
}
|
||||
S(s) {}
|
||||
|
||||
ARMConstantPoolSymbol *
|
||||
ARMConstantPoolSymbol::Create(LLVMContext &C, const char *s,
|
||||
@ -218,14 +214,6 @@ ARMConstantPoolSymbol::Create(LLVMContext &C, const char *s,
|
||||
return new ARMConstantPoolSymbol(C, s, ID, PCAdj, ARMCP::no_modifier, false);
|
||||
}
|
||||
|
||||
static bool CPV_streq(const char *S1, const char *S2) {
|
||||
if (S1 == S2)
|
||||
return true;
|
||||
if (S1 && S2 && strcmp(S1, S2) == 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
int ARMConstantPoolSymbol::getExistingMachineCPValue(MachineConstantPool *CP,
|
||||
unsigned Alignment) {
|
||||
unsigned AlignMask = Alignment - 1;
|
||||
@ -238,7 +226,7 @@ int ARMConstantPoolSymbol::getExistingMachineCPValue(MachineConstantPool *CP,
|
||||
ARMConstantPoolSymbol *APS = dyn_cast<ARMConstantPoolSymbol>(CPV);
|
||||
if (!APS) continue;
|
||||
|
||||
if (CPV_streq(APS->S, S) && equals(APS))
|
||||
if (APS->S == S && equals(APS))
|
||||
return i;
|
||||
}
|
||||
}
|
||||
@ -248,12 +236,11 @@ int ARMConstantPoolSymbol::getExistingMachineCPValue(MachineConstantPool *CP,
|
||||
|
||||
bool ARMConstantPoolSymbol::hasSameValue(ARMConstantPoolValue *ACPV) {
|
||||
const ARMConstantPoolSymbol *ACPS = dyn_cast<ARMConstantPoolSymbol>(ACPV);
|
||||
return ACPS && CPV_streq(ACPS->S, S) &&
|
||||
ARMConstantPoolValue::hasSameValue(ACPV);
|
||||
return ACPS && ACPS->S == S && ARMConstantPoolValue::hasSameValue(ACPV);
|
||||
}
|
||||
|
||||
void ARMConstantPoolSymbol::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
|
||||
ID.AddPointer(S);
|
||||
ID.AddString(S);
|
||||
ARMConstantPoolValue::addSelectionDAGCSEId(ID);
|
||||
}
|
||||
|
||||
|
@ -161,19 +161,17 @@ public:
|
||||
/// ARMConstantPoolSymbol - ARM-specific constantpool values for external
|
||||
/// symbols.
|
||||
class ARMConstantPoolSymbol : public ARMConstantPoolValue {
|
||||
const char *S; // ExtSymbol being loaded.
|
||||
const std::string S; // ExtSymbol being loaded.
|
||||
|
||||
ARMConstantPoolSymbol(LLVMContext &C, const char *s, unsigned id,
|
||||
unsigned char PCAdj, ARMCP::ARMCPModifier Modifier,
|
||||
bool AddCurrentAddress);
|
||||
|
||||
public:
|
||||
~ARMConstantPoolSymbol();
|
||||
|
||||
static ARMConstantPoolSymbol *Create(LLVMContext &C, const char *s,
|
||||
unsigned ID, unsigned char PCAdj);
|
||||
|
||||
const char *getSymbol() const { return S; }
|
||||
const char *getSymbol() const { return S.c_str(); }
|
||||
|
||||
virtual int getExistingMachineCPValue(MachineConstantPool *CP,
|
||||
unsigned Alignment);
|
||||
|
Loading…
x
Reference in New Issue
Block a user