Fix some unnoticed/unwanted behavior change from r222319.

The ARM assembler allows register alias redefinitions as long as it
targets the same register. r222319 broke that. In the AArch64 case
it would just produce a new warning, but in the ARM case it would
error out on previously accepted assembler.

llvm-svn: 228109
This commit is contained in:
Frederic Riss 2015-02-04 03:10:03 +00:00
parent eebe962eda
commit b61f01f1c2
4 changed files with 8 additions and 3 deletions

View File

@ -4132,7 +4132,7 @@ bool AArch64AsmParser::parseDirectiveReq(StringRef Name, SMLoc L) {
Parser.Lex(); // Consume the EndOfStatement
auto pair = std::make_pair(IsVector, RegNum);
if (!RegisterReqs.insert(std::make_pair(Name, pair)).second)
if (RegisterReqs.insert(std::make_pair(Name, pair)).first->second != pair)
Warning(L, "ignoring redefinition of register alias '" + Name + "'");
return true;

View File

@ -9010,7 +9010,7 @@ bool ARMAsmParser::parseDirectiveReq(StringRef Name, SMLoc L) {
Parser.Lex(); // Consume the EndOfStatement
if (!RegisterReqs.insert(std::make_pair(Name, Reg)).second) {
if (RegisterReqs.insert(std::make_pair(Name, Reg)).first->second != Reg) {
Error(SRegLoc, "redefinition of '" + Name + "' does not match original.");
return false;
}

View File

@ -1,7 +1,9 @@
// RUN: llvm-mc -triple=aarch64-none-linux-gnu -show-encoding < %s | FileCheck %s
// RUN: llvm-mc -triple=aarch64-none-linux-gnu -show-encoding < %s 2>&1 | FileCheck %s
bar:
fred .req x5
// CHECK-NOT: ignoring redefinition of register alias 'fred'
fred .req x5
mov fred, x11
.unreq fred
fred .req w6

View File

@ -1,6 +1,9 @@
@ RUN: llvm-mc -triple=armv7-apple-darwin -show-encoding < %s | FileCheck %s
.syntax unified
bar:
@ The line is duplicated on purpose, it is legal to redefine a req with
@ the same value.
fred .req r5
fred .req r5
mov r11, fred
.unreq fred