Fix argument expansion of reference fields of structs
authorReid Kleckner <rnk@google.com>
Mon, 2 May 2016 22:42:34 +0000 (22:42 +0000)
committerReid Kleckner <rnk@google.com>
Mon, 2 May 2016 22:42:34 +0000 (22:42 +0000)
commit9d03109233691d925f998c53e93397d960e3854b
tree1abfd9bed5e665330da987a2c8de7005735e9565
parentd5a3b2373698345670671857d0cb2b9d016cc3c1
Fix argument expansion of reference fields of structs

r268261 made Clang "expand" more struct arguments on Windows. It removed
the check for 'RD->isCLike()', which was preventing us from attempting
to expand structs with reference type fields.

Our expansion code was attempting to load and pass each field of the
type in turn. We were accidentally doing one to many loads on reference
type fields.

On the function prologue side, we can use
EmitLValueForFieldInitialization, which obviously gets the address of
the field. On the call side, I tweaked EmitRValueForField directly,
since this is the only use of this method.

Fixes PR27607

llvm-svn: 268321
clang/lib/CodeGen/CGCall.cpp
clang/lib/CodeGen/CGExpr.cpp
clang/test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp