aboutsummaryrefslogtreecommitdiff
path: root/gcc/opts.c
diff options
context:
space:
mode:
authorRaksit Ashok <raksit@google.com>2008-07-09 08:23:48 +0000
committerRaksit Ashok <raksit@gcc.gnu.org>2008-07-09 08:23:48 +0000
commit1ebc7e681079e61300e75a5c0f3b2da335720cc7 (patch)
tree52f1164b80ec03e33183a75b3810a57f8697a378 /gcc/opts.c
parent47d268d0d33fbf5dbcd7d022c87e1dfcb6b61577 (diff)
downloadgcc-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.c47
1 files changed, 41 insertions, 6 deletions
diff --git a/gcc/opts.c b/gcc/opts.c
index c26260a..8431a40 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -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;