* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
@ 2013-02-07 18:15 ` jakub at gcc dot gnu.org
2013-02-07 22:21 ` fabien at gcc dot gnu.org
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-02-07 18:15 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2013-02-07
CC| |fabien at gcc dot gnu.org,
| |jakub at gcc dot gnu.org,
| |jason at gcc dot gnu.org
Target Milestone|--- |4.8.0
Ever Confirmed|0 |1
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-07 18:13:55 UTC ---
Started with http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=193504
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
2013-02-07 18:15 ` [Bug c++/56243] " jakub at gcc dot gnu.org
@ 2013-02-07 22:21 ` fabien at gcc dot gnu.org
2013-02-08 15:30 ` rguenth at gcc dot gnu.org
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: fabien at gcc dot gnu.org @ 2013-02-07 22:21 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
fabien at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
AssignedTo|unassigned at gcc dot |fabien at gcc dot gnu.org
|gnu.org |
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
2013-02-07 18:15 ` [Bug c++/56243] " jakub at gcc dot gnu.org
2013-02-07 22:21 ` fabien at gcc dot gnu.org
@ 2013-02-08 15:30 ` rguenth at gcc dot gnu.org
2013-02-22 21:02 ` jason at gcc dot gnu.org
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-02-08 15:30 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P1
Version|unknown |4.8.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (2 preceding siblings ...)
2013-02-08 15:30 ` rguenth at gcc dot gnu.org
@ 2013-02-22 21:02 ` jason at gcc dot gnu.org
2013-02-23 10:43 ` fabien at gcc dot gnu.org
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: jason at gcc dot gnu.org @ 2013-02-22 21:02 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #2 from Jason Merrill <jason at gcc dot gnu.org> 2013-02-22 21:02:04 UTC ---
Any news on this bug? It's one of only a few P1 regressions left.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (3 preceding siblings ...)
2013-02-22 21:02 ` jason at gcc dot gnu.org
@ 2013-02-23 10:43 ` fabien at gcc dot gnu.org
2013-02-23 22:01 ` fabien at gcc dot gnu.org
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: fabien at gcc dot gnu.org @ 2013-02-23 10:43 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #3 from fabien at gcc dot gnu.org 2013-02-23 10:42:55 UTC ---
(In reply to comment #2)
> Any news on this bug? It's one of only a few P1 regressions left.
This bug triggers with --enable-checking on the constexpr stuff. I was looking
at it yesterday, and tried to fix it in the same way than you fixed PR53816. It
did work, but it caused a regression on constexpr-static10.C which I didn't
manage to resolve yet. If I fail to find out what goes wrong this week-end, I
will probably have to defer to someone more involved than me on the constexpr
stuff.
I didn't check if it was a regression wrt 4.7 with --enable-checking
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (4 preceding siblings ...)
2013-02-23 10:43 ` fabien at gcc dot gnu.org
@ 2013-02-23 22:01 ` fabien at gcc dot gnu.org
2013-02-23 22:02 ` fabien at gcc dot gnu.org
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: fabien at gcc dot gnu.org @ 2013-02-23 22:01 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #4 from fabien at gcc dot gnu.org 2013-02-23 22:00:44 UTC ---
I think the testcase is invalid
Shouldn't the below line be diagnosed, even if it is in a template ?
F& name = x->value;
We fail to return early, and the compiler is confused because of this error.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (5 preceding siblings ...)
2013-02-23 22:01 ` fabien at gcc dot gnu.org
@ 2013-02-23 22:02 ` fabien at gcc dot gnu.org
2013-02-23 23:06 ` ppluzhnikov at google dot com
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: fabien at gcc dot gnu.org @ 2013-02-23 22:02 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #5 from fabien at gcc dot gnu.org 2013-02-23 22:02:16 UTC ---
reduced testcase:
class A
{
virtual int String ();
};
class F: public A { };
template < typename V > class G
{
V value;
};
class D
{
template < int N > void Verify() {
G<A>* x = 0;
F& name = x->value;
name.String();
}
};
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (6 preceding siblings ...)
2013-02-23 22:02 ` fabien at gcc dot gnu.org
@ 2013-02-23 23:06 ` ppluzhnikov at google dot com
2013-02-25 20:57 ` fabien at gcc dot gnu.org
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: ppluzhnikov at google dot com @ 2013-02-23 23:06 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #6 from Paul Pluzhnikov <ppluzhnikov at google dot com> 2013-02-23 23:06:18 UTC ---
(In reply to comment #4)
> I think the testcase is invalid
Looks like you are right, and it's been over-reduced.
> Shouldn't the below line be diagnosed, even if it is in a template ?
> F& name = x->value;
The error being that typeof(x->value) is A, not F, right?
If so, this corrected test case still triggers ICE:
class A
{
virtual int String ();
};
class F: public A { };
template < typename V > class G
{
V value;
};
class D
{
template < int N > void Verify() {
G<F>* x = 0;
F& name = x->value;
name.String();
}
};
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (7 preceding siblings ...)
2013-02-23 23:06 ` ppluzhnikov at google dot com
@ 2013-02-25 20:57 ` fabien at gcc dot gnu.org
2013-02-25 21:05 ` fabien at gcc dot gnu.org
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: fabien at gcc dot gnu.org @ 2013-02-25 20:57 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #7 from fabien at gcc dot gnu.org 2013-02-25 20:56:42 UTC ---
(In reply to comment #6)
> (In reply to comment #4)
[...]
> If so, this corrected test case still triggers ICE:
Good point. Further reduced:
struct A
{
virtual int String ();
};
class F: public A { };
struct G
{
F value;
};
class D
{
template <int>
void Verify()
{
G x;
F& name = x.value;
name.String();
}
};
I restarted the analysis from the beginning. My fix for c++/11750 was basically
to restrict the cases where the unsafe front-end de-virtualization was done. It
wouldn't help to refine that change because anyway, it would still be possible
to find a testcase that shows the same ICE.
My attempts to fix the problem on the constexpr side failed probably because it
is correct.
The problem is more related to the COMPONENT_REF 'G'. Probably because
D::Verify is not instantiated yet, the field 'value' of G is still an
IDENTIFIER_NODE instead of being a FIELD_DECL, which leads to a crash while
calling DECL_FIELD_IS_BASE.
Hence, I can only see two solutions:
1) make 'value' a FIELD_DECL before or during the
fold_non_dependent_expr_sfinae call. Not sure it is simple.
2) check that the first operand of a COMPONENT_REF is actually a FIELD_DECL
before calling DECL_FIELD_IS_BASE on it.
Upcoming patch for the solution 2 on gcc-patch...
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (8 preceding siblings ...)
2013-02-25 20:57 ` fabien at gcc dot gnu.org
@ 2013-02-25 21:05 ` fabien at gcc dot gnu.org
2013-02-28 16:02 ` jason at gcc dot gnu.org
2013-02-28 20:34 ` jason at gcc dot gnu.org
11 siblings, 0 replies; 13+ messages in thread
From: fabien at gcc dot gnu.org @ 2013-02-25 21:05 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #8 from fabien at gcc dot gnu.org 2013-02-25 21:04:59 UTC ---
(In reply to comment #6)
[...]
> 2) check that the first operand of a COMPONENT_REF is actually a FIELD_DECL
> before calling DECL_FIELD_IS_BASE on it.
As a consequency, while processing fold_non_dependent_expr_sfinae,
fixed_type_or_null returns NULL_TREE on 'x.value' the and build_vtbl_ref_1 has
not chance to call unshare_expr. Jason, is that a big deal ?
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (9 preceding siblings ...)
2013-02-25 21:05 ` fabien at gcc dot gnu.org
@ 2013-02-28 16:02 ` jason at gcc dot gnu.org
2013-02-28 20:34 ` jason at gcc dot gnu.org
11 siblings, 0 replies; 13+ messages in thread
From: jason at gcc dot gnu.org @ 2013-02-28 16:02 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #9 from Jason Merrill <jason at gcc dot gnu.org> 2013-02-28 16:01:28 UTC ---
Author: jason
Date: Thu Feb 28 16:01:09 2013
New Revision: 196343
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=196343
Log:
PR c++/56243
* call.c (build_over_call): Avoid virtual lookup in a template.
Added:
trunk/gcc/testsuite/g++.dg/template/virtual4.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/call.c
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/56243] [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645
2013-02-07 16:13 [Bug c++/56243] New: [4.8 regression] ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645 ppluzhnikov at google dot com
` (10 preceding siblings ...)
2013-02-28 16:02 ` jason at gcc dot gnu.org
@ 2013-02-28 20:34 ` jason at gcc dot gnu.org
11 siblings, 0 replies; 13+ messages in thread
From: jason at gcc dot gnu.org @ 2013-02-28 20:34 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
Jason Merrill <jason at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
--- Comment #10 from Jason Merrill <jason at gcc dot gnu.org> 2013-02-28 20:33:21 UTC ---
Fixed.
^ permalink raw reply [flat|nested] 13+ messages in thread