diff options
author | Raksit Ashok <raksit@google.com> | 2008-07-09 08:23:48 +0000 |
---|---|---|
committer | Raksit Ashok <raksit@gcc.gnu.org> | 2008-07-09 08:23:48 +0000 |
commit | 1ebc7e681079e61300e75a5c0f3b2da335720cc7 (patch) | |
tree | 52f1164b80ec03e33183a75b3810a57f8697a378 /gcc/opts.c | |
parent | 47d268d0d33fbf5dbcd7d022c87e1dfcb6b61577 (diff) | |
download | gcc-1ebc7e681079e61300e75a5c0f3b2da335720cc7.zip gcc-1ebc7e681079e61300e75a5c0f3b2da335720cc7.tar.gz gcc-1ebc7e681079e61300e75a5c0f3b2da335720cc7.tar.bz2 |
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
Diffstat (limited to 'gcc/opts.c')
-rw-r--r-- | gcc/opts.c | 47 |
1 files changed, 41 insertions, 6 deletions
@@ -371,6 +371,12 @@ DEF_VEC_ALLOC_P(const_char_p,heap); 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. */ const char **in_fnames; unsigned num_in_fnames; @@ -655,12 +661,10 @@ add_input_filename (const char *filename) in_fnames[num_in_fnames - 1] = filename; } -/* Add functions or file names to a vector of names to exclude from - instrumentation. */ +/* Add comma-separated strings to a char_p vector. */ static void -add_instrument_functions_exclude_list (VEC(char_p,heap) **pvec, - const char* arg) +add_comma_separated_to_vector (VEC(char_p,heap) **pvec, const char* arg) { char *tmp; char *r; @@ -736,6 +740,31 @@ flag_instrument_functions_exclude_p (tree fndecl) 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 contains has a single bit set representing the current language. */ @@ -1541,6 +1570,12 @@ common_handle_option (size_t scode, const char *arg, int value, set_Wextra (value); break; + case OPT_Wdisallowed_function_list_: + warn_disallowed_functions = true; + add_comma_separated_to_vector + (&warning_disallowed_functions, arg); + break; + case OPT_Werror_: enable_warning_as_error (arg, value, lang_mask); break; @@ -1691,12 +1726,12 @@ common_handle_option (size_t scode, const char *arg, int value, break; case OPT_finstrument_functions_exclude_function_list_: - add_instrument_functions_exclude_list + add_comma_separated_to_vector (&flag_instrument_functions_exclude_functions, arg); break; case OPT_finstrument_functions_exclude_file_list_: - add_instrument_functions_exclude_list + add_comma_separated_to_vector (&flag_instrument_functions_exclude_files, arg); break; |