diff options
author | Chris Lattner <sabre@nondot.org> | 2010-05-06 00:05:37 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-05-06 00:05:37 +0000 |
commit | 35096e82c539ec639e0bd223f58eb71cfdb13c04 (patch) | |
tree | e0274c32144620819f825aa3defcf99fe03c7650 /llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | |
parent | a7c717d8d42799960247680f300c6df801e7fa80 (diff) | |
download | bcm5719-llvm-35096e82c539ec639e0bd223f58eb71cfdb13c04.tar.gz bcm5719-llvm-35096e82c539ec639e0bd223f58eb71cfdb13c04.zip |
Fix PR7054 - Assertion `Symbol->isUndefined() && "Cannot define a symbol twice!"' failed.
Users can write broken code that emits the same label twice with asm renaming,
detect this and emit a fatal backend error instead of aborting.
llvm-svn: 103140
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index ded4b3f18bb..47c58d0f0fd 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -408,7 +408,13 @@ void AsmPrinter::EmitFunctionHeader() { /// EmitFunctionEntryLabel - Emit the label that is the entrypoint for the /// function. This can be overridden by targets as required to do custom stuff. void AsmPrinter::EmitFunctionEntryLabel() { - OutStreamer.EmitLabel(CurrentFnSym); + // The function label could have already been emitted if two symbols end up + // conflicting due to asm renaming. Detect this and emit an error. + if (CurrentFnSym->isUndefined()) + return OutStreamer.EmitLabel(CurrentFnSym); + + report_fatal_error("'" + Twine(CurrentFnSym->getName()) + + "' label emitted multiple times to assembly file"); } |