This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C++ frontend generating bogous trees


Ok, I guess the following excerpts from cp/typechk.c show a discrepancy:

tree
build_address (tree t)
{
  tree addr;

  if (error_operand_p (t) || !cxx_mark_addressable (t))
    return error_mark_node;

  addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);

  return addr;
}


1381 (decay_conversion)

      ptrtype = build_pointer_type (TREE_TYPE (type));
    
      if (TREE_CODE (exp) == VAR_DECL)
        {
          if (!cxx_mark_addressable (exp))
            return error_mark_node;
          adr = build_nop (ptrtype, build_address (exp));
          return adr;
        }

where of course we are doing redundant work, but we are also
building an ADDR_EXPR with the wrong type.  I guess the above
should rather read

      if (TREE_CODE (exp) == VAR_DECL)
        {
          if (!cxx_mark_addressable (exp))
            return error_mark_node;
          adr = build1 (ADDR_EXPR, ptrtype, exp);
          return adr;
        }

no?  At least this let's my bootstrap continue.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]