From 1038f4f99a5911c3e21740685e648442f7b28117 Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Wed, 1 Feb 1995 19:28:29 +0000 Subject: [PATCH] 55th Cygnus<->FSF merge From-SVN: r8849 --- gcc/cp/ChangeLog | 12 ++++++++++++ gcc/cp/call.c | 5 ++++- gcc/cp/decl2.c | 3 +-- gcc/cp/sig.c | 3 +++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7422a388d1f..c5cfb77b45b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -3,6 +3,18 @@ Wed Jan 25 15:02:09 1995 David S. Miller (davem@nadzieja.rutgers.edu) * class.c (instantiate_type): Change error message text. * typeck2.c (store_init_value): Likewise. +Wed Feb 1 10:12:14 1995 Mike Stump + + * decl2.c (finish_file): Fix bug in Jan 31st change. + +Tue Jan 31 16:59:15 1995 Gerald Baumgartner (gb@lorenzo.cs.purdue.edu) + + * sig.c (build_signature_pointer_or_reference_type): Don't set + IS_AGGR_TYPE for signature pointers/reference so expand_default_init + doesn't expect to find a copy constructor. + * call.c (build_method_call): Treat signature pointers/reference + as if IS_AGGR_TYPE were set. + Tue Jan 31 13:28:56 1995 Mike Stump * gc.c (get_typeid): Pawn off error messages to build_t_desc. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index ee3e8bfef94..631f1af222b 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -1729,7 +1729,10 @@ build_method_call (instance, name, parms, basetype_path, flags) } else { - if (! IS_AGGR_TYPE (basetype)) + if (! IS_AGGR_TYPE (basetype) + && ! (TYPE_LANG_SPECIFIC (basetype) + && (IS_SIGNATURE_POINTER (basetype) + || IS_SIGNATURE_REFERENCE (basetype)))) goto non_aggr_error; /* If `instance' is a signature pointer/reference and `name' is diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index abbcead747b..0f4ec36b76b 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2789,7 +2789,7 @@ finish_file () /* These must be done in backward order to destroy, in which they happen to be! */ - while (vars) + for (vars = static_aggregates; vars; vars = TREE_CHAIN (vars)) { tree decl = TREE_VALUE (vars); tree type = TREE_TYPE (decl); @@ -2813,7 +2813,6 @@ finish_file () if (TREE_STATIC (vars)) expand_end_cond (); } - vars = TREE_CHAIN (vars); } for (; static_dtors; static_dtors = TREE_CHAIN (static_dtors)) diff --git a/gcc/cp/sig.c b/gcc/cp/sig.c index 65938b39521..282dce97717 100644 --- a/gcc/cp/sig.c +++ b/gcc/cp/sig.c @@ -199,6 +199,9 @@ build_signature_pointer_or_reference_type (to_type, constp, volatilep, refp) CLASSTYPE_VFIELD (t) = vptr; DECL_FCONTEXT (CLASSTYPE_VFIELD (t)) = t; TYPE_ALIGN (t) = TYPE_ALIGN (optr_type); + + /* A signature pointer/reference isn't a `real' class. */ + IS_AGGR_TYPE (t) = 0; } {