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?

Richard.

--
Richard Guenther <richard dot guenther at uni-tuebingen dot de>
WWW: http://www.tat.physik.uni-tuebingen.de/~rguenth/

Reply via email to