diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2015-10-02 09:28:56 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2015-10-02 09:28:56 +0000 |
commit | 0cec1c2da3ad278d0ab987883a19475b1546675f (patch) | |
tree | 6dc50d08224fdb4cf18ae702a432094a90f9915b /gcc | |
parent | e0512e8dc4145e32dbf235f693104af68ba9f1c8 (diff) | |
download | gcc-0cec1c2da3ad278d0ab987883a19475b1546675f.zip gcc-0cec1c2da3ad278d0ab987883a19475b1546675f.tar.gz gcc-0cec1c2da3ad278d0ab987883a19475b1546675f.tar.bz2 |
trans.c (Pragma_to_gnu): Replace linear search with call to find_opt and issue warnings if...
* gcc-interface/trans.c (Pragma_to_gnu) <Pragma_Warnings>: Replace
linear search with call to find_opt and issue warnings if the -W
switch is not appropriate.
From-SVN: r228379
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/trans.c | 25 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/warn13.adb | 11 |
4 files changed, 37 insertions, 9 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 0e5d83a..a4b159d 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,11 @@ 2015-10-02 Eric Botcazou <ebotcazou@adacore.com> + * gcc-interface/trans.c (Pragma_to_gnu) <Pragma_Warnings>: Replace + linear search with call to find_opt and issue warnings if the -W + switch is not appropriate. + +2015-10-02 Eric Botcazou <ebotcazou@adacore.com> + * gcc-interface/ada-tree.h (DECL_RESTRICTED_ALIASING_P): New flag. * gcc-interface/decl.c (gnat_to_gnu_param): For parameters passed by reference but whose type isn't by-ref and whose mechanism hasn't been diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 1da381b..3252ea2 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -1442,21 +1442,28 @@ Pragma_to_gnu (Node_Id gnat_node) gcc_unreachable (); /* This is the same implementation as in the C family of compilers. */ + const unsigned int lang_mask = CL_Ada | CL_COMMON; if (Present (gnat_expr)) { tree gnu_expr = gnat_to_gnu (gnat_expr); - const char *opt_string = TREE_STRING_POINTER (gnu_expr); + const char *option_string = TREE_STRING_POINTER (gnu_expr); const int len = TREE_STRING_LENGTH (gnu_expr); - if (len < 3 || opt_string[0] != '-' || opt_string[1] != 'W') + if (len < 3 || option_string[0] != '-' || option_string[1] != 'W') break; - for (option_index = 0; - option_index < cl_options_count; - option_index++) - if (strcmp (cl_options[option_index].opt_text, opt_string) == 0) + option_index = find_opt (option_string + 1, lang_mask); + if (option_index == OPT_SPECIAL_unknown) + { + post_error ("?unknown -W switch", gnat_node); break; - if (option_index == cl_options_count) + } + else if (!(cl_options[option_index].flags & CL_WARNING)) + { + post_error ("?-W switch does not control warning", gnat_node); + break; + } + else if (!(cl_options[option_index].flags & lang_mask)) { - post_error ("unknown -W switch", gnat_node); + post_error ("?-W switch not valid for Ada", gnat_node); break; } } @@ -1465,7 +1472,7 @@ Pragma_to_gnu (Node_Id gnat_node) set_default_handlers (&handlers); control_warning_option (option_index, (int) kind, imply, location, - CL_Ada, &handlers, &global_options, + lang_mask, &handlers, &global_options, &global_options_set, global_dc); } break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae4f5aa..169c0c4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2015-10-02 Eric Botcazou <ebotcazou@adacore.com> + * gnat.dg/warn13.adb: New test. + +2015-10-02 Eric Botcazou <ebotcazou@adacore.com> + * gnat.dg/vect15.ad[sb]: New test. * gnat.dg/vect16.ad[sb]: Likewise. * gnat.dg/vect17.ad[sb]: Likewise. diff --git a/gcc/testsuite/gnat.dg/warn13.adb b/gcc/testsuite/gnat.dg/warn13.adb new file mode 100644 index 0000000..2a9c4e3 --- /dev/null +++ b/gcc/testsuite/gnat.dg/warn13.adb @@ -0,0 +1,11 @@ +-- { dg-compile } + +procedure Warn13 is + + pragma Warnings ("-Wbogus"); -- { dg-warning "unknown" } + pragma Warnings ("-Werror"); -- { dg-warning "does not control warning" } + pragma Warnings ("-Wformat"); -- { dg-warning "switch not valid for Ada" } + +begin + null; +end; |