diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-09-24 05:18:35 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-09-24 05:18:35 +0000 |
commit | de0e11c8f3f9ad60844c210bf68111db6e25f9a9 (patch) | |
tree | 7021f6c19fbb4e2dc513b4c1197ac0f21416844c /lib/Target/ARM/ARMConstantPoolValue.cpp | |
parent | b95a079cae7bd5232d17be8a095fa63fe84f4e44 (diff) | |
download | llvm-de0e11c8f3f9ad60844c210bf68111db6e25f9a9.tar.gz llvm-de0e11c8f3f9ad60844c210bf68111db6e25f9a9.tar.bz2 llvm-de0e11c8f3f9ad60844c210bf68111db6e25f9a9.tar.xz |
Fix a potential null dereference bug.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114723 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMConstantPoolValue.cpp')
-rw-r--r-- | lib/Target/ARM/ARMConstantPoolValue.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/Target/ARM/ARMConstantPoolValue.cpp b/lib/Target/ARM/ARMConstantPoolValue.cpp index f13ccc6384..4ee71e24a7 100644 --- a/lib/Target/ARM/ARMConstantPoolValue.cpp +++ b/lib/Target/ARM/ARMConstantPoolValue.cpp @@ -53,6 +53,14 @@ const BlockAddress *ARMConstantPoolValue::getBlockAddress() const { return dyn_cast_or_null<BlockAddress>(CVal); } +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 ARMConstantPoolValue::getExistingMachineCPValue(MachineConstantPool *CP, unsigned Alignment) { unsigned AlignMask = Alignment - 1; @@ -65,8 +73,8 @@ int ARMConstantPoolValue::getExistingMachineCPValue(MachineConstantPool *CP, if (CPV->CVal == CVal && CPV->LabelId == LabelId && CPV->PCAdjust == PCAdjust && - (CPV->S == S || strcmp(CPV->S, S) == 0) && - (CPV->Modifier == Modifier || strcmp(CPV->Modifier, Modifier) == 0)) + CPV_streq(CPV->S, S) && + CPV_streq(CPV->Modifier, Modifier)) return i; } } @@ -91,8 +99,8 @@ ARMConstantPoolValue::hasSameValue(ARMConstantPoolValue *ACPV) { if (ACPV->Kind == Kind && ACPV->CVal == CVal && ACPV->PCAdjust == PCAdjust && - (ACPV->S == S || strcmp(ACPV->S, S) == 0) && - (ACPV->Modifier == Modifier || strcmp(ACPV->Modifier, Modifier) == 0)) { + CPV_streq(ACPV->S, S) && + CPV_streq(ACPV->Modifier, Modifier)) { if (ACPV->LabelId == LabelId) return true; // Two PC relative constpool entries containing the same GV address or |