On 5/18/05, Richard Guenther <[EMAIL PROTECTED]> wrote: > > The following snippet > > /* Differs from default_conversion by not setting TREE_ADDRESSABLE > (because calling an inline function does not mean the function > needs to be separately compiled). */ > fntype = build_type_variant (TREE_TYPE (function), > TREE_READONLY (function), > TREE_THIS_VOLATILE (function)); > fundecl = function; > function = build1 (ADDR_EXPR, build_pointer_type (fntype), > function); > > purposely builds an ADDR_EXPR tree with mismatched types: > > <addr_expr 0x4028c940 > type <pointer_type 0x40290510 > type <function_type 0x402904a4 type <integer_type 0x40149510 int> > readonly QI > .... > readonly constant invariant > arg 0 <function_decl 0x4018f870 __builtin_constant_p > type <function_type 0x40158360 type <integer_type 0x40149510 int> > QI > .... > > why? Do we (want to) allow this kind of mismatch in ADDR_EXPRs?
Allowing ADDR_EXPR with types that share the same TYPE_MAIN_VARIANT makes these things in the C forntend a non-issue. This may be one hint that we do not want a (very) strict type system. Richard.