Hi,

tested x86_64-linux.

Thanks, Paolo.

///////////////////////

/cp
2019-11-14  Paolo Carlini  <paolo.carl...@oracle.com>

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

/testsuite
2019-11-14  Paolo Carlini  <paolo.carl...@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++.law/temps1.C: Likewise.
Index: cp/typeck.c
===================================================================
--- cp/typeck.c (revision 278216)
+++ cp/typeck.c (working copy)
@@ -6126,7 +6126,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue
       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)))
@@ -6134,7 +6134,8 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue
          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");
        }
     }
 
@@ -6228,7 +6229,8 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue
   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;
     }
 
@@ -10431,7 +10433,7 @@ lvalue_or_else (tree ref, enum lvalue_use use, tsu
   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: testsuite/g++.dg/cpp0x/addressof2.C
===================================================================
--- testsuite/g++.dg/cpp0x/addressof2.C (revision 278216)
+++ testsuite/g++.dg/cpp0x/addressof2.C (working copy)
@@ -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: testsuite/g++.dg/cpp0x/rv-lvalue-req.C
===================================================================
--- testsuite/g++.dg/cpp0x/rv-lvalue-req.C      (revision 278216)
+++ testsuite/g++.dg/cpp0x/rv-lvalue-req.C      (working copy)
@@ -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: testsuite/g++.dg/expr/crash2.C
===================================================================
--- testsuite/g++.dg/expr/crash2.C      (revision 278216)
+++ testsuite/g++.dg/expr/crash2.C      (working copy)
@@ -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: testsuite/g++.dg/expr/lval1.C
===================================================================
--- testsuite/g++.dg/expr/lval1.C       (revision 278216)
+++ testsuite/g++.dg/expr/lval1.C       (working copy)
@@ -3,5 +3,5 @@
 void f ()
 {
   int n;
-  (char) n = 1; // { dg-error "" }
+  (char) n = 1; // { dg-error "3:lvalue required" }
 }
Index: testsuite/g++.dg/expr/unary2.C
===================================================================
--- testsuite/g++.dg/expr/unary2.C      (revision 278216)
+++ testsuite/g++.dg/expr/unary2.C      (working copy)
@@ -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: testsuite/g++.dg/ext/lvaddr.C
===================================================================
--- testsuite/g++.dg/ext/lvaddr.C       (revision 278216)
+++ testsuite/g++.dg/ext/lvaddr.C       (working copy)
@@ -6,5 +6,5 @@
 void f()
 {
   int n;
-  char* p = &(char) n;         // { dg-error "lvalue" }
+  char* p = &(char) n;         // { dg-error "14:lvalue" }
 }
Index: testsuite/g++.dg/ext/lvalue1.C
===================================================================
--- testsuite/g++.dg/ext/lvalue1.C      (revision 278216)
+++ testsuite/g++.dg/ext/lvalue1.C      (working copy)
@@ -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: testsuite/g++.dg/tree-ssa/pr20280.C
===================================================================
--- testsuite/g++.dg/tree-ssa/pr20280.C (revision 278216)
+++ testsuite/g++.dg/tree-ssa/pr20280.C (working copy)
@@ -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: testsuite/g++.dg/warn/Wplacement-new-size.C
===================================================================
--- testsuite/g++.dg/warn/Wplacement-new-size.C (revision 278216)
+++ testsuite/g++.dg/warn/Wplacement-new-size.C (working copy)
@@ -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: testsuite/g++.old-deja/g++.law/temps1.C
===================================================================
--- testsuite/g++.old-deja/g++.law/temps1.C     (revision 278216)
+++ testsuite/g++.old-deja/g++.law/temps1.C     (working copy)
@@ -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 }

Reply via email to