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

Reply via email to