Skip to content
Snippets Groups Projects
Commit 02dff52c authored by Simon Martin's avatar Simon Martin
Browse files

c++: Don't show constructor internal name in error message [PR105483]

We mention 'X::__ct' instead of 'X::X' in the "names the constructor,
not the type" error for this invalid code:

=== cut here ===
struct X {};
void g () {
  X::X x;
}
=== cut here ===

The problem is that we use %<%T::%D%> to build the error message, while
%qE does exactly what we need since we have DECL_CONSTRUCTOR_P. This is
what this patch does.

It also skips until the end of the statement and returns error_mark_node
for this and the preceding if block, to avoid emitting extra (useless)
errors.

	PR c++/105483

gcc/cp/ChangeLog:

	* parser.cc (cp_parser_expression_statement): Use %qE instead of
	incorrect %<%T::%D%>. Skip to end of statement and return
	error_mark_node in case of error.

gcc/testsuite/ChangeLog:

	* g++.dg/parse/error36.C: Adjust test expectation.
	* g++.dg/tc1/dr147.C: Likewise.
	* g++.old-deja/g++.other/typename1.C: Likewise.
	* g++.dg/diagnostic/pr105483.C: New test.
parent 691f682f
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment