decl.c (grokdeclarator): Diagnose undefined template contexts.

cp:
	* decl.c (grokdeclarator): Diagnose undefined template contexts.
testsuite:
	* g++.old-deja/g++.pt/incomplete1.C: New test.

From-SVN: r37815
This commit is contained in:
Nathan Sidwell 2000-11-28 10:18:25 +00:00 committed by Nathan Sidwell
parent 5ee4cc26fb
commit eeb753839f
4 changed files with 24 additions and 13 deletions

View File

@ -1,3 +1,7 @@
2000-11-28 Nathan Sidwell <nathan@codesourcery.com>
* decl.c (grokdeclarator): Diagnose undefined template contexts.
2000-11-28 Nathan Sidwell <nathan@codesourcery.com>
* decl.c (grokdeclarator): Do type access control on friend

View File

@ -10995,8 +10995,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
}
else if (TREE_CODE (type) == FUNCTION_TYPE)
{
if (current_class_type == NULL_TREE
|| friendp)
if (current_class_type == NULL_TREE || friendp)
type = build_cplus_method_type (ctype, TREE_TYPE (type),
TYPE_ARG_TYPES (type));
else
@ -11022,18 +11021,11 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
}
type = build_offset_type (ctype, type);
}
else if (uses_template_parms (ctype))
{
if (TREE_CODE (type) == FUNCTION_TYPE)
type
= build_cplus_method_type (ctype, TREE_TYPE (type),
TYPE_ARG_TYPES (type));
}
else
{
cp_error ("structure `%T' not yet defined", ctype);
return error_mark_node;
}
{
incomplete_type_error (NULL_TREE, ctype);
return error_mark_node;
}
declarator = sname;
}

View File

@ -1,3 +1,7 @@
2000-11-28 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.pt/incomplete1.C: New test.
2000-11-28 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.other/friend9.C: New test.

View File

@ -0,0 +1,11 @@
// Build don't link:
// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 28 Nov 2000 <nathan@codesourcery.com>
// Inspired by by 756. We'd ICE when trying to define a member of an
// incomplete template type.
template<class X> struct ObjCount; // ERROR - forward decl
template<class X> int ObjCount<X>::m; // ERROR - undefined type