[Patch] PR c++/26256

Fabien Chêne fabien.chene@gmail.com
Mon Nov 15 21:40:00 GMT 2010


Hello,

2010/8/20 Jason Merrill <jason@redhat.com>:
> On 08/18/2010 03:05 PM, Fabien Chêne wrote:
>>
>> +diagnose_conflicting_using_decls (tree decl, tree real_decl, tree
>> using_decl)
>
> I don't think we need to have special code to check for clashes between
> using decls and other decls; such collisions ought to be caught by the same
> code that catches two data members with the same name.  It looks like this
> code in finish_member_declaration is preventing that:
>
>>  /* Enter the DECL into the scope of the class.  */
>>  else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
>>           || pushdecl_class_level (decl))
>
> What happens if you just remove the USING_DECL check here?

Sounds like it was  the right thing to do. I have had to modify a bit
the parser in order to handle USING_DECLs.
I also have modified supplement_binding() to handle USING_DECLs. It is
a bit touchy, but it seems to work well.
Please also double check that lookup/using31.C is correct, I am not sure.

> Perhaps the checking code in handle_using_decl is also unnecessary.

Definitely.

Regtested x86_64-unknown-linux-gnu without regressions on an old tree.
Regtesting in progress on a fresh tree.
OK to commit if it succeeds ?

gcc/ChangeLog

2010-11-15  Fabien Chêne  <fabien@gcc.gnu.org>

	PR c++/26256
	* dbxout.c (dbxout_type_fields): Ignore using declarations.


gcc/testsuite/ChangeLog

2010-11-15  Fabien Chêne  <fabien@gcc.gnu.org>

	PR c++/26256
	* g++.dg/lookup/using23.C: New.
	* g++.dg/lookup/using24.C: New.
	* g++.dg/lookup/using25.C: New.
	* g++.dg/lookup/using26.C: New.
	* g++.dg/lookup/using27.C: New.
	* g++.dg/lookup/using28.C: New.
	* g++.dg/lookup/using29.C: New.
	* g++.dg/lookup/using30.C: New.
	* g++.dg/lookup/using31.C: New.
	* g++.dg/lookup/using32.C: New.
	* g++.dg/lookup/using33.C: New.
	* g++.dg/lookup/using34.C: New.
	* g++.dg/debug/using4.C: New.
	* g++.dg/debug/using5.C: New.
	* g++.old-deja/g++.other/using1.C: Adjust.
	* g++.dg/template/using2.C: Likewise.

gcc/cp/ChangeLog

2010-11-15  Fabien Chêne  <fabien@gcc.gnu.org>

	PR c++/26256
	* search.c (lookup_field_1): Get rid of the comment saying that
	USING_DECL should not be returned, and actually return USING_DECL
	if appropriate.
	* semantics.c (finish_member_declaration): Remove the check that
	prevents USING_DECLs from being verified by pushdecl_class_level.
	* typeck.c (build_class_member_access_expr): Handle USING_DECLs.
	* class.c (check_field_decls): Keep using declarations.
	* parser.c (cp_parser_nonclass_name): Handle USING_DECLs.
	* name-lookup.c (supplement_binding): Extend the `struct stat'
	hack to handle using declarations.
	(push_class_level_binding): Returns early for dependent USING_DECLs
	and for USING_DECLs that refers to FUNCTION_DECL.

-- 
Fabien



More information about the Gcc-patches mailing list