diff --git a/clang/lib/Driver/ToolChains/Arch/ARM.cpp b/clang/lib/Driver/ToolChains/Arch/ARM.cpp --- a/clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ b/clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -314,6 +314,10 @@ // FIXME: this is invalid for WindowsCE case llvm::Triple::Win32: + // It is incorrect to select hard float ABI on MachO platforms if the ABI is + // "apcs-gnu". + if (Triple.isOSBinFormatMachO() && !useAAPCSForMachO(Triple)) + return FloatABI::Soft; return FloatABI::Hard; case llvm::Triple::NetBSD: diff --git a/clang/test/Driver/windows-macho.c b/clang/test/Driver/windows-macho.c new file mode 100644 --- /dev/null +++ b/clang/test/Driver/windows-macho.c @@ -0,0 +1,11 @@ +// RUN: %clang -target armv7-pc-win32-macho -msoft-float -### -c %s 2>&1 \ +// RUN: | FileCheck %s --check-prefix CHECK-SOFTFLOAT +// CHECK-SOFTFLOAT-NOT: error: unsupported option '-msoft-float' for target 'thumbv7-pc-windows-macho' + +// RUN: %clang -target armv7-pc-win32-macho -mhard-float -### -c %s 2>&1 \ +// RUN: | FileCheck %s --check-prefix CHECK-HARDFLOAT +// CHECK-HARDFLOAT: error: unsupported option '-mhard-float' for target 'thumbv7-pc-windows-macho' + +// RUN: %clang -target armv7-pc-win32-macho -### -c %s 2>&1 \ +// RUN: | FileCheck %s --check-prefix CHECK-DEFAULT-SOFTFLOAT-ABI +// CHECK-DEFAULT-SOFTFLOAT-ABI: "-mfloat-abi" "soft"