typeck.c (cp_build_addr_expr_1): Use cp_expr_loc_or_input_loc in three places.
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 18 Nov 2019 23:02:22 +0000 (23:02 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 18 Nov 2019 23:02:22 +0000 (23:02 +0000)
/cp
2019-11-18  Paolo Carlini  <paolo.carlini@oracle.com>

* typeck.c (cp_build_addr_expr_1): Use cp_expr_loc_or_input_loc
in three places.
(cxx_sizeof_expr): Use it in one additional place.
(cxx_alignof_expr): Likewise.
(lvalue_or_else): Likewise.

/testsuite
2019-11-18  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/cpp0x/addressof2.C: Test locations too.
* g++.dg/cpp0x/rv-lvalue-req.C: Likewise.
* g++.dg/expr/crash2.C: Likewise.
* g++.dg/expr/lval1.C: Likewise.
* g++.dg/expr/unary2.C: Likewise.
* g++.dg/ext/lvaddr.C: Likewise.
* g++.dg/ext/lvalue1.C: Likewise.
* g++.dg/tree-ssa/pr20280.C: Likewise.
* g++.dg/warn/Wplacement-new-size.C: Likewise.
* g++.old-deja/g++.brendan/alignof.C: Likewise.
* g++.old-deja/g++.brendan/sizeof2.C: Likewise.
* g++.old-deja/g++.law/temps1.C: Likewise.

From-SVN: r278424

15 files changed:
gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/addressof2.C
gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C
gcc/testsuite/g++.dg/expr/crash2.C
gcc/testsuite/g++.dg/expr/lval1.C
gcc/testsuite/g++.dg/expr/unary2.C
gcc/testsuite/g++.dg/ext/lvaddr.C
gcc/testsuite/g++.dg/ext/lvalue1.C
gcc/testsuite/g++.dg/tree-ssa/pr20280.C
gcc/testsuite/g++.dg/warn/Wplacement-new-size.C
gcc/testsuite/g++.old-deja/g++.brendan/alignof.C
gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C
gcc/testsuite/g++.old-deja/g++.law/temps1.C

index 616a04bdd1d356c576bcaea1b38045e4388c06f4..9bf64dfa6269ea570aa8d979d35c0a8c338af034 100644 (file)
@@ -1,3 +1,11 @@
+2019-11-18  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * typeck.c (cp_build_addr_expr_1): Use cp_expr_loc_or_input_loc
+       in three places.
+       (cxx_sizeof_expr): Use it in one additional place.
+       (cxx_alignof_expr): Likewise.
+       (lvalue_or_else): Likewise.
+
 2019-11-18  Marek Polacek  <polacek@redhat.com>
 
        PR c++/91962 - ICE with reference binding and qualification conversion.
index 747ae42f9120f600e41651fcfa2415c38babe23a..100ae8f81864b1e3d4f50440ed3d3d0672ea7090 100644 (file)
@@ -1765,7 +1765,8 @@ cxx_sizeof_expr (tree e, tsubst_flags_t complain)
   if (bitfield_p (e))
     {
       if (complain & tf_error)
-        error ("invalid application of %<sizeof%> to a bit-field");
+       error_at (cp_expr_loc_or_input_loc (e),
+                 "invalid application of %<sizeof%> to a bit-field");
       else
         return error_mark_node;
       e = char_type_node;
@@ -1825,7 +1826,8 @@ cxx_alignof_expr (tree e, tsubst_flags_t complain)
   else if (bitfield_p (e))
     {
       if (complain & tf_error)
-        error ("invalid application of %<__alignof%> to a bit-field");
+       error_at (cp_expr_loc_or_input_loc (e),
+                 "invalid application of %<__alignof%> to a bit-field");
       else
         return error_mark_node;
       t = size_one_node;
@@ -6127,7 +6129,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
       if (kind == clk_none)
        {
          if (complain & tf_error)
-           lvalue_error (input_location, lv_addressof);
+           lvalue_error (cp_expr_loc_or_input_loc (arg), lv_addressof);
          return error_mark_node;
        }
       if (strict_lvalue && (kind & (clk_rvalueref|clk_class)))
@@ -6135,7 +6137,8 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
          if (!(complain & tf_error))
            return error_mark_node;
          /* Make this a permerror because we used to accept it.  */
-         permerror (input_location, "taking address of rvalue");
+         permerror (cp_expr_loc_or_input_loc (arg),
+                    "taking address of rvalue");
        }
     }
 
@@ -6229,7 +6232,8 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
   if (bitfield_p (arg))
     {
       if (complain & tf_error)
-       error ("attempt to take address of bit-field");
+       error_at (cp_expr_loc_or_input_loc (arg),
+                 "attempt to take address of bit-field");
       return error_mark_node;
     }
 
@@ -10432,7 +10436,7 @@ lvalue_or_else (tree ref, enum lvalue_use use, tsubst_flags_t complain)
   if (kind == clk_none)
     {
       if (complain & tf_error)
-       lvalue_error (input_location, use);
+       lvalue_error (cp_expr_loc_or_input_loc (ref), use);
       return 0;
     }
   else if (kind & (clk_rvalueref|clk_class))
index 199cd0547671b1b3ed4121d708215f7174f3a8f8..f05382c87a730e194a0a36c919607b5a653ccd12 100644 (file)
@@ -1,3 +1,18 @@
+2019-11-18  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/cpp0x/addressof2.C: Test locations too.
+       * g++.dg/cpp0x/rv-lvalue-req.C: Likewise.
+       * g++.dg/expr/crash2.C: Likewise.
+       * g++.dg/expr/lval1.C: Likewise.
+       * g++.dg/expr/unary2.C: Likewise.
+       * g++.dg/ext/lvaddr.C: Likewise.
+       * g++.dg/ext/lvalue1.C: Likewise.
+       * g++.dg/tree-ssa/pr20280.C: Likewise.
+       * g++.dg/warn/Wplacement-new-size.C: Likewise.
+       * g++.old-deja/g++.brendan/alignof.C: Likewise.
+       * g++.old-deja/g++.brendan/sizeof2.C: Likewise.
+       * g++.old-deja/g++.law/temps1.C: Likewise.
+
 2019-11-18  Martin Sebor  <msebor@redhat.com>
 
        PR tree-optimization/92493
index 73942c5f0a513ae1a15e49d83e56defbae5fd9a9..1fa71a27b2bd3e16e51136fec17d42bf61b81b3c 100644 (file)
@@ -8,19 +8,19 @@ addressof (T &x) noexcept
   return __builtin_addressof (x);
 }
 
-auto a = __builtin_addressof (1);              // { dg-error "lvalue required as unary" }
-auto b = addressof (1);                                // { dg-error "cannot bind non-const lvalue reference of type" }
+auto a = __builtin_addressof (1);              // { dg-error "31:lvalue required as unary" }
+auto b = addressof (1);                                // { dg-error "21:cannot bind non-const lvalue reference of type" }
 
 struct S { int s : 5; int t; void foo (); } s;
 
 auto c = __builtin_addressof (s);
 auto d = addressof (s);
-auto e = __builtin_addressof (s.s);            // { dg-error "attempt to take address of bit-field" }
-auto f = addressof (s.s);                      // { dg-error "cannot bind bit-field" }
-auto g = __builtin_addressof (S{});            // { dg-error "taking address of rvalue" }
-auto h = addressof (S{});                      // { dg-error "cannot bind non-const lvalue reference of type" }
-auto i = __builtin_addressof (S::t);           // { dg-error "invalid use of non-static data member" }
-auto j = __builtin_addressof (S::foo);         // { dg-error "invalid use of non-static member function" }
+auto e = __builtin_addressof (s.s);            // { dg-error "33:attempt to take address of bit-field" }
+auto f = addressof (s.s);                      // { dg-error "23:cannot bind bit-field" }
+auto g = __builtin_addressof (S{});            // { dg-error "31:taking address of rvalue" }
+auto h = addressof (S{});                      // { dg-error "21:cannot bind non-const lvalue reference of type" }
+auto i = __builtin_addressof (S::t);           // { dg-error "34:invalid use of non-static data member" }
+auto j = __builtin_addressof (S::foo);         // { dg-error "34:invalid use of non-static member function" }
 
 void
 foo (bool b)
@@ -28,6 +28,6 @@ foo (bool b)
   lab:;
   char c;
   long long int d;
-  auto k = __builtin_addressof (lab);          // { dg-error "was not declared in this scope" }
-  auto l = __builtin_addressof (b ? c : d);    // { dg-error "lvalue required as unary" }
+  auto k = __builtin_addressof (lab);          // { dg-error "33:.lab. was not declared in this scope" }
+  auto l = __builtin_addressof (b ? c : d);    // { dg-error "35:lvalue required as unary" }
 }
index b8f7ddd78953f023ed342f38d7ce824fea3a72b6..815587d194cbaedcb7474d636001b1f3ea080ee6 100644 (file)
@@ -4,7 +4,7 @@ template <class T> T&& declval();
 
 int main()
 {
-  &declval<int>();                     // { dg-error "rvalue" }
+  &declval<int>();                     // { dg-error "16:taking address of rvalue" }
   declval<int>() = declval<int>();     // { dg-error "15:using rvalue as lvalue" }
   declval<int>()++;                    // { dg-error "15:using rvalue as lvalue" }
   --declval<int>();                    // { dg-error "17:using rvalue as lvalue" }
index 5379bb159d1b151224e7547da1f501e53da72c8f..a7d60c201cafa7f717bb9a97bf0891591b8dc02c 100644 (file)
@@ -8,7 +8,7 @@ int& foo::x=temp;
 
 int main() {
   int x = 3;
-  &foo::x = x; // { dg-error "" }
+  &foo::x = x; // { dg-error "3:lvalue required" }
   return 0;
 }
 
index bed47d8e4ec6ebaa613bea840e3835e63d06e7bb..73d156c605137666143bc6c4dbfa0e60dd486086 100644 (file)
@@ -3,5 +3,5 @@
 void f ()
 {
   int n;
-  (char) n = 1; // { dg-error "" }
+  (char) n = 1; // { dg-error "3:lvalue required" }
 }
index 8418815918fb71cf09584f3c9a7a5e48a6bc5e2f..5962bfe19c9437d734121e4939fdd2c78ca279de 100644 (file)
@@ -8,8 +8,8 @@ int n;
 
 void f(void)
 {
-  -n = 0;        // { dg-error "lvalue" }
-  +n = 0;        // { dg-error "lvalue" }
+  -n = 0;        // { dg-error "3:lvalue" }
+  +n = 0;        // { dg-error "3:lvalue" }
 }
 
 template <int>
index 5b217d165949b77f3136652726bcefd57c29b303..6657eea5e1342783320f80cbb045d6b54ceefbbc 100644 (file)
@@ -6,5 +6,5 @@
 void f()
 {
   int n;
-  char* p = &(char) n;         // { dg-error "lvalue" }
+  char* p = &(char) n;         // { dg-error "14:lvalue" }
 }
index bf883eae21f863254a42eb055e076fd92414b5ae..43f2d699b9dfb603bbed363f0c2791239d907a09 100644 (file)
@@ -4,7 +4,7 @@ int main ()
 {
   char c;
 
-  static_cast<int>(c) = 2; // { dg-error "lvalue" "not an lvalue" }
+  static_cast<int>(c) = 2; // { dg-error "3:lvalue" "not an lvalue" }
 
   return c != 2;
 }
index 334ed8a75e06bfd8fc614dffedaccb1a06249b73..61b070c10fd60bec8998ffd8c3e26ab9f2a127da 100644 (file)
@@ -57,7 +57,8 @@ void f(X &x, bool b)
   h (b ? x.i : x.k);
   h (b ? x.j : x.k);
 
-  (long &)(b ? x.i : x.j); // { dg-error "address of bit-field" }
-  (long &)(b ? x.i : x.k); // { dg-error "address of bit-field" }
-  (long &)(b ? x.j : x.k); // { dg-error "address of bit-field" }
+  (long &)(b ? x.i : x.j); // { dg-error "18:attempt to take address of bit-field" }
+  (long &)(b ? x.i : x.k); // { dg-error "18:attempt to take address of bit-field" }
+  // { dg-error "24:attempt to take address of bit-field" "" { target *-*-* } .-1 }
+  (long &)(b ? x.j : x.k); // { dg-error "24:attempt to take address of bit-field" }
 }
index c0d753fae0e96bc6ba74b7da1ece74bd384c3203..2bafff34577fa2c807f6f5be66357a442ba9421e 100644 (file)
@@ -314,11 +314,11 @@ void test (void *p, int n)
     new (&sssac4_2) char[sizeof sssac4_2 + 1];   // { dg-warning "placement" }
 
     // taking the address of a temporary is allowed with -fpermissive
-    new (&fsc ().c) int;                // { dg-warning "address|placement" }
-    new (&fasc1 ().ac) int;             // { dg-warning "address|placement" }
-    new (&fasc2 ().ac) int;             // { dg-warning "address|placement" }
-    new (&fasc3 ().ac) int;             // { dg-warning "address|placement" }
-    new (&fasc4 ().ac) int;             // { dg-warning "address|placement" }
+    new (&fsc ().c) int;                // { dg-warning "18:taking address|placement" }
+    new (&fasc1 ().ac) int;             // { dg-warning "20:taking address|placement" }
+    new (&fasc2 ().ac) int;             // { dg-warning "20:taking address|placement" }
+    new (&fasc3 ().ac) int;             // { dg-warning "20:taking address|placement" }
+    new (&fasc4 ().ac) int;             // { dg-warning "20:taking address|placement" }
 
     new (&uac1) int;                    // { dg-warning "placement" }
     new (&uac2) int;                    // { dg-warning "placement" }
index a79b65286468617c432ba34ee300eef280455e10..a8906aff70c79afe45d92485f0cc1c7f7c81435b 100644 (file)
@@ -5,7 +5,7 @@ struct bar { int bit : 1; };
 void foo (int *r, bar t)
 {
   // doing alignof on a bit-field should be illegal
-  __alignof__ (t.bit);// { dg-error "" } .*
+  __alignof__ (t.bit);// { dg-error "18:invalid application" } .*
 
   // both of these (a regular ref and an INDIRECT_REF) should work
   __alignof__ (r);
index 355bee74645f4f9664269a4b30212fb95f9841b0..23176fa3583161b8f55d6d5720ec3fbbf5e0b1fe 100644 (file)
@@ -12,7 +12,7 @@ main()
 {
   // sizeof may not be applied to a bit-field
   foo f;
-  int i = sizeof (f.bit);// { dg-error "" } .*
+  int i = sizeof (f.bit);// { dg-error "21:invalid application" } .*
 
   return 0;
 }
index d1ac15d6e90f201788e147c23b5e604508de0508..618cb5f7dea2da0f9132dcc40c655835ac8742cb 100644 (file)
@@ -17,4 +17,4 @@ struct cookie
 };
 
 cookie cat(&foo("apabepa"));// { dg-warning "deprecated conversion|forbids converting a string constant" "dep" }
-// { dg-warning "taking address of rvalue" "add" { target *-*-* } .-1 }
+// { dg-warning "13:taking address of rvalue" "add" { target *-*-* } .-1 }