This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/19023] New: ICE in check_pointer_types_r
- From: "gcc-bugzilla at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 15 Dec 2004 22:26:04 -0000
- Subject: [Bug middle-end/19023] New: ICE in check_pointer_types_r
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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