Testcase is short enough: struct A { static void f() {} }; int main() { A a; a.f; } Produces a segfault on the line where "a.f" occurs. It should instead issue the warning "statement is a reference, not call, to function A::f". gcc 4.1.0 (at least the experimental mingw cross compiler I'm using here) seems to be affected too.
Confirmed.
Here is the ICE when checking is enabled: t.cc:9: internal compiler error: tree check: expected field_decl, have baselink in component_ref_field_offset, at expr.c:5757
Created attachment 11782 [details] fix we need to check first operand for FIELD_DECL before gimpilfying COMPONENT_REF
>fix > >we need to check first operand for FIELD_DECL before gimpilfying COMPONENT_REF this is a wrong fix, it caused some regressions
> It should instead issue the warning "statement is a reference, not call, to function A::f" gcc producing the warnig, if you using -Wall flag
Subject: Bug 26696 Author: jason Date: Wed Sep 6 17:06:00 2006 New Revision: 116724 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=116724 Log: PR c++/26696 * cvt.c (convert_to_void): Replace a subexpression with no side effects with void_zero_node. * tree.c (is_overloaded_fn): Look through COMPONENT_REF. (get_first_fn): Ditto. * decl.c (grokdeclarator): No need to look through COMPONENT_REF. Added: trunk/gcc/testsuite/g++.dg/warn/noeffect8.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/cvt.c trunk/gcc/cp/decl.c trunk/gcc/cp/tree.c trunk/gcc/testsuite/g++.dg/other/component1.C
Subject: Bug 26696 Author: jason Date: Thu Sep 7 22:27:01 2006 New Revision: 116763 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=116763 Log: PR c++/26195 * decl.c (make_rtl_for_nonlocal_decl), (start_preparsed_function): Don't use lbasename on input_filename when calling get_fileinfo. * semantics.c (begin_class_definition): Likewise. * lex.c (cxx_make_type): Likewise. (handle_pragma_interface): Call get_fileinfo on input_filename, not on the parameter to the directive. PR c++/26696 * cvt.c (convert_to_void): Replace a subexpression with no side effects with void_zero_node. * tree.c (is_overloaded_fn): Look through COMPONENT_REF. (get_first_fn): Ditto. * decl.c (grokdeclarator): No need to look through COMPONENT_REF. PR c++/26571 * parser.c (cp_parser_diagnose_invalid_type_name): Handle the case where the name is a type used incorrectly. PR c++/26671 * typeck.c (maybe_warn_about_returning_address_of_local): Look through COMPONENT_REF and ARRAY_REF. PR c++/26102 * name-lookup.c (do_class_using_decl): Try to find the base even if bases_dependent_p. * pt.c (type_dependent_expression_p): A USING_DECL is dependent. PR c++/19809 * pt.c (tsubst_friend_function): Set DECL_INITIAL before pushdecl. Modified: branches/gcc-4_1-branch/gcc/cp/ChangeLog branches/gcc-4_1-branch/gcc/cp/cvt.c branches/gcc-4_1-branch/gcc/cp/decl.c branches/gcc-4_1-branch/gcc/cp/lex.c branches/gcc-4_1-branch/gcc/cp/name-lookup.c branches/gcc-4_1-branch/gcc/cp/parser.c branches/gcc-4_1-branch/gcc/cp/pt.c branches/gcc-4_1-branch/gcc/cp/semantics.c branches/gcc-4_1-branch/gcc/cp/tree.c branches/gcc-4_1-branch/gcc/cp/typeck.c
Subject: Bug 26696 Author: jason Date: Thu Sep 7 22:38:03 2006 New Revision: 116764 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=116764 Log: PR c++/26195 * decl.c (make_rtl_for_nonlocal_decl), (start_preparsed_function): Don't use lbasename on input_filename when calling get_fileinfo. * semantics.c (begin_class_definition): Likewise. * lex.c (cxx_make_type): Likewise. (handle_pragma_interface): Call get_fileinfo on input_filename, not on the parameter to the directive. PR c++/26696 * cvt.c (convert_to_void): Replace a subexpression with no side effects with void_zero_node. * tree.c (is_overloaded_fn): Look through COMPONENT_REF. (get_first_fn): Ditto. * decl.c (grokdeclarator): No need to look through COMPONENT_REF. PR c++/26571 * parser.c (cp_parser_diagnose_invalid_type_name): Handle the case where the name is a type used incorrectly. PR c++/26671 * typeck.c (maybe_warn_about_returning_address_of_local): Look through COMPONENT_REF and ARRAY_REF. PR c++/19809 * pt.c (tsubst_friend_function): Set DECL_INITIAL before pushdecl. Modified: branches/gcc-4_0-branch/gcc/cp/ChangeLog branches/gcc-4_0-branch/gcc/cp/cvt.c branches/gcc-4_0-branch/gcc/cp/decl.c branches/gcc-4_0-branch/gcc/cp/lex.c branches/gcc-4_0-branch/gcc/cp/parser.c branches/gcc-4_0-branch/gcc/cp/pt.c branches/gcc-4_0-branch/gcc/cp/semantics.c branches/gcc-4_0-branch/gcc/cp/tree.c branches/gcc-4_0-branch/gcc/cp/typeck.c
Fixed
The fix is incomplete. The following testcase still fails: ========================== struct A { static void foo(); }; void bar() { A().foo; } ==========================
(In reply to comment #10) > The fix is incomplete. The following testcase still fails: Can you file a new bug report since the orginal testcase here was fixed, even though your testcase is very closely related it really should be filed seperately.
The problem from comment #10 is now tracked in PR 28996.