gcc: Add a new option -Wvla to warn variable length array.
Obtained from: gcc 4.3 (rev. 122851; GPLv2) MFC after: 3 weeks
This commit is contained in:
parent
ef361f73c1
commit
43666eab78
@ -49,6 +49,14 @@
|
||||
* config/i386/i386.c (override_options): Likewise.
|
||||
* doc/invoke.texi: Likewise.
|
||||
|
||||
2007-03-12 Seongbae Park <seongbae.park@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@google.com> (r122831 - partial)
|
||||
|
||||
* tree-vrp.c (vrp_int_const_binop): Handle PLUS_EXPR and
|
||||
|
@ -3931,6 +3931,61 @@ check_bitfield_type_and_width (tree *type, tree *width, const char *orig_name)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 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_declarator *declarator,
|
||||
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);
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -6702,12 +6702,21 @@ compute_array_index_type (tree name, tree size)
|
||||
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))
|
||||
|
@ -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 pedantic ISO C90 mode, or the GNU
|
||||
alternate syntax when in pedantic ISO C99 mode. This is default.
|
||||
To inhibit the warning messages, use @option{-Wno-variadic-macros}.
|
||||
|
||||
@item -Wvla
|
||||
@opindex Wvla
|
||||
@opindex Wno-vla
|
||||
Warn if variable length array is used in the code.
|
||||
@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
|
||||
|
Loading…
Reference in New Issue
Block a user