Bug 36400 - [4.3 Regression] points-to results wrong
Summary: [4.3 Regression] points-to results wrong
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 4.3.1
: P2 normal
Target Milestone: 4.4.0
Assignee: Not yet assigned to anyone
URL:
Keywords: alias, wrong-code
Depends on:
Blocks:
 
Reported: 2008-05-31 10:23 UTC by Richard Biener
Modified: 2009-06-17 12:38 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work: 4.1.2 4.4.0
Known to fail: 4.2.4 4.3.1 4.3.4
Last reconfirmed: 2008-05-31 10:33:32


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Richard Biener 2008-05-31 10:23:07 UTC
In

struct barstruct { char const* some_string; };

void changethepointer(struct barstruct***);

void baz()
{
  struct barstruct bar1;
  struct barstruct* barptr = &bar1;
  struct barstruct** barptr2 = &barptr;
  changethepointer(&barptr2);
  barptr->some_string = "Everything OK";
}

the store to barptr->some_string is removed because points-to figures that
barptr points to bar1, which it doesn't necessarily do after the call to
changethepointer - it should point to anything.
Comment 1 Richard Biener 2008-05-31 10:33:32 UTC
The patch from

http://gcc.gnu.org/ml/gcc-patches/2008-05/msg02060.html

seems to work.
Comment 2 Richard Biener 2008-06-12 10:24:39 UTC
The patch that rewrites call-clobbering deals with this.
Comment 3 Richard Biener 2008-06-12 13:31:57 UTC
Actually this is a regression.
Comment 4 Richard Biener 2008-06-27 18:54:36 UTC
Subject: Bug 36400

Author: rguenth
Date: Fri Jun 27 18:53:43 2008
New Revision: 137197

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=137197
Log:
2008-06-27  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/36400
	PR tree-optimization/36373
	PR tree-optimization/36344
	* tree-ssa-structalias.c (var_escaped, escaped_tree, escaped_id,
	var_nonlocal, nonlocal_tree, nonlocal_id): New globals
	(update_alias_info): Remove call clobbering code.
	(make_constraint_to): New helper function.
	(make_escape_constraint): Likewise.
	(handle_rhs_call): Use it on all pointer containing arguments.
	Also mark the static chain escaped.
	(handle_lhs_call): Make constraints from NONLOCAL and ESCAPED
	instead of ANYTHING.
	(make_constraint_from): New helper split out from ...
	(make_constraint_from_anything): ... here.
	(find_func_aliases): Add constraints for escape sites.
	(intra_create_variable_infos): Make constraints from NONLOCAL
	for parameters.
	(find_what_p_points_to): Interpret NONLOCAL and ESCAPED the same
	as ANYTHING.
	(clobber_what_p_points_to): Remove.
	(clobber_what_escaped): New function.
	(init_base_vars): Init NONLOCAL and ESCAPED.
	(do_sd_constraint): Do not propagate the solution from ESCAPED
	but use ESCAPED as a placeholder.
	(solve_graph): Likewise.
	* tree-flow.h (clobber_what_p_points_to): Remove.
	(clobber_what_escaped): Declare.
	* tree-ssa-alias.c (set_initial_properties): Call it.
	Remove code clobbering escaped pointers.

	* gcc.dg/torture/pr36373-1.c: New testcase.
	* gcc.dg/torture/pr36373-2.c: Likewise.
	* gcc.dg/torture/pr36373-3.c: Likewise.
	* gcc.dg/torture/pr36373-4.c: Likewise.
	* gcc.dg/torture/pr36373-5.c: Likewise.
	* gcc.dg/torture/pr36373-6.c: Likewise.
	* gcc.dg/torture/pr36373-7.c: Likewise.
	* gcc.dg/torture/pr36373-8.c: Likewise.
	* gcc.dg/torture/pr36373-9.c: Likewise.
	* gcc.dg/torture/pr36373-10.c: Likewise.
	* gcc.dg/torture/pr36400.c: Likewise.
	* gcc.c-torture/execute/pta-field-1.c: Likewise.
	* gcc.c-torture/execute/pta-field-2.c: Likewise.
	* gcc.dg/tree-ssa/loadpre8.c: Remove XFAIL.
	* gcc.dg/tree-ssa/pr24287.c: XFAIL.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/pr24287.c
    trunk/gcc/tree-flow.h
    trunk/gcc/tree-ssa-alias.c
    trunk/gcc/tree-ssa-structalias.c

Comment 5 Richard Biener 2008-06-27 21:55:38 UTC
Subject: Bug 36400

Author: rguenth
Date: Fri Jun 27 21:54:42 2008
New Revision: 137204

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=137204
Log:
2008-06-27  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/36400
	PR tree-optimization/36373
	PR tree-optimization/36344
	* tree-ssa-structalias.c (var_escaped, escaped_tree, escaped_id,
	var_nonlocal, nonlocal_tree, nonlocal_id): New globals
	(update_alias_info): Remove call clobbering code.
	(make_constraint_to): New helper function.
	(make_escape_constraint): Likewise.
	(handle_rhs_call): Use it on all pointer containing arguments.
	Also mark the static chain escaped.
	(handle_lhs_call): Make constraints from NONLOCAL and ESCAPED
	instead of ANYTHING.
	(make_constraint_from): New helper split out from ...
	(make_constraint_from_anything): ... here.
	(find_func_aliases): Add constraints for escape sites.
	(intra_create_variable_infos): Make constraints from NONLOCAL
	for parameters.
	(find_what_p_points_to): Interpret NONLOCAL and ESCAPED the same
	as ANYTHING.
	(clobber_what_p_points_to): Remove.
	(clobber_what_escaped): New function.
	(init_base_vars): Init NONLOCAL and ESCAPED.
	(do_sd_constraint): Do not propagate the solution from ESCAPED
	but use ESCAPED as a placeholder.
	(solve_graph): Likewise.
	* tree-flow.h (clobber_what_p_points_to): Remove.
	(clobber_what_escaped): Declare.
	* tree-ssa-alias.c (set_initial_properties): Call it.
	Remove code clobbering escaped pointers.

	* gcc.dg/torture/pr36373-1.c: New testcase.
	* gcc.dg/torture/pr36373-2.c: Likewise.
	* gcc.dg/torture/pr36373-3.c: Likewise.
	* gcc.dg/torture/pr36373-4.c: Likewise.
	* gcc.dg/torture/pr36373-5.c: Likewise.
	* gcc.dg/torture/pr36373-6.c: Likewise.
	* gcc.dg/torture/pr36373-7.c: Likewise.
	* gcc.dg/torture/pr36373-8.c: Likewise.
	* gcc.dg/torture/pr36373-9.c: Likewise.
	* gcc.dg/torture/pr36373-10.c: Likewise.
	* gcc.dg/torture/pr36400.c: Likewise.
	* gcc.c-torture/execute/pta-field-1.c: Likewise.
	* gcc.c-torture/execute/pta-field-2.c: Likewise.
	* gcc.dg/tree-ssa/loadpre8.c: Remove XFAIL.
	* gcc.dg/tree-ssa/pr24287.c: XFAIL.

Added:
    trunk/gcc/testsuite/gcc.c-torture/execute/pta-field-1.c
    trunk/gcc/testsuite/gcc.c-torture/execute/pta-field-2.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-1.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-10.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-2.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-3.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-4.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-5.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-6.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-7.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-8.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36373-9.c
    trunk/gcc/testsuite/gcc.dg/torture/pr36400.c

Comment 6 Richard Biener 2008-06-28 11:19:55 UTC
Fixed for 4.4.0.
Comment 7 Ramana Radhakrishnan 2009-01-15 10:38:51 UTC
Change CC addresses.
Comment 8 Richard Biener 2009-01-16 23:10:08 UTC
I have no plans for fixing this on the branches.
Comment 9 Joseph S. Myers 2009-03-31 20:52:48 UTC
Closing 4.2 branch.
Comment 10 Richard Biener 2009-06-17 12:38:20 UTC
WONTFIX for 4.3.  Alias fixes are considered too risky at this stage.