apply_constraints (const superedge *,
region_model &model,
region_model_context *ctxt,
- std::unique_ptr<rejected_constraint> */*out_rc*/) const
+ std::unique_ptr<rejected_constraint> *out_rc) const
{
const ggoto &goto_stmt = get_ggoto ();
tree dest = gimple_goto_dest (&goto_stmt);
= mgr->get_ptr_svalue (ptr_type_node, dst_label_reg);
if (!model.add_constraint (dest_sval, EQ_EXPR, dst_label_ptr, ctxt))
- return false;
+ {
+ if (out_rc)
+ *out_rc
+ = std::make_unique <rejected_op_constraint> (model,
+ dest_sval,
+ EQ_EXPR,
+ dst_label_ptr);
+ return false;
+ }
}
return true;
{
bool sat = add_constraint (lhs, op, rhs, ctxt);
if (!sat && out)
- *out = std::make_unique <rejected_op_constraint> (*this, lhs, op, rhs);
+ {
+ const svalue *lhs_sval = get_rvalue (lhs, nullptr);
+ const svalue *rhs_sval = get_rvalue (rhs, nullptr);
+ *out = std::make_unique <rejected_op_constraint> (*this,
+ lhs_sval, op, rhs_sval);
+ }
return sat;
}
rejected_op_constraint::dump_to_pp (pretty_printer *pp) const
{
region_model m (m_model);
- const svalue *lhs_sval = m.get_rvalue (m_lhs, nullptr);
- const svalue *rhs_sval = m.get_rvalue (m_rhs, nullptr);
- lhs_sval->dump_to_pp (pp, true);
+ m_lhs->dump_to_pp (pp, true);
pp_printf (pp, " %s ", op_symbol_code (m_op));
- rhs_sval->dump_to_pp (pp, true);
+ m_rhs->dump_to_pp (pp, true);
}
/* class rejected_default_case : public rejected_constraint. */
{
public:
rejected_op_constraint (const region_model &model,
- tree lhs, enum tree_code op, tree rhs)
+ const svalue *lhs, enum tree_code op, const svalue *rhs)
: rejected_constraint (model),
m_lhs (lhs), m_op (op), m_rhs (rhs)
{}
void dump_to_pp (pretty_printer *pp) const final override;
- tree m_lhs;
+ const svalue *m_lhs;
enum tree_code m_op;
- tree m_rhs;
+ const svalue *m_rhs;
};
class rejected_default_case : public rejected_constraint
--- /dev/null
+/* { dg-additional-options "-O2" } */
+
+char __printf_buffer_spec;
+int __printf_buffer_offset;
+void *__printf_buffer_ptr;
+void __printf_buffer() {
+ int step0_jumps[] = {&&do_flag_hash - &&do_form_unknown};
+do_flag_hash:
+ __printf_buffer_offset = __printf_buffer_spec /* { dg-warning "stack-based buffer over-read" } */
+ ? &&do_form_unknown - &&do_form_unknown
+ : step0_jumps[' '];
+ __printf_buffer_ptr = &&do_form_unknown + __printf_buffer_offset;
+ goto *__printf_buffer_ptr;
+do_form_unknown:
+}
--- /dev/null
+int __wcslen_spec, __wcslen_offset;
+void *__wcslen_ptr;
+long __wcslen() {
+ &&do_form_binary;
+ __wcslen_offset =
+ __wcslen_spec ? &&do_form_unknown - &&do_form_unknown : L' ';
+ __wcslen_ptr = &&do_form_unknown + __wcslen_offset;
+ goto *__wcslen_ptr;
+do_form_binary:
+do_form_unknown:
+} /* { dg-warning "return-value" } */