[32/77] Check is_a <scalar_int_mode> before calling valid_pointer_mode
authorRichard Sandiford <richard.sandiford@linaro.org>
Wed, 30 Aug 2017 11:12:55 +0000 (11:12 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 30 Aug 2017 11:12:55 +0000 (11:12 +0000)
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

gcc/c-family/ChangeLog
gcc/c-family/c-attribs.c

index 36413cfca749e69f3797ab0f0a189ecd2d79fb89..fe3fd5829ed79a0631f598787da49151a6b3b9e5 100644 (file)
@@ -1,3 +1,10 @@
+2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@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>
index 5f79468407f6d203d535dc8f384ab502de6fed18..e564c727e245aa4d064cb237a7e99944fd984d6b 100644 (file)
@@ -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 <scalar_int_mode> (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
        {