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

--- Comment #2 from rwgk at yahoo dot com 2010-12-17 22:34:16 UTC ---
Using a binary search I found that svn rev. 161579 introduced the ICE.

(Note that I had to replace gcc/config/i386/i386.md with rev. 161594
since gcc doesn't build otherwise.)

% svn log -v -r 161579
------------------------------------------------------------------------
r161579 | jason | 2010-06-29 17:50:57 -0700 (Tue, 29 Jun 2010) | 40 lines
Changed paths:
   M /trunk/gcc/cp/ChangeLog
   M /trunk/gcc/cp/call.c
   M /trunk/gcc/cp/class.c
   M /trunk/gcc/cp/cp-tree.h
   M /trunk/gcc/cp/decl.c
   M /trunk/gcc/cp/method.c
   M /trunk/gcc/cp/search.c
   M /trunk/gcc/cp/semantics.c
   M /trunk/gcc/cp/tree.c

        Machinery to support implicit delete/move.
        * cp-tree.h: (struct lang_type_class): Add lazy_move_assign,
        has_complex_move_ctor, has_complex_move_assign bitfields.
        (CLASSTYPE_LAZY_MOVE_ASSIGN): New.
        (TYPE_HAS_COMPLEX_MOVE_ASSIGN): New.
        (TYPE_HAS_COMPLEX_MOVE_CTOR): New.
        (enum special_function_kind): Add sfk_move_assignment.
        (LOOKUP_SPECULATIVE): New.
        * call.c (build_over_call): Return early if it's set.
        (build_over_call): Use trivial_fn_p.
        * class.c (check_bases): If the base has no default constructor,
        the derived one is non-trivial.  Handle move ctor/op=.
        (check_field_decl): Likewise.
        (check_bases_and_members): Handle move ctor/op=.
        (add_implicitly_declared_members): Handle CLASSTYPE_LAZY_MOVE_ASSIGN.
        (type_has_move_constructor, type_has_move_assign): New.
        * decl.c (grok_special_member_properties): Handle move ctor/op=.
        * method.c (type_has_trivial_fn, type_set_nontrivial_flag): New.
        (trivial_fn_p): New.
        (do_build_copy_constructor): Use it.
        (do_build_assign_ref): Likewise.  Handle move assignment.
        (build_stub_type, build_stub_object, locate_fn_flags): New.
        (locate_ctor): Use locate_fn_flags.
        (locate_copy, locate_dtor): Remove.
        (get_dtor, get_default_ctor, get_copy_ctor, get_copy_assign): New.
        (process_subob_fn, synthesized_method_walk): New.
        (maybe_explain_implicit_delete): New.
        (implicitly_declare_fn): Use synthesized_method_walk,
        type_has_trivial_fn, and type_set_nontrivial_flag.
        (defaulted_late_check): Set DECL_DELETED_FN.
        (defaultable_fn_check): Handle sfk_move_assignment.
        (lazily_declare_fn): Clear CLASSTYPE_LAZY_* early.  Don't declare
        implicitly deleted move ctor/op=.
        * search.c (lookup_fnfields_1): Handle sfk_move_assignment.
        (lookup_fnfields_slot): New.
        * semantics.c (omp_clause_info_fndecl): Remove.
        (cxx_omp_create_clause_info): Use get_default_ctor, get_copy_ctor,
        get_copy_assign, trivial_fn_p.
        (trait_expr_value): Adjust call to locate_ctor.
        * tree.c (special_function_p): Handle sfk_move_assignment.
------------------------------------------------------------------------

Reply via email to