+2019-10-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * typeck.c (build_x_unary_op): Use the location_t argument in
+ three error_at.
+
2019-10-29 Marek Polacek <polacek@redhat.com>
PR c++/90998 - ICE with copy elision in init by ctor and -Wconversion.
* cp-tree.h (cxx_simulate_builtin_function_decl): Declare.
* decl.c (cxx_simulate_builtin_function_decl): New function.
- * cp-objcp-common.h (LANG_HOOKS_SIMULATE_BUILTIN_FUNCTION_DECL): Define
- to the above.
+ * cp-objcp-common.h (LANG_HOOKS_SIMULATE_BUILTIN_FUNCTION_DECL):
+ Define to the above.
2019-10-28 Martin Sebor <msebor@redhat.com>
if (DECL_CONSTRUCTOR_P (fn) || DECL_DESTRUCTOR_P (fn))
{
if (complain & tf_error)
- error (DECL_CONSTRUCTOR_P (fn)
- ? G_("taking address of constructor %qD")
- : G_("taking address of destructor %qD"),
- fn);
+ error_at (loc, DECL_CONSTRUCTOR_P (fn)
+ ? G_("taking address of constructor %qD")
+ : G_("taking address of destructor %qD"),
+ fn);
return error_mark_node;
}
}
{
if (complain & tf_error)
{
- error ("invalid use of %qE to form a "
- "pointer-to-member-function", xarg.get_value ());
+ error_at (loc, "invalid use of %qE to form a "
+ "pointer-to-member-function", xarg.get_value ());
if (TREE_CODE (xarg) != OFFSET_REF)
- inform (input_location, " a qualified-id is required");
+ inform (loc, " a qualified-id is required");
}
return error_mark_node;
}
else
{
if (complain & tf_error)
- error ("parentheses around %qE cannot be used to form a"
- " pointer-to-member-function",
- xarg.get_value ());
+ error_at (loc, "parentheses around %qE cannot be used to "
+ "form a pointer-to-member-function",
+ xarg.get_value ());
else
return error_mark_node;
PTRMEM_OK_P (xarg) = 1;
+2019-10-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * g++.dg/other/ptrmem8.C: Test locations too.
+ * g++.dg/template/dtor6.C: Likewise.
+
2019-10-29 Marek Polacek <polacek@redhat.com>
PR c++/90998 - ICE with copy elision in init by ctor and -Wconversion.
template<int> void foo(void (A::* f)())
{
A a;
- &(a.*f); // { dg-error "invalid use of\[^\n\]*\\.\\*\[^\n\]*to form|qualified-id is required" }
+ &(a.*f); // { dg-error "3:invalid use of\[^\n\]*\\.\\*\[^\n\]*to form|qualified-id is required" }
}
template<int> void bar(void (A::* f)())
{
A *p;
- &(p->*f); // { dg-error "invalid use of\[^\n\]*->\\*\[^\n\]*to form|qualified-id is required" }
+ &(p->*f); // { dg-error "3:invalid use of\[^\n\]*->\\*\[^\n\]*to form|qualified-id is required" }
}
static int i;
};
-template<int N> int A<N>::i = { A::~A }; // { dg-error "non-static member function" }
+template<int N> int A<N>::i = { A::~A }; // { dg-error "36:invalid use of non-static member function" }
template class A<0>;
struct X { };
-int i1 = X::~X; // { dg-error "non-static member function" }
-int i2 = &X::~X; // { dg-error "address of destructor" }
-int i3 = &A<0>::~A; // { dg-error "address of destructor" }
+int i1 = X::~X; // { dg-error "13:invalid use of non-static member function" }
+int i2 = &X::~X; // { dg-error "10:taking address of destructor" }
+int i3 = &A<0>::~A; // { dg-error "10:taking address of destructor" }