diff options
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/builtins.c | 11 | ||||
-rw-r--r-- | gcc/common.opt | 4 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 9 |
4 files changed, 27 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2fed6fa..d65f752 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/builtins.c b/gcc/builtins.c index 1f263073..b79ce6f 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -6096,7 +6096,8 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode, break; case BUILT_IN_FREE: - maybe_emit_free_warning (exp); + if (warn_free_nonheap_object) + maybe_emit_free_warning (exp); break; default: /* just do library call, if unknown builtin */ @@ -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, diff --git a/gcc/common.opt b/gcc/common.opt index 63331d3..ba3e254 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index cbf4276..62a841c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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. |