re PR c++/50454 (Unexpected problems with -pedantic / -pedantic-errors and __int128...
authorPaolo Carlini <paolo@gcc.gnu.org>
Wed, 21 Sep 2011 09:56:45 +0000 (09:56 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 21 Sep 2011 09:56:45 +0000 (09:56 +0000)
/cp
2011-09-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/50454
* decl.c (grokdeclarator): Consistently handle both __int128
and unsigned __int128 with -pedantic; suppress diagnostic in
system headers.

/testsuite
2011-09-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/50454
* g++.dg/ext/int128-1.C: New.
* g++.dg/ext/int128-2.C: Likewise.
* g++.dg/ext/int128-2.h: Likewise.

From-SVN: r179042

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/int128-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/int128-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/int128-2.h [new file with mode: 0644]

index c9c4a215f70079405c5aa9eccc6c8ab618c4d888..51230909ed974a29b1ddff1dba3a74ba014cb2e7 100644 (file)
@@ -1,3 +1,10 @@
+2011-09-21  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/50454
+       * decl.c (grokdeclarator): Consistently handle both __int128
+       and unsigned __int128 with -pedantic; suppress diagnostic in
+       system headers.
+
 2011-09-20  Jason Merrill  <jason@redhat.com>
 
        * cp-tree.h (DECL_TEMPLOID_INSTANTIATION): New.
index a61b3598cb8145179a4a4689c2414b95858bf71f..86fd2d5a23b944caf8e76e0a54d2d96b0681e520 100644 (file)
@@ -8640,6 +8640,18 @@ grokdeclarator (const cp_declarator *declarator,
 
   ctype = NULL_TREE;
 
+  if (explicit_int128)
+    {
+      if (int128_integer_type_node == NULL_TREE)
+       {
+         error ("%<__int128%> is not supported by this target");
+         explicit_int128 = false;
+       }
+      else if (pedantic && ! in_system_header)
+       pedwarn (input_location, OPT_pedantic,
+                "ISO C++ does not support %<__int128%> for %qs", name);
+    }
+
   /* Now process the modifiers that were specified
      and check for invalid combinations.  */
 
@@ -8663,8 +8675,6 @@ grokdeclarator (const cp_declarator *declarator,
        error ("%<signed%> and %<unsigned%> specified together for %qs", name);
       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
        error ("%<long long%> invalid for %qs", name);
-      else if (explicit_int128 && TREE_CODE (type) != INTEGER_TYPE)
-       error ("%<__int128%> invalid for %qs", name);
       else if (long_p && TREE_CODE (type) == REAL_TYPE)
        error ("%<long%> invalid for %qs", name);
       else if (short_p && TREE_CODE (type) == REAL_TYPE)
@@ -8695,22 +8705,6 @@ grokdeclarator (const cp_declarator *declarator,
              if (flag_pedantic_errors)
                ok = 0;
            }
-         if (explicit_int128)
-           {
-             if (int128_integer_type_node == NULL_TREE)
-               {
-                 error ("%<__int128%> is not supported by this target");
-                 ok = 0;
-               }
-             else if (pedantic)
-               {
-                 pedwarn (input_location, OPT_pedantic,
-                          "ISO C++ does not support %<__int128%> for %qs",
-                          name);
-                 if (flag_pedantic_errors)
-                   ok = 0;
-               }
-           }
        }
 
       /* Discard the type modifiers if they are invalid.  */
@@ -8721,7 +8715,6 @@ grokdeclarator (const cp_declarator *declarator,
          long_p = false;
          short_p = false;
          longlong = 0;
-         explicit_int128 = false;
        }
     }
 
index 2a7803a99b768b08ed1aa9970623cfe6be438fa4..cba634168177e5d9d862464d7e57f9f234faa6c6 100644 (file)
@@ -1,3 +1,10 @@
+2011-09-21  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/50454
+       * g++.dg/ext/int128-1.C: New.
+       * g++.dg/ext/int128-2.C: Likewise.
+       * g++.dg/ext/int128-2.h: Likewise.
+
 2011-09-20  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR testsuite/50469
@@ -11,9 +18,9 @@
        PR c++/50442
        * g++.dg/overload/ref-conv1.C: New.
 
-2011-09-20 Roberto Agostino Vitillo <ravitillo@lbl.gov>
+2011-09-20  Roberto Agostino Vitillo  <ravitillo@lbl.gov>
 
-       * g++.dg/other/final1.C: new test
+       * g++.dg/other/final1.C: New.
 
 2011-09-20  Ira Rosen  <ira.rosen@linaro.org>
 
diff --git a/gcc/testsuite/g++.dg/ext/int128-1.C b/gcc/testsuite/g++.dg/ext/int128-1.C
new file mode 100644 (file)
index 0000000..65540e8
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/50454
+// { dg-do compile { target int128 } }
+
+template<typename T>
+  struct limits;
+
+template<>
+  struct limits<__int128> { }; // { dg-error "does not support" }
+
+template<>
+  struct limits<unsigned __int128> { }; // { dg-error "does not support" }
diff --git a/gcc/testsuite/g++.dg/ext/int128-2.C b/gcc/testsuite/g++.dg/ext/int128-2.C
new file mode 100644 (file)
index 0000000..36a3f1a
--- /dev/null
@@ -0,0 +1,4 @@
+// PR c++/50454
+// { dg-do compile { target int128 } }
+
+#include "int128-2.h"
diff --git a/gcc/testsuite/g++.dg/ext/int128-2.h b/gcc/testsuite/g++.dg/ext/int128-2.h
new file mode 100644 (file)
index 0000000..4e441be
--- /dev/null
@@ -0,0 +1,10 @@
+#pragma GCC system_header
+
+template<typename T>
+  struct limits;
+
+template<>
+  struct limits<__int128> { };
+
+template<>
+  struct limits<unsigned __int128> { };