[clang][Arm] Fix the default floating point ABI for

'armv7-pc-win32-macho'

It is incorrect to select the hardware floating point ABI on Mach-O
platforms using the Windows triple if the ABI is "apcs-gnu".

rdar://81810554

Differential Revision: https://reviews.llvm.org/D107939
This commit is contained in:
Sarah Purohit 2021-08-12 21:41:35 -07:00 committed by Akira Hatanaka
parent 835ea22b37
commit ee620b1743
2 changed files with 15 additions and 0 deletions

View File

@ -314,6 +314,10 @@ arm::FloatABI arm::getDefaultFloatABI(const llvm::Triple &Triple) {
// 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:

View File

@ -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"