]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
decl2.c (grokbitfield): Use DECL_SOURCE_LOCATION in error messages about bit-fields...
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 7 Dec 2018 17:48:39 +0000 (17:48 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 7 Dec 2018 17:48:39 +0000 (17:48 +0000)
/cp
2018-12-07  Paolo Carlini  <paolo.carlini@oracle.com>

* decl2.c (grokbitfield): Use DECL_SOURCE_LOCATION in error messages
about bit-fields with function type, warn_if_not_aligned type, and
static bit-fields; avoid DECL_NAME for unnamed declarations.

/testsuite
2018-12-07  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/other/bitfield7.C: New.
* g++.dg/parse/bitfield8.C: Likewise.
* g++.dg/parse/bitfield9.C: Likewise.
* g++.dg/pr53037-4.C: Test the locations too.

From-SVN: r266900

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/bitfield7.C [new file with mode: 0644]
gcc/testsuite/g++.dg/parse/bitfield8.C [new file with mode: 0644]
gcc/testsuite/g++.dg/parse/bitfield9.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr53037-4.C

index 6481ad4d4dbea1f2d14eb1f033966500062b03c8..fc22f206606b97794afd54107b71a8f81d96bc2b 100644 (file)
@@ -1,3 +1,9 @@
+2018-12-07  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * decl2.c (grokbitfield): Use DECL_SOURCE_LOCATION in error messages
+       about bit-fields with function type, warn_if_not_aligned type, and
+       static bit-fields; avoid DECL_NAME for unnamed declarations.
+
 2018-12-07  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/86669
index 15b0393f756c08b56422c3d270f68962333a8759..a8bf28a0cd954a9f2de0837546e43f4fcfb4e590 100644 (file)
@@ -1046,15 +1046,15 @@ grokbitfield (const cp_declarator *declarator,
      check here.  */
   if (TREE_CODE (value) == FUNCTION_DECL)
     {
-      error ("cannot declare bit-field %qD with function type",
-            DECL_NAME (value));
+      error_at (DECL_SOURCE_LOCATION (value),
+               "cannot declare bit-field %qD with function type", value);
       return NULL_TREE;
     }
 
-  if (width && TYPE_WARN_IF_NOT_ALIGN (type))
+  if (TYPE_WARN_IF_NOT_ALIGN (type))
     {
-      error ("cannot declare bit-field %qD with %<warn_if_not_aligned%> type",
-            DECL_NAME (value));
+      error_at (DECL_SOURCE_LOCATION (value), "cannot declare bit-field "
+               "%qD with %<warn_if_not_aligned%> type", value);
       return NULL_TREE;
     }
 
@@ -1067,7 +1067,8 @@ grokbitfield (const cp_declarator *declarator,
 
   if (TREE_STATIC (value))
     {
-      error ("static member %qD cannot be a bit-field", value);
+      error_at (DECL_SOURCE_LOCATION (value),
+               "static member %qD cannot be a bit-field", value);
       return NULL_TREE;
     }
 
index 58b0ef3f1c032636baaa659a3ada1a63f5b7d7d9..afa3d70534a84ce0d85e25e9838fd2918d2fe822 100644 (file)
@@ -1,3 +1,10 @@
+2018-12-07  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/other/bitfield7.C: New.
+       * g++.dg/parse/bitfield8.C: Likewise.
+       * g++.dg/parse/bitfield9.C: Likewise.
+       * g++.dg/pr53037-4.C: Test the locations too.
+
 2018-12-07  Peter Bergner  <bergner@linux.ibm.com>
 
        PR target/87496
diff --git a/gcc/testsuite/g++.dg/other/bitfield7.C b/gcc/testsuite/g++.dg/other/bitfield7.C
new file mode 100644 (file)
index 0000000..fa13662
--- /dev/null
@@ -0,0 +1,7 @@
+typedef int __attribute__((warn_if_not_aligned(8))) intwna;
+
+struct S
+{
+  intwna : 2;  // { dg-error "cannot declare bit-field" }
+  intwna i : 2;  // { dg-error "10:cannot declare bit-field .i." }
+};
diff --git a/gcc/testsuite/g++.dg/parse/bitfield8.C b/gcc/testsuite/g++.dg/parse/bitfield8.C
new file mode 100644 (file)
index 0000000..19b862c
--- /dev/null
@@ -0,0 +1,4 @@
+struct A
+{
+  static int a : 1;  // { dg-error "14:static member .a. cannot be a bit-field" }
+};
diff --git a/gcc/testsuite/g++.dg/parse/bitfield9.C b/gcc/testsuite/g++.dg/parse/bitfield9.C
new file mode 100644 (file)
index 0000000..5256d2c
--- /dev/null
@@ -0,0 +1,6 @@
+template<typename T>
+struct A
+{
+  typedef T type();
+  type i : 2;  // { dg-error "8:cannot declare bit-field" }
+};
index 553dd9a6c45e88e3b283c06f1bac59e442197132..f73f35f82371ed54166076f141984321a4244e80 100644 (file)
@@ -12,7 +12,7 @@ foo2 (void) /* { dg-error "'warn_if_not_aligned' may not be specified for 'void
 
 struct foo3
 {
-  int i : 2 __attribute__((warn_if_not_aligned(8))); /* { dg-error "'warn_if_not_aligned' may not be specified for 'i'" } */
+  int i : 2 __attribute__((warn_if_not_aligned(8))); /* { dg-error "7:'warn_if_not_aligned' may not be specified for 'i'" } */
 };
 
 typedef unsigned int __u32
@@ -20,5 +20,5 @@ typedef unsigned int __u32
 
 struct foo4
 {
-  __u32 i : 2; /* { dg-error "cannot declare bit-field 'i' with 'warn_if_not_aligned' type" } */
+  __u32 i : 2; /* { dg-error "9:cannot declare bit-field 'i' with 'warn_if_not_aligned' type" } */
 };