+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
--- /dev/null
+/* 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);
+}
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 */
};
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
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));