diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-12-24 10:27:50 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-12-24 10:27:50 +0000 |
| commit | 58cb80c94062103d3fbf65b1a35ebda08b20a6c9 (patch) | |
| tree | 8f6eeec31f6a0f7242ebb83e011e75423ab0387b /llvm/lib | |
| parent | 4d6ed7c7782baf0c9796b19040a42b468d847433 (diff) | |
| download | bcm5719-llvm-58cb80c94062103d3fbf65b1a35ebda08b20a6c9.tar.gz bcm5719-llvm-58cb80c94062103d3fbf65b1a35ebda08b20a6c9.zip | |
MC: Label definitions are permitted after .set directives
.set directives may be overridden by other .set directives as well as
label definitions.
This fixes PR22019.
llvm-svn: 224811
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 5 |
2 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 69e3a5df919..ec7da6b99c4 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -541,6 +541,8 @@ 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() { + CurrentFnSym->redefineIfPossible(); + // 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()) diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 9becb403d57..8eff90a9ef7 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -1298,6 +1298,9 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info, Sym = getContext().GetOrCreateSymbol(IDVal); } else Sym = Ctx.CreateDirectionalLocalSymbol(LocalLabelVal); + + Sym->redefineIfPossible(); + if (!Sym->isUndefined() || Sym->isVariable()) return Error(IDLoc, "invalid symbol redefinition"); @@ -2217,6 +2220,8 @@ bool AsmParser::parseAssignment(StringRef Name, bool allow_redef, } else Sym = getContext().GetOrCreateSymbol(Name); + Sym->setRedefinable(allow_redef); + // Do the assignment. Out.EmitAssignment(Sym, Value); if (NoDeadStrip) |

