diff options
Diffstat (limited to 'gcc/cp/decl.c')
-rw-r--r-- | gcc/cp/decl.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 07d8543..e664b1c 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -61,10 +61,6 @@ static int ambi_op_p (enum tree_code); static int unary_op_p (enum tree_code); static void push_local_name (tree); static tree grok_reference_init (tree, tree, tree, tree *); -static tree grokfndecl (tree, tree, tree, tree, tree, int, - enum overload_flags, cp_cv_quals, - tree, int, int, int, int, int, int, tree, - tree *); static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *, int, int, tree); static void record_unknown_type (tree, const char *); @@ -5616,6 +5612,8 @@ bad_specifiers (tree object, CHECK is 1 if we must find this method in CTYPE, 0 if we should not look, and -1 if we should not call `grokclassfn' at all. + SFK is the kind of special function (if any) for the new function. + Returns `NULL_TREE' if something goes wrong, after issuing applicable error messages. */ @@ -5633,6 +5631,7 @@ grokfndecl (tree ctype, int friendp, int publicp, int inlinep, + special_function_kind sfk, int funcdef_flag, int template_count, tree in_namespace, @@ -5843,14 +5842,13 @@ grokfndecl (tree ctype, if (check < 0) return decl; - if (flags == NO_SPECIAL && ctype && constructor_name_p (declarator, ctype)) - DECL_CONSTRUCTOR_P (decl) = 1; - - /* Function gets the ugly name, field gets the nice one. This call - may change the type of the function (because of default - parameters)! */ if (ctype != NULL_TREE) - grokclassfn (ctype, decl, flags, quals); + { + if (sfk == sfk_constructor) + DECL_CONSTRUCTOR_P (decl) = 1; + + grokclassfn (ctype, decl, flags, quals); + } decl = check_explicit_specialization (orig_declarator, decl, template_count, @@ -7981,6 +7979,7 @@ grokdeclarator (const cp_declarator *declarator, unqualified_id, virtualp, flags, quals, raises, friendp ? -1 : 0, friendp, publicp, inlinep, + sfk, funcdef_flag, template_count, in_namespace, attrlist); if (decl == NULL_TREE) return decl; @@ -8027,8 +8026,9 @@ grokdeclarator (const cp_declarator *declarator, parms, unqualified_id, virtualp, flags, quals, raises, - friendp ? -1 : 0, friendp, 1, 0, funcdef_flag, - template_count, in_namespace, attrlist); + friendp ? -1 : 0, friendp, 1, 0, sfk, + funcdef_flag, template_count, in_namespace, + attrlist); if (decl == NULL_TREE) return NULL_TREE; } @@ -8213,7 +8213,7 @@ grokdeclarator (const cp_declarator *declarator, decl = grokfndecl (ctype, type, original_name, parms, unqualified_id, virtualp, flags, quals, raises, 1, friendp, - publicp, inlinep, funcdef_flag, + publicp, inlinep, sfk, funcdef_flag, template_count, in_namespace, attrlist); if (decl == NULL_TREE) return NULL_TREE; |