Commit 1eb0072d by Jason Merrill Committed by Jason Merrill

decl.c (grokdeclarator): Complain about a variable using constructor syntax…

decl.c (grokdeclarator): Complain about a variable using constructor syntax coming back null from start_decl.

	* decl.c (grokdeclarator): Complain about a variable using
	constructor syntax coming back null from start_decl.
Fixes g++.other/decl2.C
	* friend.c (make_friend_class): Complain about trying to make
	a non-class type a friend.
Fixes g++.other/friend5.C
	* decl.c (grokfndecl): Set DECL_INITIAL for a defn here.
	(start_function): Not here.
Fixes g++.law/friend4.C

From-SVN: r23353
parent 26f63a77
1998-10-26 Jason Merrill <jason@yorick.cygnus.com>
* decl.c (grokdeclarator): Complain about a variable using
constructor syntax coming back null from start_decl.
* friend.c (make_friend_class): Complain about trying to make
a non-class type a friend.
* decl.c (grokfndecl): Set DECL_INITIAL for a defn here.
(start_function): Not here.
1998-10-26 Brendan Kehoe <brendan@cygnus.com> 1998-10-26 Brendan Kehoe <brendan@cygnus.com>
* decl.c (grokdeclarator): Disallow `explicit' in a friend declaration. * decl.c (grokdeclarator): Disallow `explicit' in a friend declaration.
......
...@@ -8181,6 +8181,11 @@ grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals, ...@@ -8181,6 +8181,11 @@ grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
&& (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1)) && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
set_mangled_name_for_decl (decl); set_mangled_name_for_decl (decl);
if (funcdef_flag)
/* Make the init_value nonzero so pushdecl knows this is not
tentative. error_mark_node is replaced later with the BLOCK. */
DECL_INITIAL (decl) = error_mark_node;
/* Caller will do the rest of this. */ /* Caller will do the rest of this. */
if (check < 0) if (check < 0)
return decl; return decl;
...@@ -8641,10 +8646,15 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) ...@@ -8641,10 +8646,15 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
init = TREE_OPERAND (decl, 1); init = TREE_OPERAND (decl, 1);
decl = start_decl (declarator, declspecs, 1, NULL_TREE, NULL_TREE); decl = start_decl (declarator, declspecs, 1, NULL_TREE, NULL_TREE);
/* Look for __unused__ attribute */ if (decl)
if (TREE_USED (TREE_TYPE (decl))) {
TREE_USED (decl) = 1; /* Look for __unused__ attribute */
finish_decl (decl, init, NULL_TREE); if (TREE_USED (TREE_TYPE (decl)))
TREE_USED (decl) = 1;
finish_decl (decl, init, NULL_TREE);
}
else
cp_error ("invalid declarator");
return 0; return 0;
} }
innermost_code = TREE_CODE (decl); innermost_code = TREE_CODE (decl);
...@@ -12505,10 +12515,6 @@ start_function (declspecs, declarator, attrs, pre_parsed_p) ...@@ -12505,10 +12515,6 @@ start_function (declspecs, declarator, attrs, pre_parsed_p)
&& TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE) && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
cp_warning ("`operator=' should return a reference to `*this'"); cp_warning ("`operator=' should return a reference to `*this'");
/* Make the init_value nonzero so pushdecl knows this is not tentative.
error_mark_node is replaced below (in poplevel) with the BLOCK. */
DECL_INITIAL (decl1) = error_mark_node;
#ifdef SET_DEFAULT_DECL_ATTRIBUTES #ifdef SET_DEFAULT_DECL_ATTRIBUTES
SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs); SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
#endif #endif
......
...@@ -255,10 +255,9 @@ make_friend_class (type, friend_type) ...@@ -255,10 +255,9 @@ make_friend_class (type, friend_type)
error ("`friend' declaration in signature definition"); error ("`friend' declaration in signature definition");
return; return;
} }
if (IS_SIGNATURE (friend_type)) if (IS_SIGNATURE (friend_type) || ! IS_AGGR_TYPE (friend_type))
{ {
error ("signature type `%s' declared `friend'", cp_error ("invalid type `%T' declared `friend'", friend_type);
IDENTIFIER_POINTER (TYPE_IDENTIFIER (friend_type)));
return; return;
} }
......
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