valreg at calls.c is 0 at a moment
Ian Lance Taylor
iant@google.com
Sat Oct 3 02:50:00 GMT 2009
"Kim, Eunchan" <helpbygrace@gmail.com> writes:
> So, the error occurs at calls.c:2880. which code is..
>
>>>----------
> if (pass && (flags & ECF_LIBCALL_BLOCK))
> +---- 60 : {---------------------------------------------------------------------
> else if (pass && (flags & ECF_MALLOC))
> {
> rtx temp = gen_reg_rtx (GET_MODE (valreg));
> rtx last, insns;
> ----------<<
>
> at this statement, valreg was 0 when i printed that value. i wondered
> why valreg is 0. most assignment of valreg is determined by
> structure_value_addr, which is non-zero at this time. It means that
> 'malloc' returns BLKmode value. isn't it?
valreg certainly shouldn't be zero either. But malloc does not return
a BLKmode value; it returns a Pmode value. You mention
structure_value_addr but you don't say whether it is non-NULL.
Certainly structure_value_addr should be NULL for a call to malloc, as
malloc does not return a structure. If structure_value_addr is not
NULL, that implies that aggregate_value_p returned true for a call to
malloc, and I don't see how that could happen.
Ian
More information about the Gcc-help
mailing list