[MC] Do not consider .ifdef/.ifndef as a use

This is allowed by GAS and seems correct.

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

llvm-svn: 352414
This commit is contained in:
Scott Linder 2019-01-28 19:32:08 +00:00
parent 2379ffe16f
commit 34a4acdde6
3 changed files with 30 additions and 2 deletions

View 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;
}

View 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

View 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