[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #10 from ht990332 at gmail dot com 2007-08-20 08:51 --- Will 4.2.2 get this fix or only trunk? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #9 from dberlin at gcc dot gnu dot org 2007-08-20 01:54 --- All should be fixed -- dberlin at gcc dot gnu dot org changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #8 from dberlin at gcc dot gnu dot org 2007-08-19 23:23 --- Subject: Bug 32716 Author: dberlin Date: Sun Aug 19 23:23:29 2007 New Revision: 127629 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=127629 Log: 2007-08-19 Daniel Berlin <[EMAIL PROTECTED]> Fix PR 32772 Fix PR 32716 Fix PR 32328 Fix PR 32303 * tree-flow.h (struct stmt_ann_d): Remove makes_clobbering_call. * tree-ssa-alias.c (init_transitive_clobber_worklist): Add on_worklist argument and avoid adding things to worklist multiple times. (add_to_worklist): Ditto. (mark_aliases_call_clobbered): Mark entire structure clobbered if single SFT is clobbered. (set_initial_properties): Ditto. (compute_call_clobbered): Update for changes to function arguments. (create_overlap_variables_for): Always create SFT for offset 0. (create_structure_vars): Handle PHI's, since we are in SSA form at this point. * tree-ssa-loop-ivopts.c (get_ref_tag): Don't return subvars. * tree-ssa-operands.c (access_can_touch_variable): Don't handle TARGET_MEM_REF. (add_vars_for_offset): Figure out aliases from access + points-to. (add_virtual_operand): Use add_vars-for_offset. (get_tmr_operands): Update for NMT changes, rewrite to be correct. (add_call_clobber_ops): Remove makes_clobbering_call set. (get_expr_operands): Always pass through the INDIRECT_REF reference. * tree-ssa-structalias.c (struct constraint_graph): Remove variables member. Add pe, pe_rep, pointer_label, loc_label, pointed_by, points_to, address_taken, pt_used, number_incoming. (FIRST_ADDR_NODE): Removed. (merge_graph_nodes): Remove broken code for the moment. (init_graph): New function. (build_pred_graph): Remove code to init_graph. Add location equivalence support. (struct scc_info): Rename roots to deleted. (scc_visit): Ditto. (init_scc_info): Ditto (init_topo_info): Use graph->size. (compute_topo_order): Ditto. (do_da_constraint): Removed. (do_sd_constraint): Remove calls to find(). set_union_with_increment should always get 0 as last arg here. (do_complex_constraint): Replace do_da_constraint with assert. Stop calling find. (struct equiv_class_label): New. (pointer_equiv_class_table): Ditto. (location_equiv_class_table): Ditto. (equiv_class_label_hash): Ditto. (equiv_class_label_eq): Ditto (equiv_class_lookup): Ditto. (equiv_class_ladd): Ditto. (pointer_equiv_class): Ditto. (location_equiv_class): Ditto. (condense_visit): Rename and rewrite from label_visit to do only SCC related stuff for HU. (label_visit): Do HU work for HU. (perform_var_substitution): Update to do HU and location equivalence. (free_var_substitution_info): Update to free HU and location equivalence structures. */ (find_equivalent_node): Update for pointer but not location equivalence. (unite_pointer_equivalences): New function. (move_complex_constraints): Rewrite to only do moving. (rewrite_constraints): Split out of move_complex_constraints. (solve_graph): Use graph->size. (process_constraint_1): Add from_call argument, use it. Split *a = &b into two constraints. (process_constraint): Use new process_constraint_1. (get_constraint_for_component_ref): Handle bitmaxsize == -1 case. (get_constraint_for): Handle non-pointer integers properly. Remove code that used to handle structures. (handle_ptr_arith): Fix a few bugs in pointer arithmetic handling with unknown addends. (handle_rhs_call): New function. (find_func_aliases): Use handle_rhs_call. (set_uids_in_ptset): Add an assert. (set_used_smts): Fix bug in not considering unified vars. (compute_tbaa_pruning): Stop initing useless iteration_obstack. (compute_points_to_sets): Update for other function changes. (delete_points_to_sets): Ditto. (ipa_pta_execute): Ditto. (pass_ipa_pta): We need to update SSA after ipa_pta. Modified: trunk/gcc/ChangeLog trunk/gcc/tree-flow.h trunk/gcc/tree-ssa-alias.c trunk/gcc/tree-ssa-loop-ivopts.c trunk/gcc/tree-ssa-operands.c trunk/gcc/tree-ssa-structalias.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
-- mmitchel at gcc dot gnu dot org changed: What|Removed |Added Priority|P3 |P1 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
-- mmitchel at gcc dot gnu dot org changed: What|Removed |Added Target Milestone|4.2.1 |4.2.2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
-- pinskia at gcc dot gnu dot org changed: What|Removed |Added Target Milestone|4.3.0 |4.2.1 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #7 from rguenther at suse dot de 2007-07-11 08:32 --- Subject: Re: [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem. On Tue, 10 Jul 2007, dberlin at dberlin dot org wrote: > On 10 Jul 2007 15:32:51 -, rguenther at suse dot de > <[EMAIL PROTECTED]> wrote: > > > > > > --- Comment #5 from rguenther at suse dot de 2007-07-10 15:32 --- > > Subject: Re: [4.2/4.3 Regression] Wrong code generation. > > Alias and C++ virtual bases problem. > > > > On Tue, 10 Jul 2007, ramana dot radhakrishnan at celunite dot com wrote: > > > > > --- Comment #4 from ramana dot radhakrishnan at celunite dot com > > > 2007-07-10 15:14 --- > > > (In reply to comment #3) > > > > Fixed with "take3.diff". > > > > > > > > > > Did you forget to attach take3.diff ? > > > > No, that was a hint to Danny ;) > > > You never told me whether omnetpp/xalanbmc were still failing with it or not > :) Doh! Yes, they did. You never got around sending me the variant with more asserts either ;) Richard. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #6 from dberlin at gcc dot gnu dot org 2007-07-10 16:59 --- Subject: Re: [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem. On 10 Jul 2007 15:32:51 -, rguenther at suse dot de <[EMAIL PROTECTED]> wrote: > > > --- Comment #5 from rguenther at suse dot de 2007-07-10 15:32 --- > Subject: Re: [4.2/4.3 Regression] Wrong code generation. > Alias and C++ virtual bases problem. > > On Tue, 10 Jul 2007, ramana dot radhakrishnan at celunite dot com wrote: > > > --- Comment #4 from ramana dot radhakrishnan at celunite dot com > > 2007-07-10 15:14 --- > > (In reply to comment #3) > > > Fixed with "take3.diff". > > > > > > > Did you forget to attach take3.diff ? > > No, that was a hint to Danny ;) You never told me whether omnetpp/xalanbmc were still failing with it or not :) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #5 from rguenther at suse dot de 2007-07-10 15:32 --- Subject: Re: [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem. On Tue, 10 Jul 2007, ramana dot radhakrishnan at celunite dot com wrote: > --- Comment #4 from ramana dot radhakrishnan at celunite dot com > 2007-07-10 15:14 --- > (In reply to comment #3) > > Fixed with "take3.diff". > > > > Did you forget to attach take3.diff ? No, that was a hint to Danny ;) Richard. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #4 from ramana dot radhakrishnan at celunite dot com 2007-07-10 15:14 --- (In reply to comment #3) > Fixed with "take3.diff". > Did you forget to attach take3.diff ? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #3 from rguenth at gcc dot gnu dot org 2007-07-10 12:52 --- Fixed with "take3.diff". -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716
[Bug c++/32716] [4.2/4.3 Regression] Wrong code generation. Alias and C++ virtual bases problem.
--- Comment #2 from rguenth at gcc dot gnu dot org 2007-07-10 11:29 --- This is an aliasing problem (or rather a C++ FE problem): # SFT.41_31 = VDEF d.D.2508.a = 0; x.0_10 = (struct A *) &d; ... D.2747_16 = x.0_10 + D.2746_15; # VUSE D.2748_17 = D.2747_16->a; D.2749_18 = D.2748_17 + 1; # SFT.44_34 = VDEF D.2747_16->a = D.2749_18; # VUSE D.2707_1 = d.D.2508.a; D.2706_2 = D.2707_1 != 1; return D.2706_2; note how we don't identify the contrived access through the virtual base with the zero-initialization and use in main(). Instead, it seems to alias with iftmp.1_6 = (int (*__vtbl_ptr_type) (void) *) D.2735_5; # SFT.44_21 = VDEF d.D.2504._vptr.C = iftmp.1_6; ... # SFT.44_27 = VDEF d.D.2504._vptr.C = &_ZTV1D[3]; Of course the original trees created for the virtual base access is "somewhat" contrieved: (void) ((struct A *) (struct D *) x + (long unsigned int) *(long int *) (((struct D *) x)->D.2504._vptr.C + 0xffe8))->a++ ; while in main() we manage to do: struct D d; <>> >>; <>> >>; <>> >>; return = d.D.2508.a != 1; -- rguenth at gcc dot gnu dot org changed: What|Removed |Added CC||dberlin at gcc dot gnu dot ||org, rguenth at gcc dot gnu ||dot org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 GCC target triplet|arm-none-eabi | Keywords||alias, wrong-code Known to fail||4.2.0 4.2.1 4.3.0 Known to work||4.1.2 Last reconfirmed|-00-00 00:00:00 |2007-07-10 11:29:31 date|| Summary|Wrong code generation. |[4.2/4.3 Regression] Wrong |Inlining problem. |code generation. Alias and ||C++ virtual bases problem. Target Milestone|--- |4.3.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32716