This is the mail archive of the gcc-bugs@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]

[Bug middle-end/19023] New: ICE in check_pointer_types_r



g++ gives an ICE on the following source (no optimization required):

$ ~/gcc/build/gcc/cc1plus -quiet x.cc
x.cc: In function 'C f(const C&)':
x.cc:6: internal compiler error: in check_pointer_types_r, at gimplify.c:4198
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
$


It's crashing here:

    case ADDR_EXPR:
      ptype = TREE_TYPE (t);
      otype = TREE_TYPE (TREE_OPERAND (t, 0));
      dtype = TREE_TYPE (ptype);
      if (!cpt_same_type (otype, dtype))
	{
	  /* &array is allowed to produce a pointer to the element, rather than
	     a pointer to the array type.  We must allow this in order to
	     properly represent assigning the address of an array in C into
	     pointer to the element type.  */
	  gcc_assert (TREE_CODE (otype) == ARRAY_TYPE
		      && POINTER_TYPE_P (ptype)
		      && cpt_same_type (TREE_TYPE (otype), dtype));
	  break;
	}
 
because OTYPE isn't an ARRAY_TYPE:

(gdb) call debug_tree(otype)
 <reference_type 0x400be2b8
    type <record_type 0x400b6bc8 C addressable tree_2 needs-constructing type_1 type_5 BLK
        size <integer_cst 0x400243d8 constant invariant 32>
        unit size <integer_cst 0x40024168 constant invariant 4>
        align 32 symtab 0 alias set -1
        fields <field_decl 0x400b932c _vptr.C type <pointer_type 0x40094e0c>
            unsigned virtual SI file x.cc line 2 size <integer_cst 0x400243d8 32> unit size <integer_cst 0x40024168 4>
            align 32 offset_align 128
            offset <integer_cst 0x40024180 constant invariant 0>
            bit offset <integer_cst 0x40024948 constant invariant 0> context <record_type 0x400b6bc8 C> arguments <integer_cst 0x40024180 0> chain <type_decl 0x400b6d98 C>>
       needs-constructor X() X(constX&) this=(X&) n_parents=0 use_template=0 interface-unknown
        pointer_to_this <pointer_type 0x400b9000> reference_to_this <reference_type 0x400be2b8> chain <type_decl 0x400b6cb0 C>>
    unsigned SI size <integer_cst 0x400243d8 32> unit size <integer_cst 0x40024168 4>
    align 32 symtab 0 alias set -1>

Environment:
System: Linux karma 2.6.8.1 #20 Mon Sep 13 23:48:47 EDT 2004 i686 i686 i386 GNU/Linux
Architecture: i686

	<machine, os, target, libraries (multiple lines)>
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /home/sss/gcc/gcc/configure --prefix=/usr/local/gcc --enable-threads=posix --enable-long-long --enable-languages=c,c++,f95

How-To-Repeat:



Compile the following:

------------------------------------------------------
struct C
{
  virtual void operator()() const;
};

C f(const C& c)
{
  C cc (c);
  cc();
  return cc;
}

------------------------------------------------------
------- Additional Comments From sss at d0mino03 dot fnal dot gov  2004-12-15 22:26 -------
Fix:
	<how to correct or work around the problem, if known (multiple lines)>

-- 
           Summary: ICE in check_pointer_types_r
           Product: gcc
           Version: 0.0
            Status: UNCONFIRMED
          Severity: critical
          Priority: P2
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: sss at d0mino03 dot fnal dot gov
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19023


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