Warn about problems with auto-profile data.
Wuse-after-free
-Common Var(warn_use_after_free) Warning
-Warn for uses of pointers to deallocated storage.
+Common Alias(Wuse-after-free=, 1, 0) Warning
Wuse-after-free=
Common Joined RejectNegative UInteger Var(warn_use_after_free) Warning IntegerRange(0, 3)
if (targetm.cxx.cdtor_returns_this ())
if (tree val = DECL_ARGUMENTS (cdtor))
{
- suppress_warning (val, OPT_Wuse_after_free);
+ suppress_warning (val, OPT_Wuse_after_free_);
return val;
}
if (!var)
ref = NULL_TREE;
/* Don't warn for cases like when a cdtor returns 'this' on ARM. */
- else if (warning_suppressed_p (var, OPT_Wuse_after_free))
+ else if (warning_suppressed_p (var, OPT_Wuse_after_free_))
return;
else if (DECL_ARTIFICIAL (var))
ref = NULL_TREE;
if (!m_early_checks_p
|| (equality && warn_use_after_free < 3)
|| (maybe && warn_use_after_free < 2)
- || warning_suppressed_p (use_stmt, OPT_Wuse_after_free))
+ || warning_suppressed_p (use_stmt, OPT_Wuse_after_free_))
return;
const tree inval_decl = gimple_call_fndecl (inval_stmt);
auto_diagnostic_group d;
- if ((ref && warning_at (use_loc, OPT_Wuse_after_free,
+ if ((ref && warning_at (use_loc, OPT_Wuse_after_free_,
(maybe
? G_("pointer %qE may be used after %qD")
: G_("pointer %qE used after %qD")),
ref, inval_decl))
- || (!ref && warning_at (use_loc, OPT_Wuse_after_free,
+ || (!ref && warning_at (use_loc, OPT_Wuse_after_free_,
(maybe
? G_("pointer may be used after %qD")
: G_("pointer used after %qD")),
{
location_t loc = gimple_location (inval_stmt);
inform (loc, "call to %qD here", inval_decl);
- suppress_warning (use_stmt, OPT_Wuse_after_free);
+ suppress_warning (use_stmt, OPT_Wuse_after_free_);
}
return;
}
--- /dev/null
+/* Verify -Wuse-after-free is an alias for -Wuse-after-free=1. */
+/* { dg-do compile } */
+/* { dg-options "-O0 -Wuse-after-free" } */
+
+#if __cplusplus
+# define EXTERN_C extern "C"
+#else
+# define EXTERN_C extern
+#endif
+
+EXTERN_C void free (void *);
+
+void sink (void *);
+
+void warn_call_after_free (void *p)
+{
+ free (p);
+ sink (p); // { dg-warning "pointer 'p' used" }
+}
+
+void warn_cond_call_after_free (void *p, int c)
+{
+ free (p);
+ if (c)
+ sink (p);
+}