Commit e89a6075 by Jason Merrill Committed by Jason Merrill

decl.c (start_function): Call cplus_decl_attributes immediately after grokdeclarator.

        * decl.c (start_function): Call cplus_decl_attributes immediately
        after grokdeclarator.

        * decl.c (start_function): Combine DECL_RESULT handling code.

From-SVN: r49480
parent 3335fcac
2002-02-04 Jason Merrill <jason@redhat.com>
* decl.c (start_function): Call cplus_decl_attributes immediately
after grokdeclarator.
* decl.c (start_function): Combine DECL_RESULT handling code.
2002-02-03 Jason Merrill <jason@redhat.com> 2002-02-03 Jason Merrill <jason@redhat.com>
* xref.c: Remove. * xref.c: Remove.
......
...@@ -13481,7 +13481,10 @@ start_function (declspecs, declarator, attrs, flags) ...@@ -13481,7 +13481,10 @@ start_function (declspecs, declarator, attrs, flags)
decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL); decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL);
/* If the declarator is not suitable for a function definition, /* If the declarator is not suitable for a function definition,
cause a syntax error. */ cause a syntax error. */
if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0; if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
return 0;
cplus_decl_attributes (&decl1, attrs, 0);
fntype = TREE_TYPE (decl1); fntype = TREE_TYPE (decl1);
...@@ -13595,19 +13598,16 @@ start_function (declspecs, declarator, attrs, flags) ...@@ -13595,19 +13598,16 @@ start_function (declspecs, declarator, attrs, flags)
/* Build the return declaration for the function. */ /* Build the return declaration for the function. */
restype = TREE_TYPE (fntype); restype = TREE_TYPE (fntype);
if (!processing_template_decl) /* Promote the value to int before returning it. */
if (c_promoting_integer_type_p (restype))
restype = type_promotes_to (restype);
if (DECL_RESULT (decl1) == NULL_TREE)
{ {
if (!DECL_RESULT (decl1)) DECL_RESULT (decl1)
{ = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
DECL_RESULT (decl1) c_apply_type_quals_to_decl (cp_type_quals (restype),
= build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype)); DECL_RESULT (decl1));
c_apply_type_quals_to_decl (cp_type_quals (restype),
DECL_RESULT (decl1));
}
} }
else
/* Just use `void'. Nobody will ever look at this anyhow. */
DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
/* Initialize RTL machinery. We cannot do this until /* Initialize RTL machinery. We cannot do this until
CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
...@@ -13768,20 +13768,6 @@ start_function (declspecs, declarator, attrs, flags) ...@@ -13768,20 +13768,6 @@ start_function (declspecs, declarator, attrs, flags)
pushlevel (0); pushlevel (0);
current_binding_level->parm_flag = 1; current_binding_level->parm_flag = 1;
cplus_decl_attributes (&decl1, attrs, 0);
/* Promote the value to int before returning it. */
if (c_promoting_integer_type_p (restype))
restype = type_promotes_to (restype);
if (DECL_RESULT (decl1) == NULL_TREE)
{
DECL_RESULT (decl1)
= build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
}
++function_depth; ++function_depth;
if (DECL_DESTRUCTOR_P (decl1)) if (DECL_DESTRUCTOR_P (decl1))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment