[llvm-bugs] [Bug 34272] New: abi for passing empty structures on x86 changed between recently

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Aug 21 20:29:55 PDT 2017


https://bugs.llvm.org/show_bug.cgi?id=34272

            Bug ID: 34272
           Summary: abi for passing empty structures on x86 changed
                    between recently
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: vargaz at gmail.com
                CC: llvm-bugs at lists.llvm.org

Take the following test case on osx:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include <stdio.h>

typedef struct {
} Empty;

Empty ret_empty (int i) {
        Empty e;

        printf ("%d\n", i);
        return e;
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

In xcode7.3, which has clang version:
Apple LLVM version 7.3.0 (clang-703.0.29)

Running
clang -emit-llvm empty.c
generates the following:
define void @ret_empty(%struct.Empty* noalias sret %agg.result, i32 %i) #0 {
i.e. the struct is returned using a hidden parameter

In xcode8.3 and later, it generates the following:
define void @ret_empty(i32) #0 {
i.e. the return value is simply ignored.

The change seems to have been introduced by:

https://github.com/llvm-mirror/clang/commit/bc350ca21c51e341427c7f96dc21fc1bd8f73a2b

The commit talks about the MCU abi, but the change seems to impact normal
linux/osx etc. as well, which seems to be an abi break. Was this intentional,
or is this a regression ?
For the record, gcc generates the same code as xcode7.3.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170822/0159e65d/attachment.html>


More information about the llvm-bugs mailing list