c-pragma.c (handle_pragma_scalar_storage_order): Expand on error message for non...
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 15 Sep 2017 17:11:47 +0000 (17:11 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 15 Sep 2017 17:11:47 +0000 (17:11 +0000)
* c-pragma.c (handle_pragma_scalar_storage_order): Expand on error
message for non-uniform endianness and issue a warning in C++.

From-SVN: r252831

gcc/c-family/ChangeLog
gcc/c-family/c-pragma.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/sso-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/sso-2.C [new file with mode: 0644]

index 4fffa31..a3f990d 100644 (file)
@@ -1,3 +1,8 @@
+2017-09-15  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * c-pragma.c (handle_pragma_scalar_storage_order): Expand on error
+       message for non-uniform endianness and issue a warning in C++.
+
 2017-09-15  Jakub Jelinek  <jakub@redhat.com>
 
        * c.opt (Wc++1z-compat): Change from option to undocumented alias.
index a2ffdba..f7b59b3 100644 (file)
@@ -415,7 +415,19 @@ handle_pragma_scalar_storage_order (cpp_reader *ARG_UNUSED(dummy))
   tree x;
 
   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN)
-    error ("scalar_storage_order is not supported");
+    {
+      error ("scalar_storage_order is not supported because endianness "
+            "is not uniform");
+      return;
+    }
+
+  if (c_dialect_cxx ())
+    {
+      if (warn_unknown_pragmas > in_system_header_at (input_location))
+       warning (OPT_Wunknown_pragmas,
+                "%<#pragma scalar_storage_order%> is not supported for C++");
+      return;
+    }
 
   token = pragma_lex (&x);
   if (token != CPP_NAME)
index bdc79b6..303f700 100644 (file)
@@ -1,4 +1,9 @@
-2017-09-13  Paolo Carlini  <paolo.carlini@oracle.com>
+2017-09-15  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * g++.dg/sso-1.C: New test.
+       * g++.dg/sso-2.C: Likewise.
+
+2017-09-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/78648
        * g++.dg/cpp0x/lambda/lambda-ice21.C: New.
diff --git a/gcc/testsuite/g++.dg/sso-1.C b/gcc/testsuite/g++.dg/sso-1.C
new file mode 100644 (file)
index 0000000..0f59d0c
--- /dev/null
@@ -0,0 +1,8 @@
+/* Test support of scalar_storage_order attribute */
+
+/* { dg-do compile } */
+
+struct __attribute__((scalar_storage_order("little-endian"))) Rec /* { dg-warning "attribute ignored" } */
+{
+  int i;
+};
diff --git a/gcc/testsuite/g++.dg/sso-2.C b/gcc/testsuite/g++.dg/sso-2.C
new file mode 100644 (file)
index 0000000..402a61e
--- /dev/null
@@ -0,0 +1,6 @@
+/* Test support of scalar_storage_order pragma */
+
+/* { dg-do compile } */
+/* { dg-options "-Wall" } */
+
+#pragma scalar_storage_order little-endian /* { dg-warning "not supported" } */