]> granicus.if.org Git - clang/commit
SwiftCC: Perform physical layout when computing coercion types
authorArnold Schwaighofer <aschwaighofer@apple.com>
Wed, 21 Jun 2017 21:43:40 +0000 (21:43 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Wed, 21 Jun 2017 21:43:40 +0000 (21:43 +0000)
commit85856463603bb3be56436220b5a273d200584238
tree200c68d75086112e3ab0ff42de51b6ea3e268f21
parent612cecf9e41fd6e4cee4ba49ad43c947055d17dc
SwiftCC: Perform physical layout when computing coercion types

We need to take type alignment padding into account whe computing physical
layouts.

The layout must be compatible with the input layout, offsets are defined in
terms of offsets within a packed struct which are computed in terms of the alloc
size of a type.

Usingthe store size we would insert padding for the following type for example:

struct {

  int3 v;
  long long l;
} __attribute((packed))

On x86-64 int3 is padded to int4 alignment. The swiftcc type would be
<{ <3 x float>, [4 x i8], i64 }> which is not compatible with <{ <3 x float>,
i64 }>.

The latter has i64 at offset 16 and the former at offset 20.

rdar://32618125

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@305956 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SwiftCallingConv.cpp
test/CodeGen/64bit-swiftcall.c