From 029e638b793512b36bd3b57e0c2b6e3e7dfa304d Mon Sep 17 00:00:00 2001 From: Scott Linder Date: Mon, 28 Jan 2019 19:32:08 +0000 Subject: [PATCH] [MC] Do not consider .ifdef/.ifndef as a use 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 | 4 ++-- test/MC/AsmParser/ifdef.s | 14 ++++++++++++++ test/MC/AsmParser/ifndef.s | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 189422e2ad3..ee9ed0d27c2 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -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; } diff --git a/test/MC/AsmParser/ifdef.s b/test/MC/AsmParser/ifdef.s index 98bff6525b2..55fb666fe63 100644 --- a/test/MC/AsmParser/ifdef.s +++ b/test/MC/AsmParser/ifdef.s @@ -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 diff --git a/test/MC/AsmParser/ifndef.s b/test/MC/AsmParser/ifndef.s index d9c9c5457a7..c20c8c22b77 100644 --- a/test/MC/AsmParser/ifndef.s +++ b/test/MC/AsmParser/ifndef.s @@ -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 -- 2.50.1