From: Richard Sandiford Date: Wed, 30 Aug 2017 11:12:55 +0000 (+0000) Subject: [32/77] Check is_a before calling valid_pointer_mode X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e05c94bad29dd443cc28ae314e2874992afce348;p=gcc.git [32/77] Check is_a 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 Alan Hayward David Sherwood 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 Co-Authored-By: David Sherwood From-SVN: r251484 --- diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 36413cfca74..fe3fd5829ed 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,10 @@ +2017-08-30 Richard Sandiford + Alan Hayward + David Sherwood + + * 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 Alan Hayward David Sherwood diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c index 5f79468407f..e564c727e24 100644 --- a/gcc/c-family/c-attribs.c +++ b/gcc/c-family/c-attribs.c @@ -1469,10 +1469,12 @@ handle_mode_attribute (tree *node, tree name, tree args, if (POINTER_TYPE_P (type)) { + scalar_int_mode addr_mode; addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type)); tree (*fn)(tree, machine_mode, bool); - if (!targetm.addr_space.valid_pointer_mode (mode, as)) + if (!is_a (mode, &addr_mode) + || !targetm.addr_space.valid_pointer_mode (addr_mode, as)) { error ("invalid pointer mode %qs", p); return NULL_TREE; @@ -1482,7 +1484,7 @@ handle_mode_attribute (tree *node, tree name, tree args, fn = build_pointer_type_for_mode; else fn = build_reference_type_for_mode; - typefm = fn (TREE_TYPE (type), mode, false); + typefm = fn (TREE_TYPE (type), addr_mode, false); } else {