From 5bf65590d0e8297353398ab01f219fb2d7b7b36e Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Thu, 18 Sep 2014 03:49:55 +0000 Subject: [PATCH] ARM: use a more precise check for MachO Rather than relying on support for a specific directive to determine if we are targeting MachO, explicitly check the output format. As an additional bonus, cleanup the caret diagnostic for the non-MachO case and avoid the spurious error caused by not discarding the statement. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218012 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 9 +++++---- test/MC/ARM/directive-thumb_func.s | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 test/MC/ARM/directive-thumb_func.s diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index 512b73fa885..2243da03e28 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -8473,12 +8473,12 @@ void ARMAsmParser::onLabelParsed(MCSymbol *Symbol) { /// parseDirectiveThumbFunc /// ::= .thumbfunc symbol_name bool ARMAsmParser::parseDirectiveThumbFunc(SMLoc L) { - const MCAsmInfo *MAI = getParser().getStreamer().getContext().getAsmInfo(); - bool isMachO = MAI->hasSubsectionsViaSymbols(); + const auto Format = getContext().getObjectFileInfo()->getObjectFileType(); + bool IsMachO = Format == MCObjectFileInfo::IsMachO; // Darwin asm has (optionally) function name after .thumb_func direction // ELF doesn't - if (isMachO) { + if (IsMachO) { const AsmToken &Tok = Parser.getTok(); if (Tok.isNot(AsmToken::EndOfStatement)) { if (Tok.isNot(AsmToken::Identifier) && Tok.isNot(AsmToken::String)) { @@ -8495,7 +8495,8 @@ bool ARMAsmParser::parseDirectiveThumbFunc(SMLoc L) { } if (getLexer().isNot(AsmToken::EndOfStatement)) { - Error(L, "unexpected token in directive"); + Error(Parser.getTok().getLoc(), "unexpected token in directive"); + Parser.eatToEndOfStatement(); return false; } diff --git a/test/MC/ARM/directive-thumb_func.s b/test/MC/ARM/directive-thumb_func.s new file mode 100644 index 00000000000..f82e0d1b60a --- /dev/null +++ b/test/MC/ARM/directive-thumb_func.s @@ -0,0 +1,22 @@ +@ RUN: not llvm-mc -triple armv7-eabi -filetype asm -o /dev/null %s 2>&1 \ +@ RUN: | FileCheck %s -check-prefix CHECK-EABI + +@ NOTE: this test ensures that both forms are accepted for MachO +@ RUN: llvm-mc -triple armv7-darwin -filetype asm -o /dev/null %s + + .syntax unified + + .thumb_func +no_suffix: + bx lr + + .thumb_func suffix +suffix: + bx lr + +// CHECK-EABI: error: unexpected token in directive +// CHECK-EABI: .thumb_func suffix +// CHECK-EABI: ^ + +// CHECK-EABI-NOT: error: invalid instruction + -- 2.34.1