Re: [C++ Patch] for c++/52465
2012/4/11 Jason Merrill ja...@redhat.com: [...] Your ChangeLog needs to be adjusted. :) I did write an updated ChangeLog, but I pasted here the wrong one... I committed it to trunk yesterday, hopefully with the correct ChangeLog . I'll be backporting it to 4.7 after a relaxing weekend :-) -- Fabien
Re: [C++ Patch] for c++/52465
2012/4/7 Jason Merrill ja...@redhat.com: On 04/07/2012 11:37 AM, Fabien Chêne wrote: Perhaps it is more correct like that, in cp_parser_set_decl_spec_type ? Even that seems late. Why not just return the target decl from cp_parser_class_name? Ah yes, that's slightly better. (I've kept the NULL check in strip_using_decl, it seems safer to me. Just tell me if you prefer not) Tested x86_64-unkown-linux-gnu. OK for trunk and 4.7 ? gcc/testsuite/ChangeLog 2012-03-08 Fabien Chêne fab...@gcc.gnu.org PR c++/52465 * g++.dg/lookup/using52.C: New. gcc/cp/ChangeLog 2012-03-08 Fabien Chêne fab...@gcc.gnu.org PR c++/52465 * decl.c (grokdeclarator): Call strip_using_decl. * parser.c (cp_parser_class_name): Call strip_using_decl and perform some checks on the target decl. * name-lookup.c (strip_using_decl): Returns NULL_TREE if the decl to be stripped is NULL_TREE. (qualify_lookup): Call strip_using_decl and perform some checks on the target decl. -- Fabien 52465_3.patch Description: Binary data
Re: [C++ Patch] for c++/52465
On 04/10/2012 04:23 PM, Fabien Chêne wrote: Ah yes, that's slightly better. (I've kept the NULL check in strip_using_decl, it seems safer to me. Just tell me if you prefer not) Tested x86_64-unkown-linux-gnu. OK for trunk and 4.7 ? 2012-03-08 Fabien Chênefab...@gcc.gnu.org PR c++/52465 * decl.c (grokdeclarator): Call strip_using_decl. * parser.c (cp_parser_class_name): Call strip_using_decl and perform some checks on the target decl. * name-lookup.c (strip_using_decl): Returns NULL_TREE if the decl to be stripped is NULL_TREE. (qualify_lookup): Call strip_using_decl and perform some checks on the target decl. Your ChangeLog needs to be adjusted. :) The patch is OK, thanks! Jason
Re: [C++ Patch] for c++/52465
2012/3/29 Jason Merrill ja...@redhat.com: On 03/08/2012 04:34 PM, Fabien Chêne wrote: * decl.c (grokdeclarator): Call strip_using_decl. I would think we ought to be stripping USING_DECLs at a lower level, when we first look up the name in the parser. They shouldn't make it as far as grokdeclarator. Perhaps it is more correct like that, in cp_parser_set_decl_spec_type ? Bootstrapped/tested x86_64-unknown-linux-gnu. gcc/testsuite/ChangeLog 2012-04-07 Fabien Chêne fab...@gcc.gnu.org PR c++/52465 * g++.dg/lookup/using52.C: New. gcc/cp/ChangeLog 2012-04-07 Fabien Chêne fab...@gcc.gnu.org PR c++/52465 * parser.c (cp_parser_class_name): Call strip_using_decl and perform some checks on the target decl. (cp_parser_set_decl_spec_type): Change its prototype so that the second argument be modifiable, and strip using declarations of that argument. (cp_parser_type_specifier): Adjust the calls to cp_parser_set_decl_spec_type. (cp_parser_simple_type_specifier): Likewise. * name-lookup.c (strip_using_decl): Returns NULL_TREE if the decl to be stripped is NULL_TREE. (qualify_lookup): Call strip_using_decl and perform some checks on the target decl. -- Fabien 52465_2.patch Description: Binary data
Re: [C++ Patch] for c++/52465
2012/3/12 Fabien Chêne fabien.ch...@gmail.com: Salut Dodji, 2012/3/12 Dodji Seketeli do...@seketeli.org: [...] Index: gcc/cp/decl.c === --- gcc/cp/decl.c (revision 184891) +++ gcc/cp/decl.c (working copy) @@ -8686,6 +8686,9 @@ grokdeclarator (const cp_declarator *dec type = NULL_TREE; type_was_error_mark_node = true; } + + type = strip_using_decl (type); + I am a little bit curious as to why this change is necessary. It seems to me that the test case of your patch would pass even without this change, wouldn't it? Yes, this testcase would pass, but an existing testcase wouldn't. I don't remeber which one, but I think it was related to using declarations that refer to a typedef. struct A { typedef int T; }; stuct B : A { using B::T; }; More precisely, the testcase which was failing is g++.other/using5.C. -- Fabien
Re: [C++ Patch] for c++/52465
On 03/08/2012 04:34 PM, Fabien Chêne wrote: * decl.c (grokdeclarator): Call strip_using_decl. I would think we ought to be stripping USING_DECLs at a lower level, when we first look up the name in the parser. They shouldn't make it as far as grokdeclarator. Jason
Re: [C++ Patch] for c++/52465
Hello Fabien, Fabien Chêne fabien.ch...@gmail.com a écrit: [...] Index: gcc/cp/decl.c === --- gcc/cp/decl.c (revision 184891) +++ gcc/cp/decl.c (working copy) @@ -8686,6 +8686,9 @@ grokdeclarator (const cp_declarator *dec type = NULL_TREE; type_was_error_mark_node = true; } + + type = strip_using_decl (type); + I am a little bit curious as to why this change is necessary. It seems to me that the test case of your patch would pass even without this change, wouldn't it? Thanks. -- Dodji
Re: [C++ Patch] for c++/52465
Salut Dodji, 2012/3/12 Dodji Seketeli do...@seketeli.org: [...] Index: gcc/cp/decl.c === --- gcc/cp/decl.c (revision 184891) +++ gcc/cp/decl.c (working copy) @@ -8686,6 +8686,9 @@ grokdeclarator (const cp_declarator *dec type = NULL_TREE; type_was_error_mark_node = true; } + + type = strip_using_decl (type); + I am a little bit curious as to why this change is necessary. It seems to me that the test case of your patch would pass even without this change, wouldn't it? Yes, this testcase would pass, but an existing testcase wouldn't. I don't remeber which one, but I think it was related to using declarations that refer to a typedef. struct A { typedef int T; }; stuct B : A { using B::T; }; -- Fabien