From 9a82bd058df19d15cfbd0c16a09a6ba0c5c5cfa7 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 29 Jun 2017 14:16:58 +0000 Subject: [PATCH] parser.c (cp_parser_direct_declarator): Reorder if to avoid indentation. * parser.c (cp_parser_direct_declarator): Reorder if to avoid indentation. Remove unnecessary assignment of constructor name. From-SVN: r249787 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/parser.c | 45 +++++++++++++++++++-------------------------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c29dd163f4f..ece47f9de12 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2017-06-29 Nathan Sidwell + * parser.c (cp_parser_direct_declarator): Reorder if to avoid + indentation. Remove unnecessary assignment of constructor name. + Whitespace cleanups. * call.c (name_as_c_string): Move CONST_CAST to return. (build_new_method_call_1): Remove unneeded bracing. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index bd99c051340..31840d6ea6f 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -20106,26 +20106,8 @@ cp_parser_direct_declarator (cp_parser* parser, if (TREE_CODE (unqualified_name) == TYPE_DECL) { tree name_type = TREE_TYPE (unqualified_name); - if (class_type && same_type_p (name_type, class_type)) - { - if (qualifying_scope - && CLASSTYPE_USE_TEMPLATE (name_type)) - { - error_at (declarator_id_start_token->location, - "invalid use of constructor as a template"); - inform (declarator_id_start_token->location, - "use %<%T::%D%> instead of %<%T::%D%> to " - "name the constructor in a qualified name", - class_type, - DECL_NAME (TYPE_TI_TEMPLATE (class_type)), - class_type, name_type); - declarator = cp_error_declarator; - break; - } - else - unqualified_name = constructor_name (class_type); - } - else + + if (!class_type || !same_type_p (name_type, class_type)) { /* We do not attempt to print the declarator here because we do not have enough @@ -20135,6 +20117,21 @@ cp_parser_direct_declarator (cp_parser* parser, declarator = cp_error_declarator; break; } + else if (qualifying_scope + && CLASSTYPE_USE_TEMPLATE (name_type)) + { + error_at (declarator_id_start_token->location, + "invalid use of constructor as a template"); + inform (declarator_id_start_token->location, + "use %<%T::%D%> instead of %<%T::%D%> to " + "name the constructor in a qualified name", + class_type, + DECL_NAME (TYPE_TI_TEMPLATE (class_type)), + class_type, name_type); + declarator = cp_error_declarator; + break; + } + unqualified_name = constructor_name (class_type); } if (class_type) @@ -20164,14 +20161,10 @@ cp_parser_direct_declarator (cp_parser* parser, struct S { friend void N::S(); }; */ - && !(friend_p - && class_type != qualifying_scope) + && (!friend_p || class_type == qualifying_scope) && constructor_name_p (unqualified_name, class_type)) - { - unqualified_name = constructor_name (class_type); - sfk = sfk_constructor; - } + sfk = sfk_constructor; else if (is_overloaded_fn (unqualified_name) && DECL_CONSTRUCTOR_P (get_first_fn (unqualified_name))) -- 2.30.2