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
This commit is contained in:
Paolo Carlini 2019-11-18 23:02:22 +00:00 committed by Paolo Carlini
parent de83907ada
commit f5a191efec
15 changed files with 62 additions and 34 deletions

View 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.

View 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))

View 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

View 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" }
}

View 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" }

View 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;
}

View File

@ -3,5 +3,5 @@
void f ()
{
int n;
(char) n = 1; // { dg-error "" }
(char) n = 1; // { dg-error "3:lvalue required" }
}

View 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>

View File

@ -6,5 +6,5 @@
void f()
{
int n;
char* p = &(char) n; // { dg-error "lvalue" }
char* p = &(char) n; // { dg-error "14:lvalue" }
}

View 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;
}

View 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" }
}

View 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" }

View 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);

View 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;
}

View 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 }