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:
parent
de83907ada
commit
f5a191efec
@ -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.
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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" }
|
||||
}
|
||||
|
@ -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" }
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -3,5 +3,5 @@
|
||||
void f ()
|
||||
{
|
||||
int n;
|
||||
(char) n = 1; // { dg-error "" }
|
||||
(char) n = 1; // { dg-error "3:lvalue required" }
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -6,5 +6,5 @@
|
||||
void f()
|
||||
{
|
||||
int n;
|
||||
char* p = &(char) n; // { dg-error "lvalue" }
|
||||
char* p = &(char) n; // { dg-error "14:lvalue" }
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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" }
|
||||
}
|
||||
|
@ -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" }
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 }
|
||||
|
Loading…
Reference in New Issue
Block a user