re PR c/70671 (Wrong column number shown for "error: cannot take address of bit-field")
authorMarek Polacek <polacek@redhat.com>
Fri, 15 Apr 2016 14:46:06 +0000 (14:46 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Fri, 15 Apr 2016 14:46:06 +0000 (14:46 +0000)
PR c/70671
* c-typeck.c (build_unary_op): Pass location down to error and
warning call.

* gcc.dg/bitfld-22.c: New test.

From-SVN: r235032

gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/bitfld-22.c [new file with mode: 0644]

index 3ba3f4ea2d2cef7faa19df3f780b702471c9241a..7257f79e0b2507abdcab7f17a1a7ede5cf0d2669 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-15  Marek Polacek  <polacek@redhat.com>
+
+       PR c/70671
+       * c-typeck.c (build_unary_op): Pass location down to error and
+       warning call.
+
 2016-04-15  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/70436
index 9a1499428d4e8eb10dc570e94012c36acae60a2d..59a3c6153b7f3a4fe1a488d8c92a92dcca4171f3 100644 (file)
@@ -4436,8 +4436,8 @@ build_unary_op (location_t location,
        case COMPONENT_REF:
          if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
            {
-             error ("cannot take address of bit-field %qD",
-                    TREE_OPERAND (arg, 1));
+             error_at (location, "cannot take address of bit-field %qD",
+                       TREE_OPERAND (arg, 1));
              return error_mark_node;
            }
 
@@ -4449,15 +4449,16 @@ build_unary_op (location_t location,
              if (!AGGREGATE_TYPE_P (TREE_TYPE (arg))
                  && !VECTOR_TYPE_P (TREE_TYPE (arg)))
                {
-                 error ("cannot take address of scalar with reverse storage "
-                        "order");
+                 error_at (location, "cannot take address of scalar with "
+                           "reverse storage order");
                  return error_mark_node;
                }
 
              if (TREE_CODE (TREE_TYPE (arg)) == ARRAY_TYPE
                  && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (arg)))
-               warning (OPT_Wscalar_storage_order, "address of array with "
-                       "reverse scalar storage order requested");
+               warning_at (location, OPT_Wscalar_storage_order,
+                           "address of array with reverse scalar storage "
+                           "order requested");
            }
 
        default:
index 61c8f1289786bee8b5abcf1ab07d69f79abfc5c7..0f2e861c5b30720bb5e2cf51ef6bf29624cd08f5 100644 (file)
@@ -1,3 +1,8 @@
+2016-04-15  Marek Polacek  <polacek@redhat.com>
+
+       PR c/70671
+       * gcc.dg/bitfld-22.c: New test.
+
 2016-04-15  Bernd Schmidt  <bschmidt@redhat.com>
 
        * gcc.target/i386/pr46470.c: Add -mno-red-zone to dg-options for
diff --git a/gcc/testsuite/gcc.dg/bitfld-22.c b/gcc/testsuite/gcc.dg/bitfld-22.c
new file mode 100644 (file)
index 0000000..2fb904b
--- /dev/null
@@ -0,0 +1,18 @@
+/* PR c/70671 */
+/* { dg-do compile } */
+
+extern void bar (int *);
+
+struct S
+{
+  int x:2;
+} s, *r;
+
+void
+foo (void)
+{
+  int *p1 = &s.x; /* { dg-error "13:cannot take address of bit-field 'x'" } */
+  int *p2;
+  p2 = &s.x; /* { dg-error "8:cannot take address of bit-field 'x'" } */
+  bar (&s.x); /* { dg-error "8:cannot take address of bit-field 'x'" } */
+}