diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-12-24 23:06:55 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-12-24 23:06:55 +0000 |
commit | 2913eca4e2929a54bbe1ebe2faf421ba7651e601 (patch) | |
tree | 139d68ea792bacdadd957b3ea70c6edf9673f1f8 /llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | |
parent | 8e92dfee20ab94503ea4f499044ceb29360faba4 (diff) | |
download | bcm5719-llvm-2913eca4e2929a54bbe1ebe2faf421ba7651e601.tar.gz bcm5719-llvm-2913eca4e2929a54bbe1ebe2faf421ba7651e601.zip |
CodeGen: Error on redefinitions instead of asserting
It's possible to have a prior definition of a symbol in module asm.
Raise an error instead of crashing.
llvm-svn: 224828
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 93445a8c84f..80221d7feb6 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -338,6 +338,9 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { return; GVSym->redefineIfPossible(); + if (GVSym->isDefined() || GVSym->isVariable()) + report_fatal_error("symbol '" + Twine(GVSym->getName()) + + "' is already defined"); if (MAI->hasDotTypeDotSizeDirective()) OutStreamer.EmitSymbolAttribute(GVSym, MCSA_ELF_TypeObject); @@ -547,11 +550,14 @@ void AsmPrinter::EmitFunctionEntryLabel() { // 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"); + if (CurrentFnSym->isVariable()) + report_fatal_error("'" + Twine(CurrentFnSym->getName()) + + "' is a protected alias"); + if (CurrentFnSym->isDefined()) + report_fatal_error("'" + Twine(CurrentFnSym->getName()) + + "' label emitted multiple times to assembly file"); + + return OutStreamer.EmitLabel(CurrentFnSym); } /// emitComments - Pretty-print comments for instructions. |