Commit fb0653ab by Ilya Enkovich Committed by Ilya Enkovich

re PR tree-optimization/65002 (ICE: Segmentation fault)

gcc/

	PR tree-optimization/65002
	* tree-cfg.c (pass_data_fixup_cfg): Don't update
	SSA on start.
	* tree-sra.c (some_callers_have_no_vuse_p): New.
	(ipa_early_sra): Reject functions whose callers
	assume function is read only.

gcc/testsuite/

	PR tree-optimization/65002
	* gcc.dg/pr65002.C: New.

From-SVN: r220679
parent 3c780bb2
2015-02-13 Ilya Enkovich <ilya.enkovich@intel.com>
PR tree-optimization/65002
* tree-cfg.c (pass_data_fixup_cfg): Don't update
SSA on start.
* tree-sra.c (some_callers_have_no_vuse_p): New.
(ipa_early_sra): Reject functions whose callers
assume function is read only.
2015-02-13 Richard Biener <rguenther@suse.de>
PR lto/65015
......
2015-02-13 Ilya Enkovich <ilya.enkovich@intel.com>
PR tree-optimization/65002
* gcc.dg/pr65002.C: New.
2015-02-13 Marek Polacek <polacek@redhat.com>
PR c/65040
......
/* PR tree-optimization/65002 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
namespace fastmath {
template <typename T> float floor(const T &) __attribute__((const));
template <typename T> float floor(const T &p1) { return p1; }
}
using fastmath::floor;
class A {
public:
A(int, int);
virtual int m_fn1(float) const;
};
class B : A {
public:
B(int, int p2) : A(entity, p2) {}
int m_fn1(float p1) const { long b(floor(p1)); }
int entity;
};
int a;
void Convert() {
if (int *c = 0)
B(*c, a);
}
......@@ -8754,7 +8754,7 @@ const pass_data pass_data_fixup_cfg =
PROP_cfg, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
TODO_update_ssa_only_virtuals, /* todo_flags_start */
0, /* todo_flags_start */
0, /* todo_flags_finish */
};
......
......@@ -4890,6 +4890,20 @@ some_callers_have_mismatched_arguments_p (struct cgraph_node *node,
return false;
}
/* Return false if all callers have vuse attached to a call statement. */
static bool
some_callers_have_no_vuse_p (struct cgraph_node *node,
void *data ATTRIBUTE_UNUSED)
{
struct cgraph_edge *cs;
for (cs = node->callers; cs; cs = cs->next_caller)
if (!cs->call_stmt || !gimple_vuse (cs->call_stmt))
return true;
return false;
}
/* Convert all callers of NODE. */
static bool
......@@ -5116,6 +5130,15 @@ ipa_early_sra (void)
goto simple_out;
}
if (node->call_for_symbol_thunks_and_aliases
(some_callers_have_no_vuse_p, NULL, true))
{
if (dump_file)
fprintf (dump_file, "There are callers with no VUSE attached "
"to a call stmt.\n");
goto simple_out;
}
bb_dereferences = XCNEWVEC (HOST_WIDE_INT,
func_param_count
* last_basic_block_for_fn (cfun));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment