+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.
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;
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;
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)))
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");
}
}
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;
}
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))
+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
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)
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" }
}
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" }
int main() {
int x = 3;
- &foo::x = x; // { dg-error "" }
+ &foo::x = x; // { dg-error "3:lvalue required" }
return 0;
}
void f ()
{
int n;
- (char) n = 1; // { dg-error "" }
+ (char) n = 1; // { dg-error "3:lvalue required" }
}
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>
void f()
{
int n;
- char* p = &(char) n; // { dg-error "lvalue" }
+ char* p = &(char) n; // { dg-error "14:lvalue" }
}
{
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;
}
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" }
}
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" }
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);
{
// 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;
}
};
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 }