[llvm] r181050 - [PowerPC] Add assembler parser

Evgeniy Stepanov eugeni.stepanov at gmail.com
Mon May 6 02:52:23 PDT 2013


Hi,

> +bool PPCAsmParser::
> +MatchRegisterName(const AsmToken &Tok, unsigned &RegNo, int64_t &IntVal) {
> +  if (Tok.is(AsmToken::Identifier)) {
> +    StringRef Name = Tok.getString().lower();
> +

this code is assigning an std::string temporary to StringRef. Ouch.

ERROR: AddressSanitizer: heap-use-after-free on address 0x60300000d048
at pc 0x6df681 bp 0x7fff785dac10 sp 0x7fff785dac08
READ of size 1 at 0x60300000d048 thread T0
    #0 0x6df680 in compareMemory include/llvm/ADT/StringRef.h:65
    #1 0x6df680 in startswith include/llvm/ADT/StringRef.h:210
    #2 0x6df680 in (anonymous
namespace)::PPCAsmParser::MatchRegisterName(llvm::AsmToken const&,
unsigned int&, long&)
lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp:521
    #3 0x6de0c4 in (anonymous
namespace)::PPCAsmParser::ParseOperand(llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&)
lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp:574
    #4 0x6cfb1f in (anonymous
namespace)::PPCAsmParser::ParseInstruction(llvm::ParseInstructionInfo&,
llvm::StringRef, llvm::SMLoc,
llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&)
lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp:663
    #5 0x8e34cb in (anonymous
namespace)::AsmParser::ParseStatement((anonymous
namespace)::ParseStatementInfo&) lib/MC/MCParser/AsmParser.cpp:1473
    #6 0x8d06cf in (anonymous namespace)::AsmParser::Run(bool, bool)
lib/MC/MCParser/AsmParser.cpp:617
    #7 0x45954d in operator* tools/llvm-mc/llvm-mc.cpp:338
    #8 0x45954d in main tools/llvm-mc/llvm-mc.cpp:465
0x60300000d048 is located 24 bytes inside of 27-byte region
[0x60300000d030,0x60300000d04b)
freed by thread T0 here:
    #0 0x44361b in operator delete(void*)
projects/compiler-rt/lib/asan/asan_new_delete.cc:83
    #1 0x6df58c in _M_dispose
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/basic_string.h:244
    #2 0x6df58c in ~basic_string
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/basic_string.h:534
    #3 0x6df58c in getString
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/basic_string.h:534
    #4 0x6df58c in (anonymous
namespace)::PPCAsmParser::MatchRegisterName(llvm::AsmToken const&,
unsigned int&, long&)
lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp:511
    #5 0x6de0c4 in (anonymous
namespace)::PPCAsmParser::ParseOperand(llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&)
lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp:574
    #6 0x6cfb1f in (anonymous
namespace)::PPCAsmParser::ParseInstruction(llvm::ParseInstructionInfo&,
llvm::StringRef, llvm::SMLoc,
llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&)
lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp:663
    #7 0x8e34cb in (anonymous
namespace)::AsmParser::ParseStatement((anonymous
namespace)::ParseStatementInfo&) lib/MC/MCParser/AsmParser.cpp:1473
    #8 0x8d06cf in (anonymous namespace)::AsmParser::Run(bool, bool)
lib/MC/MCParser/AsmParser.cpp:617
    #9 0x45954d in operator* tools/llvm-mc/llvm-mc.cpp:338
    #10 0x45954d in main tools/llvm-mc/llvm-mc.cpp:465



More information about the llvm-commits mailing list