svn commit: r258204 - in head/contrib/gcc: . cp doc
Pedro F. Giffuni
pfg at FreeBSD.org
Sat Nov 16 01:03:58 UTC 2013
Author: pfg
Date: Sat Nov 16 01:03:56 2013
New Revision: 258204
URL: http://svnweb.freebsd.org/changeset/base/258204
Log:
gcc: Add a new option -Wvla to warn variable length array.
Obtained from: gcc 4.3 (rev. 122851; GPLv2)
MFC after: 3 weeks
Modified:
head/contrib/gcc/ChangeLog.gcc43
head/contrib/gcc/c-decl.c
head/contrib/gcc/c.opt
head/contrib/gcc/cp/decl.c
head/contrib/gcc/doc/invoke.texi
Modified: head/contrib/gcc/ChangeLog.gcc43
==============================================================================
--- head/contrib/gcc/ChangeLog.gcc43 Sat Nov 16 00:31:32 2013 (r258203)
+++ head/contrib/gcc/ChangeLog.gcc43 Sat Nov 16 01:03:56 2013 (r258204)
@@ -49,6 +49,14 @@
* config/i386/i386.c (override_options): Likewise.
* doc/invoke.texi: Likewise.
+2007-03-12 Seongbae Park <seongbae.park at gmail.com>
+
+ * c-decl.c (warn_variable_length_array): New function.
+ Refactored from grokdeclarator to handle warn_vla
+ and handle unnamed array case.
+ (grokdeclarator): Refactored VLA warning case.
+ * c.opt (Wvla): New flag.
+
2007-03-11 Ian Lance Taylor <iant at google.com> (r122831 - partial)
* tree-vrp.c (vrp_int_const_binop): Handle PLUS_EXPR and
Modified: head/contrib/gcc/c-decl.c
==============================================================================
--- head/contrib/gcc/c-decl.c Sat Nov 16 00:31:32 2013 (r258203)
+++ head/contrib/gcc/c-decl.c Sat Nov 16 01:03:56 2013 (r258204)
@@ -3931,6 +3931,61 @@ check_bitfield_type_and_width (tree *typ
}
+
+/* Print warning about variable length array if necessary. */
+
+static void
+warn_variable_length_array (const char *name, tree size)
+{
+ int ped = !flag_isoc99 && pedantic && warn_vla != 0;
+ int const_size = TREE_CONSTANT (size);
+
+ if (ped)
+ {
+ if (const_size)
+ {
+ if (name)
+ pedwarn ("ISO C90 forbids array %qs whose size "
+ "can%'t be evaluated",
+ name);
+ else
+ pedwarn ("ISO C90 forbids array whose size "
+ "can%'t be evaluated");
+ }
+ else
+ {
+ if (name)
+ pedwarn ("ISO C90 forbids variable length array %qs",
+ name);
+ else
+ pedwarn ("ISO C90 forbids variable length array");
+ }
+ }
+ else if (warn_vla > 0)
+ {
+ if (const_size)
+ {
+ if (name)
+ warning (OPT_Wvla,
+ "the size of array %qs can"
+ "%'t be evaluated", name);
+ else
+ warning (OPT_Wvla,
+ "the size of array can %'t be evaluated");
+ }
+ else
+ {
+ if (name)
+ warning (OPT_Wvla,
+ "variable length array %qs is used",
+ name);
+ else
+ warning (OPT_Wvla,
+ "variable length array is used");
+ }
+ }
+}
+
/* Given declspecs and a declarator,
determine the name and type of the object declared
and construct a ..._DECL node for it.
@@ -4329,17 +4384,7 @@ grokdeclarator (const struct c_declarato
nonconstant even if it is (eg) a const variable
with known value. */
size_varies = 1;
-
- if (!flag_isoc99 && pedantic)
- {
- if (TREE_CONSTANT (size))
- pedwarn ("ISO C90 forbids array %qs whose size "
- "can%'t be evaluated",
- name);
- else
- pedwarn ("ISO C90 forbids variable-size array %qs",
- name);
- }
+ warn_variable_length_array (orig_name, size);
if (warn_variable_decl)
warning (0, "variable-sized array %qs", name);
}
Modified: head/contrib/gcc/c.opt
==============================================================================
--- head/contrib/gcc/c.opt Sat Nov 16 00:31:32 2013 (r258203)
+++ head/contrib/gcc/c.opt Sat Nov 16 01:03:56 2013 (r258204)
@@ -432,6 +432,10 @@ Wvariadic-macros
C ObjC C++ ObjC++
Do not warn about using variadic macros when -pedantic
+Wvla
+C ObjC C++ ObjC++ Var(warn_vla) Init(-1) Warning
+Warn if a variable length array is used
+
Wwrite-strings
C ObjC C++ ObjC++ Var(warn_write_strings)
In C++, nonzero means warn about deprecated conversion from string literals to `char *'. In C, similar warning, except that the conversion is of course not deprecated by the ISO C standard.
Modified: head/contrib/gcc/cp/decl.c
==============================================================================
--- head/contrib/gcc/cp/decl.c Sat Nov 16 00:31:32 2013 (r258203)
+++ head/contrib/gcc/cp/decl.c Sat Nov 16 01:03:56 2013 (r258204)
@@ -6702,12 +6702,21 @@ compute_array_index_type (tree name, tre
error ("size of array is not an integral constant-expression");
size = integer_one_node;
}
- else if (pedantic)
+ else if (pedantic && warn_vla != 0)
{
if (name)
- pedwarn ("ISO C++ forbids variable-size array %qD", name);
+ pedwarn ("ISO C++ forbids variable length array %qD", name);
else
- pedwarn ("ISO C++ forbids variable-size array");
+ pedwarn ("ISO C++ forbids variable length array");
+ }
+ else if (warn_vla > 0)
+ {
+ if (name)
+ warning (OPT_Wvla,
+ "variable length array %qD is used", name);
+ else
+ warning (OPT_Wvla,
+ "variable length array is used");
}
if (processing_template_decl && !TREE_CONSTANT (size))
Modified: head/contrib/gcc/doc/invoke.texi
==============================================================================
--- head/contrib/gcc/doc/invoke.texi Sat Nov 16 00:31:32 2013 (r258203)
+++ head/contrib/gcc/doc/invoke.texi Sat Nov 16 01:03:56 2013 (r258204)
@@ -230,7 +230,8 @@ in the following sections.
-Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol
-Wunknown-pragmas -Wno-pragmas -Wunreachable-code @gol
-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol
--Wunused-value -Wunused-variable -Wvariadic-macros @gol
+-Wunused-value -Wunused-variable @gol
+-Wvariadic-macros -Wvla @gol
-Wvolatile-register-var -Wwrite-strings}
@item C-only Warning Options
@@ -3201,6 +3202,13 @@ Warn if variadic macros are used in peda
alternate syntax when in pedantic ISO C99 mode. This is default.
To inhibit the warning messages, use @option{-Wno-variadic-macros}.
+ at item -Wvla
+ at opindex Wvla
+ at opindex Wno-vla
+Warn if variable length array is used in the code.
+ at option{-Wno-vla} will prevent the @option{-pedantic} warning of
+the variable length array.
+
@item -Wvolatile-register-var
@opindex Wvolatile-register-var
@opindex Wno-volatile-register-var
More information about the svn-src-all
mailing list