re PR middle-end/38509 (Bogus "attempt to free a non-heap object" warning)
2011-08-23 Mark Heffernan <meheff@google.com> PR middle-end/38509 * common.opt (Wfree-nonheap-object): New option. * doc/invoke.texi (Warning options): Document -Wfree-nonheap-object. * builtins.c (maybe_emit_free_warning): Add OPT_Wfree_nonheap_object to warning. (expand_builtin): Make warning conditional. From-SVN: r178004
This commit is contained in:
parent
82feeb8d68
commit
a3a704a495
@ -1,3 +1,12 @@
|
||||
2011-08-23 Mark Heffernan <meheff@google.com>
|
||||
|
||||
PR middle-end/38509
|
||||
* common.opt (Wfree-nonheap-object): New option.
|
||||
* doc/invoke.texi (Warning options): Document -Wfree-nonheap-object.
|
||||
* builtins.c (maybe_emit_free_warning): Add OPT_Wfree_nonheap_object
|
||||
to warning.
|
||||
(expand_builtin): Make warning conditional.
|
||||
|
||||
2011-08-23 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/i386.md (type): Add imulx, ishiftx and rotatex.
|
||||
|
@ -6096,6 +6096,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
|
||||
break;
|
||||
|
||||
case BUILT_IN_FREE:
|
||||
if (warn_free_nonheap_object)
|
||||
maybe_emit_free_warning (exp);
|
||||
break;
|
||||
|
||||
@ -11915,11 +11916,11 @@ maybe_emit_free_warning (tree exp)
|
||||
return;
|
||||
|
||||
if (SSA_VAR_P (arg))
|
||||
warning_at (tree_nonartificial_location (exp),
|
||||
0, "%Kattempt to free a non-heap object %qD", exp, arg);
|
||||
warning_at (tree_nonartificial_location (exp), OPT_Wfree_nonheap_object,
|
||||
"%Kattempt to free a non-heap object %qD", exp, arg);
|
||||
else
|
||||
warning_at (tree_nonartificial_location (exp),
|
||||
0, "%Kattempt to free a non-heap object", exp);
|
||||
warning_at (tree_nonartificial_location (exp), OPT_Wfree_nonheap_object,
|
||||
"%Kattempt to free a non-heap object", exp);
|
||||
}
|
||||
|
||||
/* Fold a call to __builtin_object_size with arguments PTR and OST,
|
||||
|
@ -543,6 +543,10 @@ Wframe-larger-than=
|
||||
Common RejectNegative Joined UInteger
|
||||
-Wframe-larger-than=<number> Warn if a function's stack frame requires more than <number> bytes
|
||||
|
||||
Wfree-nonheap-object
|
||||
Common Var(warn_free_nonheap_object) Init(1) Warning
|
||||
Warn when attempting to free a non-heap object
|
||||
|
||||
Winline
|
||||
Common Var(warn_inline) Warning
|
||||
Warn when an inlined function cannot be inlined
|
||||
|
@ -244,7 +244,8 @@ Objective-C and Objective-C++ Dialects}.
|
||||
-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
|
||||
-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
|
||||
-Wformat-security -Wformat-y2k @gol
|
||||
-Wframe-larger-than=@var{len} -Wjump-misses-init -Wignored-qualifiers @gol
|
||||
-Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol
|
||||
-Wignored-qualifiers @gol
|
||||
-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol
|
||||
-Winit-self -Winline -Wmaybe-uninitialized @gol
|
||||
-Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
|
||||
@ -3960,6 +3961,12 @@ via @code{alloca}, variable-length arrays, or related constructs
|
||||
is not included by the compiler when determining
|
||||
whether or not to issue a warning.
|
||||
|
||||
@item -Wno-free-nonheap-object
|
||||
@opindex Wno-free-nonheap-object
|
||||
@opindex Wfree-nonheap-object
|
||||
Do not warn when attempting to free an object which was not allocated
|
||||
on the heap.
|
||||
|
||||
@item -Wstack-usage=@var{len}
|
||||
@opindex Wstack-usage
|
||||
Warn if the stack usage of a function might be larger than @var{len} bytes.
|
||||
|
Loading…
Reference in New Issue
Block a user