Commit f7da6097 by Mike Stump

90th Cygnus<->FSF quick merge

From-SVN: r13343
parent 63d7d7a1
Fri Dec 27 10:31:40 1996 Paul Eggert <eggert@twinsun.com>
* Make-lang.in (g++spec.o): Don't use $< with an explicit target;
this isn't portable to some versions of `make' (e.g. Solaris 2.5.1).
Tue Dec 24 10:24:03 1996 Jeffrey A Law (law@cygnus.com)
* decl.c (grokvardecl): Avoid ANSI style initialization.
Sun Dec 22 04:22:06 1996 Jason Merrill <jason@yorick.cygnus.com>
* pt.c (tsubst): Tweak arg types for a FUNCTION_TYPE.
Fri Dec 20 17:09:25 1996 Jason Merrill <jason@yorick.cygnus.com>
* pt.c (instantiate_class_template): Call grok_{ctor,op}_properties.
Fri Dec 20 12:17:12 1996 Brendan Kehoe <brendan@lisa.cygnus.com> Fri Dec 20 12:17:12 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
* g++spec.c (lang_specific_driver): Put missing hyphen in front of * g++spec.c (lang_specific_driver): Put missing hyphen in front of
arguments we compare against. Start the count of I at 1, not 0, arguments we compare against. Start the count of I at 1, not 0,
since argv[0] is still the command. since argv[0] is still the command.
Thu Dec 19 11:53:57 1996 Stan Shebs <shebs@andros.cygnus.com>
* lang-specs.h: Accept .cp as an C++ extension.
Mon Dec 16 22:43:31 1996 Brendan Kehoe <brendan@lisa.cygnus.com> Mon Dec 16 22:43:31 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
* cp-tree.h (ptr_reasonably_similar): Add decl. * cp-tree.h (ptr_reasonably_similar): Add decl.
......
...@@ -76,7 +76,7 @@ g++.c: $(srcdir)/gcc.c ...@@ -76,7 +76,7 @@ g++.c: $(srcdir)/gcc.c
ln -s $(srcdir)/gcc.c $@ || cp $(srcdir)/gcc.c $@ ln -s $(srcdir)/gcc.c $@ || cp $(srcdir)/gcc.c $@
g++spec.o: $(srcdir)/cp/g++spec.c g++spec.o: $(srcdir)/cp/g++spec.c
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/cp/g++spec.c
# N.B.: This is a copy of the gcc.o rule, with -DLANG_SPECIFIC_DRIVER added. # N.B.: This is a copy of the gcc.o rule, with -DLANG_SPECIFIC_DRIVER added.
# It'd be nice if we could find an easier way to do this---rather than have # It'd be nice if we could find an easier way to do this---rather than have
......
...@@ -1947,6 +1947,7 @@ extern tree build_new_method_call PROTO((tree, tree, tree, tree, int)); ...@@ -1947,6 +1947,7 @@ extern tree build_new_method_call PROTO((tree, tree, tree, tree, int));
extern tree build_user_type_conversion PROTO((tree, tree, int)); extern tree build_user_type_conversion PROTO((tree, tree, int));
extern tree build_new_function_call PROTO((tree, tree, tree)); extern tree build_new_function_call PROTO((tree, tree, tree));
extern tree build_new_op PROTO((enum tree_code, int, tree, tree, tree)); extern tree build_new_op PROTO((enum tree_code, int, tree, tree, tree));
extern tree type_decays_to PROTO((tree));
/* in class.c */ /* in class.c */
extern tree build_vbase_pointer PROTO((tree, tree)); extern tree build_vbase_pointer PROTO((tree, tree));
......
...@@ -7227,7 +7227,9 @@ grokvardecl (type, declarator, specbits_in, initialized, constp) ...@@ -7227,7 +7227,9 @@ grokvardecl (type, declarator, specbits_in, initialized, constp)
int constp; int constp;
{ {
tree decl; tree decl;
RID_BIT_TYPE specbits = *specbits_in; RID_BIT_TYPE specbits;
specbits = *specbits_in;
if (TREE_CODE (type) == OFFSET_TYPE) if (TREE_CODE (type) == OFFSET_TYPE)
{ {
...@@ -9935,7 +9937,7 @@ grok_ctor_properties (ctype, decl) ...@@ -9935,7 +9937,7 @@ grok_ctor_properties (ctype, decl)
if (TREE_CHAIN (parmtypes) != NULL_TREE if (TREE_CHAIN (parmtypes) != NULL_TREE
&& TREE_CHAIN (parmtypes) == void_list_node) && TREE_CHAIN (parmtypes) == void_list_node)
{ {
cp_error ("invalid constructor; you probably meant `%T (%T&)'", cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
ctype, ctype); ctype, ctype);
SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype); SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
......
...@@ -22,6 +22,7 @@ Boston, MA 02111-1307, USA. */ ...@@ -22,6 +22,7 @@ Boston, MA 02111-1307, USA. */
g++. */ g++. */
{".cc", "@c++"}, {".cc", "@c++"},
{".cp", "@c++"},
{".cxx", "@c++"}, {".cxx", "@c++"},
{".cpp", "@c++"}, {".cpp", "@c++"},
{".c++", "@c++"}, {".c++", "@c++"},
......
...@@ -1125,6 +1125,32 @@ instantiate_class_template (type) ...@@ -1125,6 +1125,32 @@ instantiate_class_template (type)
CLASSTYPE_VTABLE_NEEDS_WRITING (type) = 1; CLASSTYPE_VTABLE_NEEDS_WRITING (type) = 1;
} }
TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
TYPE_HAS_ASSIGNMENT (type) = TYPE_HAS_ASSIGNMENT (pattern);
TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
TYPE_GETS_NEW (type) = TYPE_GETS_NEW (pattern);
TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
TYPE_VEC_DELETE_TAKES_SIZE (type) = TYPE_VEC_DELETE_TAKES_SIZE (pattern);
TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
TYPE_GETS_INIT_AGGR (type) = TYPE_GETS_INIT_AGGR (pattern);
TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
TYPE_USES_COMPLEX_INHERITANCE (type)
= TYPE_USES_COMPLEX_INHERITANCE (pattern);
TYPE_USES_MULTIPLE_INHERITANCE (type)
= TYPE_USES_MULTIPLE_INHERITANCE (pattern);
TYPE_USES_VIRTUAL_BASECLASSES (type)
= TYPE_USES_VIRTUAL_BASECLASSES (pattern);
TYPE_PACKED (type) = TYPE_PACKED (pattern);
TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
{ {
tree binfo = TYPE_BINFO (type); tree binfo = TYPE_BINFO (type);
tree pbases = TYPE_BINFO_BASETYPES (pattern); tree pbases = TYPE_BINFO_BASETYPES (pattern);
...@@ -1214,6 +1240,13 @@ instantiate_class_template (type) ...@@ -1214,6 +1240,13 @@ instantiate_class_template (type)
} }
TYPE_METHODS (type) = tsubst_chain (TYPE_METHODS (pattern), args); TYPE_METHODS (type) = tsubst_chain (TYPE_METHODS (pattern), args);
for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
{
if (DECL_CONSTRUCTOR_P (t))
grok_ctor_properties (type, t);
else if (IDENTIFIER_OPNAME_P (DECL_NAME (t)))
grok_op_properties (t, DECL_VIRTUAL_P (t), 0);
}
DECL_FRIENDLIST (TYPE_MAIN_DECL (type)) DECL_FRIENDLIST (TYPE_MAIN_DECL (type))
= tsubst (DECL_FRIENDLIST (TYPE_MAIN_DECL (pattern)), = tsubst (DECL_FRIENDLIST (TYPE_MAIN_DECL (pattern)),
...@@ -1242,32 +1275,6 @@ instantiate_class_template (type) ...@@ -1242,32 +1275,6 @@ instantiate_class_template (type)
} }
} }
TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
TYPE_HAS_ASSIGNMENT (type) = TYPE_HAS_ASSIGNMENT (pattern);
TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
TYPE_GETS_NEW (type) = TYPE_GETS_NEW (pattern);
TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
TYPE_VEC_DELETE_TAKES_SIZE (type) = TYPE_VEC_DELETE_TAKES_SIZE (pattern);
TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
TYPE_GETS_INIT_AGGR (type) = TYPE_GETS_INIT_AGGR (pattern);
TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
TYPE_USES_COMPLEX_INHERITANCE (type)
= TYPE_USES_COMPLEX_INHERITANCE (pattern);
TYPE_USES_MULTIPLE_INHERITANCE (type)
= TYPE_USES_MULTIPLE_INHERITANCE (pattern);
TYPE_USES_VIRTUAL_BASECLASSES (type)
= TYPE_USES_VIRTUAL_BASECLASSES (pattern);
TYPE_PACKED (type) = TYPE_PACKED (pattern);
TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
if (! uses_template_parms (type)) if (! uses_template_parms (type))
{ {
tree tmp; tree tmp;
...@@ -1803,8 +1810,8 @@ tsubst (t, args, nargs, in_decl) ...@@ -1803,8 +1810,8 @@ tsubst (t, args, nargs, in_decl)
for (; values && values != void_list_node; for (; values && values != void_list_node;
values = TREE_CHAIN (values)) values = TREE_CHAIN (values))
{ {
tree value tree value = TYPE_MAIN_VARIANT (type_decays_to
= tsubst (TREE_VALUE (values), args, nargs, in_decl); (tsubst (TREE_VALUE (values), args, nargs, in_decl)));
tree purpose = tsubst_expr (TREE_PURPOSE (values), tree purpose = tsubst_expr (TREE_PURPOSE (values),
args, nargs, in_decl); args, nargs, in_decl);
tree x = build_tree_list (purpose, value); tree x = build_tree_list (purpose, value);
......
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