On Tue, Jul 19, 2011 at 9:31 PM, Chris Lattner <[email protected]> wrote: > Author: lattner > Date: Tue Jul 19 23:31:01 2011 > New Revision: 135565 > > URL: http://llvm.org/viewvc/llvm-project?rev=135565&view=rev > Log: > fix PR10395 - array decay can produce an interesting type when > decaying an array of incomplete type (which has type [0 x i8]*) to a > normal pointer (which has incompletetype*). > > Modified: > cfe/trunk/lib/CodeGen/CGExprScalar.cpp > cfe/trunk/test/CodeGenCXX/init-incomplete-type.cpp > > Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=135565&r1=135564&r2=135565&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Tue Jul 19 23:31:01 2011 > @@ -1075,7 +1075,10 @@ > V = Builder.CreateStructGEP(V, 0, "arraydecay"); > } > > - return V; > + // Make sure the array decay ends up being the right type. This matters > if > + // the array type was of an incomplete type. > + return CGF.Builder.CreateBitCast(V, > + > CGF.getTypes().ConvertTypeForMem(CE->getType())); > } > case CK_FunctionToPointerDecay: > return EmitLValue(E).getAddress();
ConvertTypeForMem is for types of values in memory, ConvertType is for types of values in registers. In this case, you want the latter. -Eli _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
