Commit f5a191ef by Paolo Carlini Committed by Paolo Carlini

typeck.c (cp_build_addr_expr_1): Use cp_expr_loc_or_input_loc in three places.

/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
parent de83907a
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> 2019-11-18 Marek Polacek <polacek@redhat.com>
PR c++/91962 - ICE with reference binding and qualification conversion. PR c++/91962 - ICE with reference binding and qualification conversion.
......
...@@ -1765,7 +1765,8 @@ cxx_sizeof_expr (tree e, tsubst_flags_t complain) ...@@ -1765,7 +1765,8 @@ cxx_sizeof_expr (tree e, tsubst_flags_t complain)
if (bitfield_p (e)) if (bitfield_p (e))
{ {
if (complain & tf_error) 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 else
return error_mark_node; return error_mark_node;
e = char_type_node; e = char_type_node;
...@@ -1825,7 +1826,8 @@ cxx_alignof_expr (tree e, tsubst_flags_t complain) ...@@ -1825,7 +1826,8 @@ cxx_alignof_expr (tree e, tsubst_flags_t complain)
else if (bitfield_p (e)) else if (bitfield_p (e))
{ {
if (complain & tf_error) 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 else
return error_mark_node; return error_mark_node;
t = size_one_node; t = size_one_node;
...@@ -6127,7 +6129,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) ...@@ -6127,7 +6129,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
if (kind == clk_none) if (kind == clk_none)
{ {
if (complain & tf_error) 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; return error_mark_node;
} }
if (strict_lvalue && (kind & (clk_rvalueref|clk_class))) 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) ...@@ -6135,7 +6137,8 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
if (!(complain & tf_error)) if (!(complain & tf_error))
return error_mark_node; return error_mark_node;
/* Make this a permerror because we used to accept it. */ /* 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) ...@@ -6229,7 +6232,8 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
if (bitfield_p (arg)) if (bitfield_p (arg))
{ {
if (complain & tf_error) 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; return error_mark_node;
} }
...@@ -10432,7 +10436,7 @@ lvalue_or_else (tree ref, enum lvalue_use use, tsubst_flags_t complain) ...@@ -10432,7 +10436,7 @@ lvalue_or_else (tree ref, enum lvalue_use use, tsubst_flags_t complain)
if (kind == clk_none) if (kind == clk_none)
{ {
if (complain & tf_error) if (complain & tf_error)
lvalue_error (input_location, use); lvalue_error (cp_expr_loc_or_input_loc (ref), use);
return 0; return 0;
} }
else if (kind & (clk_rvalueref|clk_class)) else if (kind & (clk_rvalueref|clk_class))
......
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> 2019-11-18 Martin Sebor <msebor@redhat.com>
PR tree-optimization/92493 PR tree-optimization/92493
......
...@@ -8,19 +8,19 @@ addressof (T &x) noexcept ...@@ -8,19 +8,19 @@ addressof (T &x) noexcept
return __builtin_addressof (x); return __builtin_addressof (x);
} }
auto a = __builtin_addressof (1); // { dg-error "lvalue required as unary" } auto a = __builtin_addressof (1); // { dg-error "31:lvalue required as unary" }
auto b = addressof (1); // { dg-error "cannot bind non-const lvalue reference of type" } 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; struct S { int s : 5; int t; void foo (); } s;
auto c = __builtin_addressof (s); auto c = __builtin_addressof (s);
auto d = addressof (s); auto d = addressof (s);
auto e = __builtin_addressof (s.s); // { dg-error "attempt to take address of bit-field" } auto e = __builtin_addressof (s.s); // { dg-error "33:attempt to take address of bit-field" }
auto f = addressof (s.s); // { dg-error "cannot bind bit-field" } auto f = addressof (s.s); // { dg-error "23:cannot bind bit-field" }
auto g = __builtin_addressof (S{}); // { dg-error "taking address of rvalue" } auto g = __builtin_addressof (S{}); // { dg-error "31:taking address of rvalue" }
auto h = addressof (S{}); // { dg-error "cannot bind non-const lvalue reference of type" } auto h = addressof (S{}); // { dg-error "21:cannot bind non-const lvalue reference of type" }
auto i = __builtin_addressof (S::t); // { dg-error "invalid use of non-static data member" } auto i = __builtin_addressof (S::t); // { dg-error "34:invalid use of non-static data member" }
auto j = __builtin_addressof (S::foo); // { dg-error "invalid use of non-static member function" } auto j = __builtin_addressof (S::foo); // { dg-error "34:invalid use of non-static member function" }
void void
foo (bool b) foo (bool b)
...@@ -28,6 +28,6 @@ foo (bool b) ...@@ -28,6 +28,6 @@ foo (bool b)
lab:; lab:;
char c; char c;
long long int d; long long int d;
auto k = __builtin_addressof (lab); // { dg-error "was not declared in this scope" } auto k = __builtin_addressof (lab); // { dg-error "33:.lab. was not declared in this scope" }
auto l = __builtin_addressof (b ? c : d); // { dg-error "lvalue required as unary" } auto l = __builtin_addressof (b ? c : d); // { dg-error "35:lvalue required as unary" }
} }
...@@ -4,7 +4,7 @@ template <class T> T&& declval(); ...@@ -4,7 +4,7 @@ template <class T> T&& declval();
int main() 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>() = declval<int>(); // { dg-error "15:using rvalue as lvalue" }
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" } --declval<int>(); // { dg-error "17:using rvalue as lvalue" }
......
...@@ -8,7 +8,7 @@ int& foo::x=temp; ...@@ -8,7 +8,7 @@ int& foo::x=temp;
int main() { int main() {
int x = 3; int x = 3;
&foo::x = x; // { dg-error "" } &foo::x = x; // { dg-error "3:lvalue required" }
return 0; return 0;
} }
...@@ -3,5 +3,5 @@ ...@@ -3,5 +3,5 @@
void f () void f ()
{ {
int n; int n;
(char) n = 1; // { dg-error "" } (char) n = 1; // { dg-error "3:lvalue required" }
} }
...@@ -8,8 +8,8 @@ int n; ...@@ -8,8 +8,8 @@ int n;
void f(void) void f(void)
{ {
-n = 0; // { dg-error "lvalue" } -n = 0; // { dg-error "3:lvalue" }
+n = 0; // { dg-error "lvalue" } +n = 0; // { dg-error "3:lvalue" }
} }
template <int> template <int>
......
...@@ -6,5 +6,5 @@ ...@@ -6,5 +6,5 @@
void f() void f()
{ {
int n; int n;
char* p = &(char) n; // { dg-error "lvalue" } char* p = &(char) n; // { dg-error "14:lvalue" }
} }
...@@ -4,7 +4,7 @@ int main () ...@@ -4,7 +4,7 @@ int main ()
{ {
char c; 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; return c != 2;
} }
...@@ -57,7 +57,8 @@ void f(X &x, bool b) ...@@ -57,7 +57,8 @@ void f(X &x, bool b)
h (b ? x.i : x.k); h (b ? x.i : x.k);
h (b ? x.j : 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.j); // { dg-error "18:attempt to take address of bit-field" }
(long &)(b ? x.i : x.k); // { dg-error "address of bit-field" } (long &)(b ? x.i : x.k); // { dg-error "18:attempt to take address of bit-field" }
(long &)(b ? x.j : x.k); // { dg-error "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" }
} }
...@@ -314,11 +314,11 @@ void test (void *p, int n) ...@@ -314,11 +314,11 @@ void test (void *p, int n)
new (&sssac4_2) char[sizeof sssac4_2 + 1]; // { dg-warning "placement" } new (&sssac4_2) char[sizeof sssac4_2 + 1]; // { dg-warning "placement" }
// taking the address of a temporary is allowed with -fpermissive // taking the address of a temporary is allowed with -fpermissive
new (&fsc ().c) int; // { dg-warning "address|placement" } new (&fsc ().c) int; // { dg-warning "18:taking address|placement" }
new (&fasc1 ().ac) int; // { dg-warning "address|placement" } new (&fasc1 ().ac) int; // { dg-warning "20:taking address|placement" }
new (&fasc2 ().ac) int; // { dg-warning "address|placement" } new (&fasc2 ().ac) int; // { dg-warning "20:taking address|placement" }
new (&fasc3 ().ac) int; // { dg-warning "address|placement" } new (&fasc3 ().ac) int; // { dg-warning "20:taking address|placement" }
new (&fasc4 ().ac) int; // { dg-warning "address|placement" } new (&fasc4 ().ac) int; // { dg-warning "20:taking address|placement" }
new (&uac1) int; // { dg-warning "placement" } new (&uac1) int; // { dg-warning "placement" }
new (&uac2) int; // { dg-warning "placement" } new (&uac2) int; // { dg-warning "placement" }
......
...@@ -5,7 +5,7 @@ struct bar { int bit : 1; }; ...@@ -5,7 +5,7 @@ struct bar { int bit : 1; };
void foo (int *r, bar t) void foo (int *r, bar t)
{ {
// doing alignof on a bit-field should be illegal // 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 // both of these (a regular ref and an INDIRECT_REF) should work
__alignof__ (r); __alignof__ (r);
......
...@@ -12,7 +12,7 @@ main() ...@@ -12,7 +12,7 @@ main()
{ {
// sizeof may not be applied to a bit-field // sizeof may not be applied to a bit-field
foo f; foo f;
int i = sizeof (f.bit);// { dg-error "" } .* int i = sizeof (f.bit);// { dg-error "21:invalid application" } .*
return 0; return 0;
} }
...@@ -17,4 +17,4 @@ struct cookie ...@@ -17,4 +17,4 @@ struct cookie
}; };
cookie cat(&foo("apabepa"));// { dg-warning "deprecated conversion|forbids converting a string constant" "dep" } 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 }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment