]> granicus.if.org Git - llvm/commitdiff
[MC] Do not consider .ifdef/.ifndef as a use
authorScott Linder <scott@scottlinder.com>
Mon, 28 Jan 2019 19:32:08 +0000 (19:32 +0000)
committerScott Linder <scott@scottlinder.com>
Mon, 28 Jan 2019 19:32:08 +0000 (19:32 +0000)
This is allowed by GAS and seems correct.

Differential Revision: https://reviews.llvm.org/D55439

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

lib/MC/MCParser/AsmParser.cpp
test/MC/AsmParser/ifdef.s
test/MC/AsmParser/ifndef.s

index 189422e2ad35b12c61313365a33a31d428e5dfaf..ee9ed0d27c263e5a91f0fee116678af1df1e44db 100644 (file)
@@ -5038,9 +5038,9 @@ bool AsmParser::parseDirectiveIfdef(SMLoc DirectiveLoc, bool expect_defined) {
     MCSymbol *Sym = getContext().lookupSymbol(Name);
 
     if (expect_defined)
-      TheCondState.CondMet = (Sym && !Sym->isUndefined());
+      TheCondState.CondMet = (Sym && !Sym->isUndefined(false));
     else
-      TheCondState.CondMet = (!Sym || Sym->isUndefined());
+      TheCondState.CondMet = (!Sym || Sym->isUndefined(false));
     TheCondState.Ignore = !TheCondState.CondMet;
   }
 
index 98bff6525b2b62f240ca08e1fe8d00b9a652490c..55fb666fe638002dd18a5da6ed65860d5b1ece0b 100644 (file)
@@ -27,3 +27,17 @@ defined:
 .else
        .byte 1
 .endif
+
+# .ifdef directive does not count as a use, so ensure redefinition is permitted
+.set var, 1
+.ifdef var
+       .set var, 2
+.else
+       .set var, 3
+.endif
+# CHECK: .byte 2
+.byte var
+
+.set var, 4
+# CHECK: .byte 4
+.byte var
index d9c9c5457a700b769ed0b7f2ee36d1ed09370bc6..c20c8c22b773ba832978cdc008f0ab535420de94 100644 (file)
@@ -27,3 +27,17 @@ defined:
 .else
        .byte 0
 .endif
+
+# .ifndef directive does not count as a use, so ensure redefinition is permitted
+.set var, 1
+.ifndef var
+       .set var, 2
+.else
+       .set var, 3
+.endif
+# CHECK: .byte 3
+.byte var
+
+.set var, 4
+# CHECK: .byte 4
+.byte var