From ec5c6245502dbead84c7ef49e542193b037fc7cb Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sun, 23 Nov 2014 02:16:24 +0000 Subject: [PATCH] CodeGen: tweak struct ABI handling Cygwin and MinGW fail to conform to the underlying system's structure passing ABI. Make the check more precise to ensure that we correctly generate code for the itanium environment. llvm-svn: 222626 --- clang/lib/CodeGen/TargetInfo.cpp | 2 +- clang/test/CodeGen/windows-struct-abi.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGen/windows-struct-abi.c diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index be34bf0..3ad8bd9 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -7207,7 +7207,7 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() { bool IsDarwinVectorABI = Triple.isOSDarwin(); bool IsSmallStructInRegABI = X86_32TargetCodeGenInfo::isStructReturnInRegABI(Triple, CodeGenOpts); - bool IsWin32FloatStructABI = Triple.isWindowsMSVCEnvironment(); + bool IsWin32FloatStructABI = Triple.isOSWindows() && !Triple.isOSCygMing(); if (Triple.getOS() == llvm::Triple::Win32) { return *(TheTargetCodeGenInfo = diff --git a/clang/test/CodeGen/windows-struct-abi.c b/clang/test/CodeGen/windows-struct-abi.c new file mode 100644 index 0000000..ec4bab6 --- /dev/null +++ b/clang/test/CodeGen/windows-struct-abi.c @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 -triple i686-windows-itanium -emit-llvm -o - %s | FileCheck %s + +struct f1 { + float f; +}; + +struct f1 return_f1(void) { while (1); } + +// CHECK: define void @return_f1(%struct.f1* noalias sret %agg.result) + +void receive_f1(struct f1 a0) { } + +// CHECK: define void @receive_f1(%struct.f1* byval align 4 %a0) + +struct f2 { + float f; + float g; +}; + +struct f2 return_f2(void) { while (1); } + +// CHECK: define void @return_f2(%struct.f2* noalias sret %agg.result) + +void receive_f2(struct f2 a0) { } + +// CHECK: define void @receive_f2(%struct.f2* byval align 4 %a0) + -- 2.7.4