]> granicus.if.org Git - clang/commit
MS ABI: Use the proper type for inalloca args
authorDavid Majnemer <david.majnemer@gmail.com>
Mon, 31 Mar 2014 16:12:47 +0000 (16:12 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Mon, 31 Mar 2014 16:12:47 +0000 (16:12 +0000)
commit68d4885b9f26aeae42101f5215b20e80b14d17fb
treef60941f165abde27fda651d288e1ea126aeb54c6
parent03a5eb39a60ec31f37daa074ad1c94797a1ca854
MS ABI: Use the proper type for inalloca args

Summary:
The definition of a type later in a translation unit may change it's
type from {}* to (%struct.foo*)*.  Earlier function definitions may use
the former while more recent definitions might use the later.  This is
fine until they interact with one another (like one calling the other).
In these cases, a bitcast is needed because the inalloca must match the
function call but the store to the lvalue which initializes the argument
slot has to match the rvalue's type.

This technique is along the same lines with what the other,
non-inalloca, codepaths perform.

This fixes PR19287.

Reviewers: rnk

CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D3224

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205217 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGCall.cpp
test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp