[C++] Use cp_expr_loc_or_input_loc in a few additional typeck.c places

Message ID 73376a81-9bdb-fcd7-9cca-e803fff99d87@oracle.com
State New
Headers show
Series
  • [C++] Use cp_expr_loc_or_input_loc in a few additional typeck.c places
Related show

Commit Message

Paolo Carlini Nov. 14, 2019, 11:09 a.m.
Hi,

tested x86_64-linux.

Thanks, Paolo.

///////////////////////
/cp
2019-11-14  Paolo Carlini  <paolo.carlini@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.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++.law/temps1.C: Likewise.

Comments

Paolo Carlini Nov. 14, 2019, 8:23 p.m. | #1
Hi again,

On 14/11/19 12:09, Paolo Carlini wrote:
> Hi,

>

> tested x86_64-linux.


Instead of sending a separate patch, the below has two additional uses. 
Tested as usual.

Thanks, Paolo.

///////////////////
/cp
2019-11-14  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-14  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.
Index: cp/typeck.c
===================================================================
--- cp/typeck.c	(revision 278253)
+++ cp/typeck.c	(working copy)
@@ -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;
@@ -6126,7 +6128,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 +6136,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 +6231,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 +10435,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 278253)
+++ 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 278253)
+++ 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 278253)
+++ 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 278253)
+++ 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 278253)
+++ 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 278253)
+++ 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 278253)
+++ 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 278253)
+++ 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 278253)
+++ 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++.brendan/alignof.C
===================================================================
--- testsuite/g++.old-deja/g++.brendan/alignof.C	(revision 278253)
+++ testsuite/g++.old-deja/g++.brendan/alignof.C	(working copy)
@@ -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: testsuite/g++.old-deja/g++.brendan/sizeof2.C
===================================================================
--- testsuite/g++.old-deja/g++.brendan/sizeof2.C	(revision 278253)
+++ testsuite/g++.old-deja/g++.brendan/sizeof2.C	(working copy)
@@ -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: testsuite/g++.old-deja/g++.law/temps1.C
===================================================================
--- testsuite/g++.old-deja/g++.law/temps1.C	(revision 278253)
+++ 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 }
Jason Merrill Nov. 18, 2019, 8:57 p.m. | #2
On 11/14/19 8:23 PM, Paolo Carlini wrote:
> Hi again,

> 

> On 14/11/19 12:09, Paolo Carlini wrote:

>> Hi,

>>

>> tested x86_64-linux.

> 

> Instead of sending a separate patch, the below has two additional uses. 

> Tested as usual.

> 

> Thanks, Paolo.

> 

> ///////////////////

> 

OK.

Patch

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 }