Commit 0cec1c2d by Eric Botcazou Committed by Eric Botcazou

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
parent e0512e8d
2015-10-02 Eric Botcazou <ebotcazou@adacore.com> 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/ada-tree.h (DECL_RESTRICTED_ALIASING_P): New flag.
* gcc-interface/decl.c (gnat_to_gnu_param): For parameters passed by * 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 reference but whose type isn't by-ref and whose mechanism hasn't been
......
...@@ -1442,21 +1442,28 @@ Pragma_to_gnu (Node_Id gnat_node) ...@@ -1442,21 +1442,28 @@ Pragma_to_gnu (Node_Id gnat_node)
gcc_unreachable (); gcc_unreachable ();
/* This is the same implementation as in the C family of compilers. */ /* 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)) if (Present (gnat_expr))
{ {
tree gnu_expr = gnat_to_gnu (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); 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; break;
for (option_index = 0; option_index = find_opt (option_string + 1, lang_mask);
option_index < cl_options_count; if (option_index == OPT_SPECIAL_unknown)
option_index++) {
if (strcmp (cl_options[option_index].opt_text, opt_string) == 0) post_error ("?unknown -W switch", gnat_node);
break; 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; break;
} }
} }
...@@ -1465,7 +1472,7 @@ Pragma_to_gnu (Node_Id gnat_node) ...@@ -1465,7 +1472,7 @@ Pragma_to_gnu (Node_Id gnat_node)
set_default_handlers (&handlers); set_default_handlers (&handlers);
control_warning_option (option_index, (int) kind, imply, location, control_warning_option (option_index, (int) kind, imply, location,
CL_Ada, &handlers, &global_options, lang_mask, &handlers, &global_options,
&global_options_set, global_dc); &global_options_set, global_dc);
} }
break; break;
......
2015-10-02 Eric Botcazou <ebotcazou@adacore.com> 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/vect15.ad[sb]: New test.
* gnat.dg/vect16.ad[sb]: Likewise. * gnat.dg/vect16.ad[sb]: Likewise.
* gnat.dg/vect17.ad[sb]: Likewise. * gnat.dg/vect17.ad[sb]: Likewise.
......
-- { 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;
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