Commit 1ebc7e68 by Raksit Ashok Committed by Raksit Ashok

invoke.texi (Option Summary): Mention new option -Wdisallowed-function-list=...

2008-07-09  Raksit Ashok <raksit@google.com>

	* doc/invoke.texi (Option Summary): Mention new option
	-Wdisallowed-function-list=...
	(Warning Options): Document -Wdisallowed-function-list=...
	* common.opt (Wdisallowed-function-list=): New flag.
	* flags.h (warn_disallowed_functions): External definition of new
	boolean warning flag.
	(warn_if_disallowed_function_p): Declare new function.
	* opts.c (warning_disallowed_functions): New static variable.
	(warn_disallowed_functions): New boolean warning flag.
	(warn_if_disallowed_function_p): New function.
	(add_comma_separated_to_vector): Rename
	add_instrument_functions_exclude_list to this.
	(common_handle_option): Handle new option. Rename calls to
	add_instrument_functions_exclude_list into calls to
	add_comma_separated_to_vector.
	* c-parser.c (c_parser_postfix_expression_after_primary): New warning
	based on flag warn_disallowed_functions.


gcc/cp/ChangeLog

2008-07-09  Raksit Ashok <raksit@google.com>

	* parser.c (cp_parser_postfix_expression): New warning based on flag
	warn_disallowed_functions.


gcc/testsuite/ChangeLog

2008-07-09  Raksit Ashok <raksit@google.com>

	* gcc.dg/wdisallowed-functions-1.c: New test.
	* gcc.dg/wdisallowed-functions-2.c: New test.
	* g++.dg/warn/Wdisallowed-functions-1.C: New test.
	* g++.dg/warn/Wdisallowed-functions-2.C: New test.

From-SVN: r137655
parent 47d268d0
2008-07-09 Raksit Ashok <raksit@google.com>
* doc/invoke.texi (Option Summary): Mention new option
-Wdisallowed-function-list=...
(Warning Options): Document -Wdisallowed-function-list=...
* common.opt (Wdisallowed-function-list=): New flag.
* flags.h (warn_disallowed_functions): External definition of new
boolean warning flag.
(warn_if_disallowed_function_p): Declare new function.
* opts.c (warning_disallowed_functions): New static variable.
(warn_disallowed_functions): New boolean warning flag.
(warn_if_disallowed_function_p): New function.
(add_comma_separated_to_vector): Rename
add_instrument_functions_exclude_list to this.
(common_handle_option): Handle new option. Rename calls to
add_instrument_functions_exclude_list into calls to
add_comma_separated_to_vector.
* c-parser.c (c_parser_postfix_expression_after_primary): New warning
based on flag warn_disallowed_functions.
2008-07-09 Christian Bruel <christian.bruel@st.com> 2008-07-09 Christian Bruel <christian.bruel@st.com>
* final.c (get_attr_length_1): Call get_attr_length_1 with fallback_fn * final.c (get_attr_length_1): Call get_attr_length_1 with fallback_fn
......
...@@ -5630,6 +5630,8 @@ c_parser_postfix_expression_after_primary (c_parser *parser, ...@@ -5630,6 +5630,8 @@ c_parser_postfix_expression_after_primary (c_parser *parser,
"expected %<)%>"); "expected %<)%>");
expr.value = build_function_call (expr.value, exprlist); expr.value = build_function_call (expr.value, exprlist);
expr.original_code = ERROR_MARK; expr.original_code = ERROR_MARK;
if (warn_disallowed_functions)
warn_if_disallowed_function_p (expr.value);
break; break;
case CPP_DOT: case CPP_DOT:
/* Structure element reference. */ /* Structure element reference. */
......
...@@ -94,6 +94,10 @@ Wdisabled-optimization ...@@ -94,6 +94,10 @@ Wdisabled-optimization
Common Var(warn_disabled_optimization) Warning Common Var(warn_disabled_optimization) Warning
Warn when an optimization pass is disabled Warn when an optimization pass is disabled
Wdisallowed-function-list=
Common RejectNegative Joined Warning
Warn on calls to these functions
Werror Werror
Common Var(warnings_are_errors) Common Var(warnings_are_errors)
Treat all warnings as errors Treat all warnings as errors
......
2008-07-09 Raksit Ashok <raksit@google.com>
* parser.c (cp_parser_postfix_expression): New warning based on flag
warn_disallowed_functions.
2008-07-08 Simon Martin <simartin@users.sourceforge.net> 2008-07-08 Simon Martin <simartin@users.sourceforge.net>
PR c++/34963 PR c++/34963
......
...@@ -4725,6 +4725,9 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, ...@@ -4725,6 +4725,9 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
koenig_p, koenig_p,
tf_warning_or_error); tf_warning_or_error);
if (warn_disallowed_functions)
warn_if_disallowed_function_p (postfix_expression);
/* The POSTFIX_EXPRESSION is certainly no longer an id. */ /* The POSTFIX_EXPRESSION is certainly no longer an id. */
idk = CP_ID_KIND_NONE; idk = CP_ID_KIND_NONE;
} }
......
...@@ -231,8 +231,9 @@ Objective-C and Objective-C++ Dialects}. ...@@ -231,8 +231,9 @@ Objective-C and Objective-C++ Dialects}.
-Wno-attributes -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @gol -Wno-attributes -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @gol
-Wchar-subscripts -Wclobbered -Wcomment @gol -Wchar-subscripts -Wclobbered -Wcomment @gol
-Wconversion -Wcoverage-mismatch -Wno-deprecated @gol -Wconversion -Wcoverage-mismatch -Wno-deprecated @gol
-Wno-deprecated-declarations -Wdisabled-optimization -Wno-div-by-zero @gol -Wno-deprecated-declarations -Wdisabled-optimization @gol
-Wempty-body -Wenum-compare -Wno-endif-labels @gol -Wdisallowed-function-list=@var{sym},@var{sym},@dots{} @gol
-Wno-div-by-zero -Wempty-body -Wenum-compare -Wno-endif-labels @gol
-Werror -Werror=* @gol -Werror -Werror=* @gol
-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
...@@ -4101,6 +4102,13 @@ minimum maximum, so we do not diagnose overlength strings in C++@. ...@@ -4101,6 +4102,13 @@ minimum maximum, so we do not diagnose overlength strings in C++@.
This option is implied by @option{-pedantic}, and can be disabled with This option is implied by @option{-pedantic}, and can be disabled with
@option{-Wno-overlength-strings}. @option{-Wno-overlength-strings}.
@item -Wdisallowed-function-list=@var{sym},@var{sym},@dots{}
@opindex Wdisallowed-function-list
If any of @var{sym} is called, GCC will issue a warning. This can be useful
in enforcing coding conventions that ban calls to certain functions, for
example, @code{alloca}, @code{malloc}, etc.
@end table @end table
@node Debugging Options @node Debugging Options
......
...@@ -279,6 +279,13 @@ extern bool flag_speculative_prefetching_set; ...@@ -279,6 +279,13 @@ extern bool flag_speculative_prefetching_set;
instrumentation. */ instrumentation. */
extern bool flag_instrument_functions_exclude_p (tree fndecl); extern bool flag_instrument_functions_exclude_p (tree fndecl);
/* Emit warning if the function call is disallowed under
-Wdisallowed-function-list=... */
extern void warn_if_disallowed_function_p (const_tree fncall);
/* True, if the -Wdisallowed-function-list=... option has been specified. */
extern bool warn_disallowed_functions;
/* True if the given mode has a NaN representation and the treatment of /* True if the given mode has a NaN representation and the treatment of
NaN operands is important. Certain optimizations, such as folding NaN operands is important. Certain optimizations, such as folding
x * 0 into 0, are not correct for NaN operands, and are normally x * 0 into 0, are not correct for NaN operands, and are normally
......
...@@ -371,6 +371,12 @@ DEF_VEC_ALLOC_P(const_char_p,heap); ...@@ -371,6 +371,12 @@ DEF_VEC_ALLOC_P(const_char_p,heap);
static VEC(const_char_p,heap) *ignored_options; static VEC(const_char_p,heap) *ignored_options;
/* Function calls disallowed under -Wdisallowed-function-list=... */
static VEC(char_p,heap) *warning_disallowed_functions;
/* If -Wdisallowed-function-list=... */
bool warn_disallowed_functions = false;
/* Input file names. */ /* Input file names. */
const char **in_fnames; const char **in_fnames;
unsigned num_in_fnames; unsigned num_in_fnames;
...@@ -655,12 +661,10 @@ add_input_filename (const char *filename) ...@@ -655,12 +661,10 @@ add_input_filename (const char *filename)
in_fnames[num_in_fnames - 1] = filename; in_fnames[num_in_fnames - 1] = filename;
} }
/* Add functions or file names to a vector of names to exclude from /* Add comma-separated strings to a char_p vector. */
instrumentation. */
static void static void
add_instrument_functions_exclude_list (VEC(char_p,heap) **pvec, add_comma_separated_to_vector (VEC(char_p,heap) **pvec, const char* arg)
const char* arg)
{ {
char *tmp; char *tmp;
char *r; char *r;
...@@ -736,6 +740,31 @@ flag_instrument_functions_exclude_p (tree fndecl) ...@@ -736,6 +740,31 @@ flag_instrument_functions_exclude_p (tree fndecl)
return false; return false;
} }
/* Return whether this function call is disallowed. */
void
warn_if_disallowed_function_p (const_tree exp)
{
if (TREE_CODE(exp) == CALL_EXPR
&& VEC_length (char_p, warning_disallowed_functions) > 0)
{
int i;
char *s;
const char *fnname =
IDENTIFIER_POINTER (DECL_NAME (get_callee_fndecl (exp)));
for (i = 0; VEC_iterate (char_p, warning_disallowed_functions, i, s);
++i)
{
if (strcmp (fnname, s) == 0)
{
warning (OPT_Wdisallowed_function_list_,
"disallowed call to %qs", fnname);
break;
}
}
}
}
/* Decode and handle the vector of command line options. LANG_MASK /* Decode and handle the vector of command line options. LANG_MASK
contains has a single bit set representing the current contains has a single bit set representing the current
language. */ language. */
...@@ -1541,6 +1570,12 @@ common_handle_option (size_t scode, const char *arg, int value, ...@@ -1541,6 +1570,12 @@ common_handle_option (size_t scode, const char *arg, int value,
set_Wextra (value); set_Wextra (value);
break; break;
case OPT_Wdisallowed_function_list_:
warn_disallowed_functions = true;
add_comma_separated_to_vector
(&warning_disallowed_functions, arg);
break;
case OPT_Werror_: case OPT_Werror_:
enable_warning_as_error (arg, value, lang_mask); enable_warning_as_error (arg, value, lang_mask);
break; break;
...@@ -1691,12 +1726,12 @@ common_handle_option (size_t scode, const char *arg, int value, ...@@ -1691,12 +1726,12 @@ common_handle_option (size_t scode, const char *arg, int value,
break; break;
case OPT_finstrument_functions_exclude_function_list_: case OPT_finstrument_functions_exclude_function_list_:
add_instrument_functions_exclude_list add_comma_separated_to_vector
(&flag_instrument_functions_exclude_functions, arg); (&flag_instrument_functions_exclude_functions, arg);
break; break;
case OPT_finstrument_functions_exclude_file_list_: case OPT_finstrument_functions_exclude_file_list_:
add_instrument_functions_exclude_list add_comma_separated_to_vector
(&flag_instrument_functions_exclude_files, arg); (&flag_instrument_functions_exclude_files, arg);
break; break;
......
2008-07-09 Raksit Ashok <raksit@google.com>
* gcc.dg/wdisallowed-functions-1.c: New test.
* gcc.dg/wdisallowed-functions-2.c: New test.
* g++.dg/warn/Wdisallowed-functions-1.C: New test.
* g++.dg/warn/Wdisallowed-functions-2.C: New test.
2008-07-08 Simon Martin <simartin@users.sourceforge.net> 2008-07-08 Simon Martin <simartin@users.sourceforge.net>
PR c++/34963 PR c++/34963
......
/* { dg-do compile } */
/* { dg-options "-Wdisallowed-function-list=foobar" } */
int foobar (int i)
{
return (i * 5);
}
/* { dg-do compile } */
/* { dg-options "-Wdisallowed-function-list=foo,foobar,bar,foobar" } */
int foobar (int i)
{
return (i * 5);
}
int foobar1 (int i)
{
return foobar (i); /* { dg-warning "disallowed call to 'foobar'" } */
}
/* { dg-do compile } */
/* { dg-options "-Wdisallowed-function-list=foobar" } */
int foobar (int i)
{
return (i * 5);
}
/* { dg-do compile } */
/* { dg-options "-Wdisallowed-function-list=foo,foobar,bar,foobar" } */
int foobar (int i)
{
return (i * 5);
}
int foobar1 (int i)
{
return foobar (i); /* { dg-warning "disallowed call to 'foobar'" } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment