diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-09-22 14:09:50 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-09-22 14:09:50 +0000 |
commit | 0d293e45b66c742fdbc3998209bb20ed6c5806bf (patch) | |
tree | b94e3298127f119ce2169436e5c50e2f47401d56 /lib/MC | |
parent | 7f80b75b963781d81b772ae2f3a35dc74e1b6457 (diff) | |
download | external_llvm-0d293e45b66c742fdbc3998209bb20ed6c5806bf.tar.gz external_llvm-0d293e45b66c742fdbc3998209bb20ed6c5806bf.tar.bz2 external_llvm-0d293e45b66c742fdbc3998209bb20ed6c5806bf.zip |
Provide basic type safety for array_pod_sort comparators.
This makes using array_pod_sort significantly safer. The implementation relies
on function pointer casting but that should be safe as we're dealing with void*
here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191175 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/ELFObjectWriter.cpp | 9 | ||||
-rw-r--r-- | lib/MC/MCELFObjectTargetWriter.cpp | 6 | ||||
-rw-r--r-- | lib/MC/MCParser/AsmParser.cpp | 5 |
3 files changed, 9 insertions, 11 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index 2db59acd50..402a6167f5 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -1104,11 +1104,10 @@ void ELFObjectWriter::WriteRelocationsFragment(const MCAssembler &Asm, } } -static int compareBySuffix(const void *a, const void *b) { - const MCSectionELF *secA = *static_cast<const MCSectionELF* const *>(a); - const MCSectionELF *secB = *static_cast<const MCSectionELF* const *>(b); - const StringRef &NameA = secA->getSectionName(); - const StringRef &NameB = secB->getSectionName(); +static int compareBySuffix(const MCSectionELF *const *a, + const MCSectionELF *const *b) { + const StringRef &NameA = (*a)->getSectionName(); + const StringRef &NameB = (*b)->getSectionName(); const unsigned sizeA = NameA.size(); const unsigned sizeB = NameB.size(); const unsigned len = std::min(sizeA, sizeB); diff --git a/lib/MC/MCELFObjectTargetWriter.cpp b/lib/MC/MCELFObjectTargetWriter.cpp index ec7397d748..0c39e4a17e 100644 --- a/lib/MC/MCELFObjectTargetWriter.cpp +++ b/lib/MC/MCELFObjectTargetWriter.cpp @@ -42,9 +42,9 @@ const MCSymbol *MCELFObjectTargetWriter::undefinedExplicitRelSym(const MCValue & // ELF doesn't require relocations to be in any order. We sort by the r_offset, // just to match gnu as for easier comparison. The use type and index is an // arbitrary way of making the sort deterministic. -static int cmpRel(const void *AP, const void *BP) { - const ELFRelocationEntry &A = *(const ELFRelocationEntry *)AP; - const ELFRelocationEntry &B = *(const ELFRelocationEntry *)BP; +static int cmpRel(const ELFRelocationEntry *AP, const ELFRelocationEntry *BP) { + const ELFRelocationEntry &A = *AP; + const ELFRelocationEntry &B = *BP; if (A.r_offset != B.r_offset) return B.r_offset - A.r_offset; if (B.Type != A.Type) diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index dcf54b0b94..c1f825ae78 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -4059,9 +4059,8 @@ bool AsmParser::parseDirectiveMSAlign(SMLoc IDLoc, ParseStatementInfo &Info) { // We are comparing pointers, but the pointers are relative to a single string. // Thus, this should always be deterministic. -static int rewritesSort(const void *A, const void *B) { - const AsmRewrite *AsmRewriteA = static_cast<const AsmRewrite *>(A); - const AsmRewrite *AsmRewriteB = static_cast<const AsmRewrite *>(B); +static int rewritesSort(const AsmRewrite *AsmRewriteA, + const AsmRewrite *AsmRewriteB) { if (AsmRewriteA->Loc.getPointer() < AsmRewriteB->Loc.getPointer()) return -1; if (AsmRewriteB->Loc.getPointer() < AsmRewriteA->Loc.getPointer()) |