Fix typo in merge_call_lhs_flags

gcc/ChangeLog:

2021-03-29  Jan Hubicka  <hubicka@ucw.cz>

	* ipa-modref.c (merge_call_lhs_flags): Correct handling of deref.
	(analyze_ssa_name_flags): Fix typo in comment.

gcc/testsuite/ChangeLog:

2021-03-29  Jan Hubicka  <hubicka@ucw.cz>

	* gcc.c-torture/compile/pr99751.c: New test.
This commit is contained in:
Jan Hubicka 2021-03-29 20:09:35 +02:00
parent 864caa158f
commit dd64aaafe6
2 changed files with 23 additions and 3 deletions

View File

@ -1545,9 +1545,9 @@ merge_call_lhs_flags (gcall *call, int arg, int index, bool deref,
tree lhs = gimple_call_lhs (call);
analyze_ssa_name_flags (lhs, lattice, depth + 1, ipa);
if (deref)
lattice[index].merge (lattice[SSA_NAME_VERSION (lhs)]);
else
lattice[index].merge_deref (lattice[SSA_NAME_VERSION (lhs)], false);
else
lattice[index].merge (lattice[SSA_NAME_VERSION (lhs)]);
}
/* In the case of memory store we can do nothing. */
else
@ -1621,7 +1621,7 @@ analyze_ssa_name_flags (tree name, vec<modref_lattice> &lattice, int depth,
else if (gcall *call = dyn_cast <gcall *> (use_stmt))
{
tree callee = gimple_call_fndecl (call);
/* Return slot optiomization would require bit of propagation;
/* Return slot optimization would require bit of propagation;
give up for now. */
if (gimple_call_return_slot_opt_p (call)
&& gimple_call_lhs (call) != NULL_TREE

View File

@ -0,0 +1,20 @@
int *ptr1 = 0, **ptr2 = &ptr1;
int *identity(int *p)
{
return p;
}
void store_to_c(int *p)
{
*ptr2 = identity(p);
}
int main()
{
int f;
store_to_c(&f);
if (ptr1 != &f)
__builtin_abort();
return 0;
}