re PR c/77323 (Bad "defaults to 'int'" warning for unsupported types)
authorMarek Polacek <polacek@redhat.com>
Thu, 25 Aug 2016 08:22:56 +0000 (08:22 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Thu, 25 Aug 2016 08:22:56 +0000 (08:22 +0000)
PR c/77323
* c-decl.c (declspecs_add_type): Set typespec_word even when __intN
or _FloatN or _FloatNx is not supported.
(finish_declspecs): Set type to integer_type_node when _FloatN or
_FloatNx is not supported.

* gcc.dg/pr77323.c: New test.

From-SVN: r239752

gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr77323.c [new file with mode: 0644]

index 8d9d4aabb0a6af00b88e84ec81a2fd2cc6f78b7e..dc863bb4a1b38a6e6280ecc576e7848de2f44c3f 100644 (file)
@@ -1,3 +1,11 @@
+2016-08-25  Marek Polacek  <polacek@redhat.com>
+
+       PR c/77323
+       * c-decl.c (declspecs_add_type): Set typespec_word even when __intN
+       or _FloatN or _FloatNx is not supported.
+       (finish_declspecs): Set type to integer_type_node when _FloatN or
+       _FloatNx is not supported.
+
 2016-08-19  Joseph Myers  <joseph@codesourcery.com>
 
        PR c/32187
index 0fb2d206458cb221eb7cacdcfeb1dfcf93a3e90d..0c52a64a77eaf593fc347d7dfdfb6005ba8acb6e 100644 (file)
@@ -10190,10 +10190,13 @@ declspecs_add_type (location_t loc, struct c_declspecs *specs,
                          ("both %<__int%d%> and %<short%> in "
                           "declaration specifiers"),
                          int_n_data[specs->int_n_idx].bitsize);
-             else if (! int_n_enabled_p [specs->int_n_idx])
-               error_at (loc,
-                         "%<__int%d%> is not supported on this target",
-                         int_n_data[specs->int_n_idx].bitsize);
+             else if (! int_n_enabled_p[specs->int_n_idx])
+               {
+                 specs->typespec_word = cts_int_n;
+                 error_at (loc,
+                           "%<__int%d%> is not supported on this target",
+                           int_n_data[specs->int_n_idx].bitsize);
+               }
              else
                {
                  specs->typespec_word = cts_int_n;
@@ -10400,12 +10403,15 @@ declspecs_add_type (location_t loc, struct c_declspecs *specs,
                           ? "x"
                           : ""));
              else if (FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx) == NULL_TREE)
-               error_at (loc,
-                         "%<_Float%d%s%> is not supported on this target",
-                         floatn_nx_types[specs->floatn_nx_idx].n,
-                         (floatn_nx_types[specs->floatn_nx_idx].extended
-                          ? "x"
-                          : ""));
+               {
+                 specs->typespec_word = cts_floatn_nx;
+                 error_at (loc,
+                           "%<_Float%d%s%> is not supported on this target",
+                           floatn_nx_types[specs->floatn_nx_idx].n,
+                           (floatn_nx_types[specs->floatn_nx_idx].extended
+                            ? "x"
+                            : ""));
+               }
              else
                {
                  specs->typespec_word = cts_floatn_nx;
@@ -10892,9 +10898,12 @@ finish_declspecs (struct c_declspecs *specs)
     case cts_floatn_nx:
       gcc_assert (!specs->long_p && !specs->short_p
                  && !specs->signed_p && !specs->unsigned_p);
-      specs->type = (specs->complex_p
-                    ? COMPLEX_FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx)
-                    : FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx));
+      if (FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx) == NULL_TREE)
+       specs->type = integer_type_node;
+      else if (specs->complex_p)
+       specs->type = COMPLEX_FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx);
+      else
+       specs->type = FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx);
       break;
     case cts_dfloat32:
     case cts_dfloat64:
index 527f2011ac7569daa906b4396d3564242e4783d6..f4dddd8bea3c3c893751696d8c2343a16d20eb00 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-25  Marek Polacek  <polacek@redhat.com>
+
+       PR c/77323
+       * gcc.dg/pr77323.c: New test.
+
 2016-08-24  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/77358
diff --git a/gcc/testsuite/gcc.dg/pr77323.c b/gcc/testsuite/gcc.dg/pr77323.c
new file mode 100644 (file)
index 0000000..281c334
--- /dev/null
@@ -0,0 +1,6 @@
+/* PR c/77323 */
+/* { dg-do compile { target ia32 } } */
+/* { dg-options "" } */
+
+__int128 a; /* { dg-error "not supported" } */
+_Float128x b; /* { dg-error "not supported" } */