Bug 27722

Summary: [4.0 regression] ICE incrementing an array
Product: gcc Reporter: Volker Reichelt <reichelt>
Component: c++Assignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: minor CC: fang, gcc-bugs
Priority: P2 Keywords: error-recovery, ice-on-invalid-code, monitored
Version: 4.2.0   
Target Milestone: 4.0.4   
Host: Target:
Build: Known to work: 4.1.2 4.2.0
Known to fail: 4.1.1 4.0.3 Last reconfirmed: 2006-09-17 07:48:33

Description Volker Reichelt 2006-05-22 13:34:49 UTC
The C++ frontend crashes since GCC 4.0.3 on the following invalid code
snippet:

=================================
void foo()
{
    const int x[] = 0;
    ++x;
}
=================================

bug.cc: In function 'void foo()':
bug.cc:3: error: initializer fails to determine size of 'x'
bug.cc:3: error: cannot convert 'int' to 'const int [1]' in initialization
bug.cc:4: internal compiler error: tree check: expected class 'type', have 'exceptional' (error_mark) in get_unwidened, at tree.c:5322
Please submit a full bug report, [etc.]
Comment 1 Wolfgang Bangerth 2006-05-26 14:56:44 UTC
This didn't fail with 4.0.2pre, so it must be a regression on a release branch.
Comment 2 Mark Mitchell 2006-06-05 02:46:51 UTC
Subject: Bug 27722

Author: mmitchel
Date: Mon Jun  5 02:46:38 2006
New Revision: 114382

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=114382
Log:
	PR c++/27819
	* decl.c (cp_finish_decl): Process initializers for static data
	members with non-dependent initializers, even in templates.
	PR c++/27722
	* decl.c (maybe_deduce_size_from_array_init): If the declaration
	is erroneous, give it an erroneous type.
	(layout_var_decl): If the type is erroneous, give up.
	(check_initializer): Likewise.
	PR c++/27807
	* cp-tree.h (TYPE_OBJ_P): New macro.
	(TYPE_PTROB_P): Use it.
	(TYPE_REF_OBJ_P): Likewise.
	* semantics.c (finish_compound_literal): Do not permit compound
	literals of non-object types.
	PR c++/27806
	* typeck.c (original_type): Robustify.
	PR c++/27819
	* g++.dg/template/static25.C: New test.
	PR c++/27722
	* g++.dg/init/array21.C: New test.
	PR c++/27807
	* g++.dg/ext/complit7.C: New test.
	
	PR c++/27806
	* g++.dg/parse/ptrmem5.C: New test.

Added:
    trunk/gcc/testsuite/g++.dg/ext/complit7.C
    trunk/gcc/testsuite/g++.dg/init/array21.C
    trunk/gcc/testsuite/g++.dg/parse/ptrmem5.C
    trunk/gcc/testsuite/g++.dg/template/static25.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/cp-tree.h
    trunk/gcc/cp/decl.c
    trunk/gcc/cp/semantics.c
    trunk/gcc/cp/typeck.c
    trunk/gcc/testsuite/ChangeLog

Comment 3 Mark Mitchell 2006-06-05 02:52:49 UTC
Subject: Bug 27722

Author: mmitchel
Date: Mon Jun  5 02:52:37 2006
New Revision: 114383

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=114383
Log:
	PR c++/27819
	* decl.c (cp_finish_decl): Process initializers for static data
	members with non-dependent initializers, even in templates.
	PR c++/27722
	* decl.c (maybe_deduce_size_from_array_init): If the declaration
	is erroneous, give it an erroneous type.
	(layout_var_decl): If the type is erroneous, give up.
	(check_initializer): Likewise.
	PR c++/27807
	* cp-tree.h (TYPE_OBJ_P): New macro.
	(TYPE_PTROB_P): Use it.
	(TYPE_REF_OBJ_P): Likewise.
	* semantics.c (finish_compound_literal): Do not permit compound
	literals of non-object types.
	PR c++/27806
	* typeck.c (original_type): Robustify.
	PR c++/27819
	* g++.dg/template/static25.C: New test.
	PR c++/27722
	* g++.dg/init/array21.C: New test.
	PR c++/27807
	* g++.dg/ext/complit7.C: New test.
	
	PR c++/27806
	* g++.dg/parse/ptrmem5.C: New test.

Added:
    branches/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/complit7.C
    branches/gcc-4_1-branch/gcc/testsuite/g++.dg/init/array21.C
    branches/gcc-4_1-branch/gcc/testsuite/g++.dg/parse/ptrmem5.C
    branches/gcc-4_1-branch/gcc/testsuite/g++.dg/template/static25.C
Modified:
    branches/gcc-4_1-branch/gcc/cp/ChangeLog
    branches/gcc-4_1-branch/gcc/cp/cp-tree.h
    branches/gcc-4_1-branch/gcc/cp/decl.c
    branches/gcc-4_1-branch/gcc/cp/semantics.c
    branches/gcc-4_1-branch/gcc/cp/typeck.c
    branches/gcc-4_1-branch/gcc/testsuite/ChangeLog

Comment 4 Mark Mitchell 2006-06-05 02:54:59 UTC
Fixed in 4.1.2, 4.2.0.
Comment 5 Volker Reichelt 2006-06-06 14:21:00 UTC
Btw, the fix for PR27804 fixed the problem on mainline before Mark's patch
went in. (This might be interesting for a backport to the 4.0 branch.)
Comment 6 Volker Reichelt 2007-01-31 23:16:20 UTC
Seems to be fixed in GCC 4.0.4.