Commit e05c94ba by Richard Sandiford Committed by Richard Sandiford

[32/77] Check is_a <scalar_int_mode> before calling valid_pointer_mode

A future patch will make valid_pointer_mode take a scalar_int_mode
instead of a machine_mode.  is_a <...> rather than as_a <...> is
needed here because we're checking a mode supplied by the user.

2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

gcc/c-family/
	* c-attribs.c (handle_mode_attribute): Check for a scalar_int_mode
	before calling targetm.addr_space.valid_pointer_mode.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>

From-SVN: r251484
parent 1e047eed
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
Alan Hayward <alan.hayward@arm.com> Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com> David Sherwood <david.sherwood@arm.com>
* c-attribs.c (handle_mode_attribute): Check for a scalar_int_mode
before calling targetm.addr_space.valid_pointer_mode.
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* c-cppbuiltin.c (c_cpp_builtins): Use opt_scalar_float_mode. * c-cppbuiltin.c (c_cpp_builtins): Use opt_scalar_float_mode.
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org> 2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
......
...@@ -1469,10 +1469,12 @@ handle_mode_attribute (tree *node, tree name, tree args, ...@@ -1469,10 +1469,12 @@ handle_mode_attribute (tree *node, tree name, tree args,
if (POINTER_TYPE_P (type)) if (POINTER_TYPE_P (type))
{ {
scalar_int_mode addr_mode;
addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type)); addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
tree (*fn)(tree, machine_mode, bool); tree (*fn)(tree, machine_mode, bool);
if (!targetm.addr_space.valid_pointer_mode (mode, as)) if (!is_a <scalar_int_mode> (mode, &addr_mode)
|| !targetm.addr_space.valid_pointer_mode (addr_mode, as))
{ {
error ("invalid pointer mode %qs", p); error ("invalid pointer mode %qs", p);
return NULL_TREE; return NULL_TREE;
...@@ -1482,7 +1484,7 @@ handle_mode_attribute (tree *node, tree name, tree args, ...@@ -1482,7 +1484,7 @@ handle_mode_attribute (tree *node, tree name, tree args,
fn = build_pointer_type_for_mode; fn = build_pointer_type_for_mode;
else else
fn = build_reference_type_for_mode; fn = build_reference_type_for_mode;
typefm = fn (TREE_TYPE (type), mode, false); typefm = fn (TREE_TYPE (type), addr_mode, false);
} }
else else
{ {
......
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