Fix some unnoticed/unwanted behavior change from r222319.
authorFrederic Riss <friss@apple.com>
Wed, 4 Feb 2015 03:10:03 +0000 (03:10 +0000)
committerFrederic Riss <friss@apple.com>
Wed, 4 Feb 2015 03:10:03 +0000 (03:10 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228109 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
lib/Target/ARM/AsmParser/ARMAsmParser.cpp
test/MC/AArch64/dot-req.s
test/MC/ARM/dot-req.s

index 70b61c3ffaeed9115281454463cf161759ec10a7..1960c9937933b1ec66e4c1d846ebbde30fb68df4 100644 (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;
index c35b0ef311f258b5be6a67c08ea9f792d5d56619..3b7a67d0d1f061b15a3c8a11fb4acec370c031f8 100644 (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;
   }
index 947f945bded876c1b9313edc6398304dc9fcc9e4..a557f0c6758909b2b4af918b494b8868d2b4fade 100644 (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
index 3b4cf5c80c00a12e38328add3d298a3633b12ddd..848c1241affd8eb143ede96c40f6cbe3688cd396 100644 (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