aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2015-10-02 09:28:56 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2015-10-02 09:28:56 +0000
commit0cec1c2da3ad278d0ab987883a19475b1546675f (patch)
tree6dc50d08224fdb4cf18ae702a432094a90f9915b /gcc
parente0512e8dc4145e32dbf235f693104af68ba9f1c8 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/ada/gcc-interface/trans.c25
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/warn13.adb11
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;