No empty .Rs/.Re
[netbsd-mini2440.git] / gnu / usr.bin / g++ / cc1plus / ChangeLog89
blob6562817fee38a8a6ac95c947cb8954036673d61f
1 Sun Dec 31 10:47:51 1989    (tiemann at calvin)
3         * cplus-cvt.c (build_up_reference): Take multiple inheritance into
4         account in all (instead of just some) cases.  Take virtual
5         baseclasses into account in all (instead of no) cases.
7         * cplus-init.c (build_vbase_delete): Convert ADDR before calling
8         destructr.  Otherwise privately derived baseclasses will give
9         problems.
11         * cplus-init.c (expand_aggr_init_1): Distinguish case where
12         initializer list fails because virtual baseclass lacks default
13         initializer and other bad argument lists.
15 Sat Dec 30 13:09:43 1989    (tiemann at calvin)
17         * cplus-tree.h (lang_type): Added bit for MARKED6.  Used to use
18         MARKED3 to mean `base class initialized', but that conflicts with
19         use meaning `virtual baseclass processed' in cplus-search.c.
20         * cplus-init.c (finish_base_init): Use _MARKED6 instead of
21         _MARKED3 to indicate a baseclass has been initialized.
23         * cplus-init.c (expand_aggr_init_1): If TYPE_HAS_CONSTRUCTOR(TYPE)
24         but no constructor takes the initializer, and there is no X(X&)
25         constructor, generate code for X(X&) constructor by hand.
27         * cplus-typeck.c (build_modify_expr_1): Substantially simplified
28         using assumption that LHS and RHS are type-compatible as a
29         consequence of being elements of isomorphic structures.
31         * cplus-init.c (expand_aggr_init): If EXP is initialized from
32         an object of its same type, and EXP does not have an X(X&)
33         constructor, have build_modify_expr do the work.
35 Fri Dec 29 00:29:45 1989    (tiemann at calvin)
37         * cplus-class.c (finish_struct): Don't build default functions by
38         default.  Instead, rely on compiler doing the Right Thing when
39         handling INIT_EXPR and MODIFY_EXPR.
41         * cplus-typeck.c (build_modify_expr): Don't copy virtual function
42         table fields or virtual baseclass fields when performing
43         memberwise copying.
44         Instead, split `build_modify_expr' into two functions, a recursive
45         form `build_modify_expr_1' which doesn't do any copying for
46         virtual baseclasses, and a non-recursive form `build_modify_expr',
47         which does handle these at top level.
49 Thu Dec 28 12:37:37 1989    (tiemann at calvin)
51         * cplus-decl.c (build_default_constructor): Typo--used
52         DECL_VIRTUAL_P (...) when VFIELD_NAME_P (DECL_NAME (...)) was
53         meant.  Also, take into account fact that second arg might be "in
54         charge" arg.
56         * cplus-class.c (finish_base_struct): Move setting of
57         TYPE_USES_VIRTUAL_BASECLASSES from here...
58         * cplus-decl.c (xref_tag): ...to here.  Needed because
59         constructors for virtual baseclasses now need new type signatures.
61         * cplus-decl2.c (grokclassfn): Rewrote code that inserts
62         parameters so that SOS will work with virtual baseclasses.
63         @@ But rest of SOS code must be changed to deal with this.
65         * cplus-init.c (expand_aggr_vbase_init): Changed interface.  Last
66         arg is no longer FUNCTION_DECL, rather, it is the list of
67         initializations that the constructor must perform (if in charge).
68         All virtual baseclasses, whether they need constructors or not,
69         will be initialized one way or another.
71         * cplus-decl.c (finish_function): Don't do special things for
72         constructors with virtual baseclasses.  Leave that up to
73         `finish_base_init'.
74         * cplus-init.c (finish_stmt): Same change.
76         * cplus-init.c (finish_base_init): Test "in charge" variable and
77         conditionally do all virtual baseclass initialization.
79         * cplus-class.c (build_method_call): New flag LOOKUP_HAS_IN_CHARGE
80         which means that parameter list comes with the "in charge"
81         parameter already set up.  If the call is to a constructor, and
82         this flag is not set, then say we are "in charge" iff constructor
83         called is for new object.
84         * cplus-init.c (expand_aggr_init_1): Add "in charge" parameter
85         when appropriate, and set FLAGS in those cases.
87         * cplus-method.c (fndecl_as_string): Don't print "in charge"
88         variable when formatting constructors for objects with virtual
89         baseclasses.
91         * cplus-tree.h (lang_decl): Add bit for constructors which build
92         objects with virtual baseclasses.  These constructors take a new
93         extra argument after the `this' pointer that says whether they are
94         "in charge" of initializing virtual baseclass things or not.
95         * cplus-decl2.c (grokclassfn): Set DECL_CONSTRUCTOR_WITH_VBASE_P
96         bit when appropriate.  Also, add extra parameter in that case.
97         * All GNU C++ files: Change name of AUTO_DELETE_IDENTIFIER to
98         IN_CHARGE_IDENTIFIER, since that is the correct generalization of
99         its function, and thus allows the same identifier to be used in
100         constructors and destructors.
102 Thu Dec 21 12:58:05 1989  Michael Tiemann  (tiemann at hudson)
104         * cplus-init.c (expand_aggr_init): If initializing from a GNU C
105         CONSTRUCTOR, consider the elts in the constructor as parameters to
106         an implicit GNU C++ constructor.
108 Wed Dec 20 10:45:46 1989  Michael Tiemann  (tiemann at hudson)
110         * cplus-decl.c (duplicate_decls): Don't know why I turned off
111         propagation of DECL_IN_AGGR_P bit, but it needs to be
112         on--otherwise we cannot catch duplicate method declarations in
113         class scope.  Was it turned off (erroneously) for efficiency
114         reasons?
116         * cplus-class.c (convert_harshness): Don't see two functions
117         needing user-defined type conversions as ambiguous is one comes
118         from immediate class, when the other comes from a base class.
120         * cplus-decl.c (grokdeclarator): Don't permit storage class
121         specifiers in parameter declarations.
123         * cplus-typeck.c (mark_addressable): Say we're sorry if named
124         return value much change from register to memory.  Also, since
125         TREE_ADDRESSABLE is checked at top, no need to recheck in various
126         other parts.
127         * cplus-cvt.c (build_up_reference): Same change.
129         * stmt.c (expand_function_start): If function value is in a
130         register, set TREE_REGDECL of the DECL_RESULT.
132         * cplus-class.c (convert_harshness): Conversion of enum to int
133         costs an extra penalty.  Also, don't permit one kind of enum to
134         convert to another.
136         * cplus-search.c (dfs_pushdecls): Only set TREE_USED to zero for
137         FIELD_DECLS.  If we zero it out for e.g. VAR_DECLs, they won't get
138         written out at end of file.
140 Tue Dec 19 17:19:31 1989  Michael Tiemann  (tiemann at hudson)
142         * cplus-decl.c (finish_decl): If we are at top level and
143         allocation is temporary, switch to permanent allocation before
144         calling `grok_reference_init'.  Also, initialization of references
145         was losing when initializer was a constructor.
146         @@ Problem that must be better solved: The compiler was confused
147         about what NEW_EXPR meant--when it when looking for temp space for
148         the reference, it was grabbing space from the file-level
149         initialization function, not from static space.  What's needed is
150         objects which really know how to get the kind of space they are
151         looking for when they are really expanded.
153         * cplus-type2.c (build_functional_cast): Check that type is
154         defined before testing various constructor bits.
156 Thu Dec 14 15:14:12 1989  Michael Tiemann  (tiemann at arkesden)
158         * cplus-tree.c (make_deep_copy,copy_to_permanent): New functions.
159         * cplus-init.c (build_new): Dec 12 change was wrong.  Instead,
160         call copy_to_permanent if we need to stash away the initializer.
162 Tue Dec 12 01:16:31 1989  Michael Tiemann  (tiemann at arkesden)
164         * cplus-init.c (build_new): Check that INIT is not NULL_TREE
165         before checking its permanence.
167         * cplus-decl.c (decls_match): If TREE_TYPE (NEWDECL) is
168         ERROR_MARK_NODE, don't call comptypes.
170         * cplus-decl2.c (grokclassfn): Parameters for constructors with
171         virtual baseclasses must be build on permanent_obstack.
173         * cplus-parse.y (member_init): If using old-style member
174         initialization for base class, remember to move allocation to the
175         permaent_obstack before reading the initializer.
177         * cplus-class.c (build_method_call): If global member function is
178         good, record that fact in BEST.  That way our early-out for member
179         functions won't accidently call an inferior member function.
181         * cplus-decl.c (grokdeclarator): If TREE_CODE (decl) ==
182         ERROR_MARK, then silently continue processing, rather than
183         aborting compilation.
185         * cplus-parse.y (except_stmts): Call `expand_start_catch' and
186         `expand_end_catch' instead of `expand_exit_except' when expanding
187         default catch clause.  Otherwise, we scream out to the next
188         handler, not to the point after the handler.
190         * cplus-class.c (build_overload_call): continue statement missing
191         in TYPE_DECL case.
193 Sat Dec  9 23:27:56 1989  Michael Tiemann  (tiemann at arkesden)
195         * cplus-decl.c (xref_tag): Mark REF in addition to all its
196         basetypes so we can protect against the user declaring recursive
197         types by accident.  Also fixed Braino in testing value of I after
198         the BINFO loop.
200 Thu Dec  7 16:37:28 1989  Michael Tiemann  (tiemann at arkesden)
202         * cplus-search.c (dfs_record_inheritance): Check that MI_SIZE is
203         nonzero before entering loop which uses it as stride.
205         * cplus-typeck.c (build_component_ref_2): Make subroutine of code
206         which builds the final COMPONENT_REF structure because it must be
207         recursive in the case we have a field from a base class of a
208         virtual base class.
210 Wed Dec  6 08:05:59 1989  Michael Tiemann  (tiemann at arkesden)
212         * cplus-class.c (build_scoped_method_call): Dec 2 introduced a bug
213         by attempting to optimize tree node allocation.  Fixed by always
214         converting EXP.
216         * cplus-decl.c (grokdeclarator): If TYPE becomes ERROR_MARK_NODE,
217         and we are chasing down the declarator, must chase to TREE_OPERAND
218         (DECLARATOR, 1) if TREE_CODE (DECLARATOR) is SCOPE_REF.
220         * cplus-class.c (finish_struct): Change criterion for building
221         init list from != CONST_DECL to == FIELD_DECL.  Also, don't count
222         a class as needing constructing or needing constructor based on
223         static members.
225         * cplus-init.c (expand_vec_init): Call itself recursively with
226         FROM_ARRAY nonzero if TREE_TYPE (init) is same as TREE_TYPE (exp).
227         Also, if coming FROM_ARRAY, only call `expand_aggr_init' if there
228         is a constructor to call.  Otherwise, call `expand_assignment'.
230         * cplus-class.c (finish_struct): Can't have a default constructor
231         if the class has reference types without default initial values.
233         * cplus-tree.h (TYPE_RAISES_EXCEPTIONS): Use TYPE_NAME instead of
234         (tree) TYPE_LANG_SPECIFIC.
235         * cplus-decl.c (duplicate_decls): Now TYPE_LANG_SPECIFIC implies
236         IS_AGGR_TYPE always.
238         * cplus-init.c (build_default_constructor): Don't build
239         initializer for default members.
241         * cplus-class.c (finish_struct): If FUNCTION_DECL has
242         IDENTIFIER_ERROR_LOCUS set, then don't keep the function in the
243         class.  It is evil.
245         * cplus-init.c (expand_member_init): Don't permit initialization
246         of member from base class--unless baseclass is virtual and has no
247         constructor.
248         * cplus-init.c (member_init_ok_or_else): New function
249         encapsulating this and other checks for validity of member
250         initialization.
252         * cplus-type2.c (build_functional_cast): Try going through type
253         conversion function if no constructors apply.
255         * cplus-typeck.c (c_expand_return): When returning a named return
256         value, call `use_variable' on the result, in case it is in a
257         register.
259         * cplus-class.c (compute_conversion_costs): Don't warn about
260         contravariance violations (or other problems) as a result of
261         calling `comp_target_types' (via call to `instantiate_type').
263         * cplus-init.c (expand_aggr_init): Check that INIT is nonzero
264         before accessing its TREE_TYPE.
266 Tue Dec  5 00:13:33 1989  Michael Tiemann  (tiemann at arkesden)
268         * integrate.c (copy_rtx_and_substitute): If we folded something
269         completely into a constant, don't try to make it a legitimate
270         memory reference out of it.
272         * cplus-class.c (propagate_basetype_offsets): Forgot to set
273         ASSOC_TYPE (ASSSOC) when building the new basetype.
275         * cplus-init.c (expand_aggr_init): When initializing const array,
276         turn off const bits during initialization.  Otherwise constructor
277         can't be called (since it is calling from const object to
278         non-const member function).
280         * cplus-method.c (build_overload_name): Set PARMTYPE to
281         TYPE_MAIN_VARIANT (PARMTYPE) after extracting interesting bits.
283 Mon Dec  4 04:56:08 1989  Michael Tiemann  (tiemann at arkesden)
285         * cplus-decl.c (finish_decl): wrt Nov 14 change, only change
286         DECL_NAME of TTYPE if DECL is not a FUNCTION_DECL.  It screws up
287         consing up of default functions.
288         * cplus-decl.c (grokdeclarator): When replacing anonymous aggr
289         names with reasonable aggr names, change the names of any default
290         constructors and/or destructors.
292         * cplus-tree.h (type_flags): Added bits for
293         TREE_GETS_CONST_{ASSIGN,INIT}_REF.
294         * cplus-decl.c (grok_{ctor,op}_properties): Set bits here.
295         * cplus-class.c (finish_base_struct): Read bits here.
296         * cplus-class.c (finish_struct): If 
298         * cplus-init.c (expand_vec_init): Implement copy initialization
299         from one vector to another (to make X(X&) work if members
300         are vectors of X).  Added parameter FROM_ARRAY to signify this
301         fact.
302         * All callers changed.  
304         * cplus-decl.c (grokdeclarator): Test for validity of destructor
305         declaration was too harsh.  It was not allowing one to declare
306         that a destructor from a base class had public visibility in the
307         current class.  
309         * cplus-method.c (hack_identifier): Vestigial double TREE_VALUE.
310         Now that we use baselinks, everything is one level of list.
312         * expr.c (expand_builtin): Fixed for BUILTIN_SAVEREGS case, again.
313         This time, loop was failing because there was only one insn being
314         protected.  Now, emit a note, so that loop terminates properly.
316         * cplus-decl.c (build_default_constructor): Handle initialization
317         of anonymous unions by bitwise copy.
318         * cplus-init.c (finish_base_init): Handle wholesale initialization
319         of anonymous unions, i.e., the whole union, rather than just any
320         one member.
322 Sun Dec  3 13:32:29 1989  Michael Tiemann  (tiemann at arkesden)
324         * cplus-decl.c (grok_ctor_properties): Add argument CTYPE to say
325         what class type we are grokking for.
327         * All GNU C++ files: Changed tests against IS_AGGR_TYPE when test
328         against TYPE_LANG_SPECIFIC tests the property in which we are
329         interested.
331         * cplus-decl.c (grok_ctor_properties): Notice whether constructor
332         can be used as default constructor, i.e., X ().
333         * cplus-class.c (base_info): Add new fields `needs_default_ctor'
334         and `cant_have_default_ctor'.  Set the former if any of the
335         basetypes define a default constructor.  Set the latter if and of
336         the basetypes define constructors, but not the default
337         constructor.
338         * cplus-class.c (finish_struct): If NEEDS_DEFAULT_CTOR and not
339         CANT_HAVE_DEFAULT_CTOR, then cons up a default constructor for T.
340         * cplus-lex.c (cons_up_default_function): Handle this new kind of
341         default constructor.
342         * cplus-decl.c (finish_function): Ditto.
344         * cplus-typeck.c (build_modify_expr): Change assignment to this
345         from error to warning if FLAG_THIS_IS_VARIABLE.
347         * cplus-class.c (finish_struct): Build default X(X&) constructor
348         if there are *any* constructors, not just if there are inherited
349         X(X&) constructors.
351         * integrate.c (function_cannot_inline_p): Raise threshold from 3
352         to 4, since we copy more NOTEs now.
354         * cplus-decl.c (finish_function): If DECL_CONSTRUCTOR_P (FNDECL)
355         and DECL_COMPILER_GENERATED_P (FNDECL), do the default thing for
356         this constructor (memberwise initialization).  Done by calling
357         `build_default_constructor'.
358         * cplus-decl.c (build_default_constructor): New function.
360         * cplus-lex.c (cons_up_dtor_for_type): Change name to
361         `cons_up_default_function'.  Takes new argument KIND saying what
362         kind of default function to build.  Cons up destructor or X(X&)
363         constructor depending on KIND.
364         * cplus-init.c (expand_aggr_init_1): Test TYPE_HAS_INIT_REF, not
365         TYPE_GETS_INIT_REF.
366         * cplus-typeck.c (convert_for_initialization): Ditto.  If !HAS,
367         but GETS, then abort for now.
369         * cplus-class.c (finish_base_struct): Propagate
370         TYPE_GETS_ASSIGN_REF.
371         * cplus-class.c (finish_struct): If TYPE_GETS_ASSIGN_REF (T)
372         but not TYPE_HAS_ASSIGN_REF (T), then default.
373         * cplus-decl.c (grok_ctor_properties): Set TYPE_HAS_INIT_REF along
374         with TYPE_GETS_INIT_REF.
376         * cplus-init.c (build_delete): Don't check PROTECT when converting
377         the object to be destroyed from derived type to base type.
378         Leave it up to whether the destructor is visible or not
379         to make that decision.
381         * cplus-typeck.c (actualparameterlist): New parameter FLAGS.
382         * cplus-typeck.c (convert_for_initialization): Ditto.
383         * cplus-cvt.c (convert_to_reference): Change PROTECT to FLAGS.
384         * cplus-cvt.c (build_up_reference): Ditto.
385         * All callers changed.
387         * cplus-init.c (build_delete): When deleting members, use PROTECT
388         rather than 1 as value for calling `build_delete' recursively.
390         * cplus-decl2.c (grokfield): If the initializer winds up being
391         `error_mark_node', wrap it in a NOP so `decl_constant_value' will
392         do the right thing.
394         * cplus-decl.c (grokparms): If default parameter needs
395         type instantiation, do it.
397         * cplus-typeck.c (build_modify_expr): Cast first expression in a
398         COMPOUND_EXPR to VOID_TYPE_NODE to suppress warning from
399         warn_if_unused_value.
401 Sat Dec  2 16:57:52 1989  Michael Tiemann  (tiemann at arkesden)
403         * cplus-class.c (build_scoped_method_call): Extra TREE_TYPE around
404         TREE_TYPE (decl) in two places.  Improved comments.  Make DECL be
405         consistently of aggregate type.
407         * cplus-tree.h (lang_type): `type_flags' substructure was not
408         multiple of 4 bytes.
410 Fri Dec  1 05:08:57 1989  Michael Tiemann  (tiemann at arkesden)
412         * integrate.c (try_fold_cc0): Argument to `emit_jump' was wrong:
413         called with LABEL_REF rtx instead of underlying CODE_LABEL.
415         * cplus-class.c (add_virtual_function): Handle case where virtual
416         function is declared twice in the same class.
418         * cplus-decl.c (finish_decl): Length argument to `bcopy' was off
419         by one for anonymous aggregate names was off by one.
421 Thu Nov 30 16:29:42 1989  Michael Tiemann  (tiemann at arkesden)
423         * expr.c (expand_builtin): In BUILTIN_SAVEREGS case, advance
424         SAVING_INSNS after noting stores.
426 Wed Nov 29 05:35:59 1989  Michael Tiemann  (tiemann at arkesden)
428         * cplus-except.c (expand_cplus_reraise): If an exception was not
429         on the legal list of exceptions to reraise, don't bother
430         protecting the raised object by assigning zero to its pointer.
432         * cplus-class.c (build_method_call): When calling a non-const
433         member function from a const member function, tell which non-const
434         member function is being called.  Also, return ERROR_MARK_NODE if
435         we are not looking up to complain.
437         * cplus-type2.c (build_functional_cast): Due to typedefs, we must
438         pull NAME from TYPE.
440         * cplus-typeck.c (build_compound_expr): If TREE_VALUE of list is a
441         VAR_DECL, use result of calling `decl_constant_value'.
443         * stmt.c (expand_end_except): PREV was uninitialized.
445         * stmt.c (expand_exit_except): New function, like
446         `expand_exit_loop'.  Used to explicitly exit an except contour.
447         * cplus-parse.y,cplus-except.c: Replace calls to
448         `expand_exit_something' with calls to `expand_exit_except'.
449         * cplus-decl.c (start_function): If FLAG_HANDLE_EXCEPTIONS, build
450         an exception contour around the outermost binding level.
451         * cplus-decl.c (finish_function): If FLAG_HANDLE_EXCEPTIONS, clean
452         up that countour after the last binding contour goes away.
453         * stmt.c (in_{try,except}_block): Added LEVEL parameter.
454         * stmt.c (in_exception_handler): Added LEVEL parameter.
455         * cplus-except.c: All callers to `in_try_block' as about level 1
456         instead of immediate level, because outermost try block doesn't
457         really count.
459         * cplus-except.c (cplus_expand_end_except): Call abort if catching
460         unhandled exception at outermost level.
462 Tue Nov 28 06:51:48 1989  Michael Tiemann  (tiemann at arkesden)
464         * cplus-except.c (expand_cplus_raise): Interface changed to take
465         third parameter which is the already-constructed object to be
466         raised, allowing `expand_cplus_reraise' to call this function.
468         * cplus-parse.y (try RERAISE raise_identifiers): Actually
469         implement this now.
470         * cplus-except.c (expand_cplus_reraise): Ditto.
472         * cplus-decl.c (init_decl_processing): Initialize LANG_NAME_C and
473         LANG_NAME_CPLUSPLUS.  Initialize CURRENT_LANG_NAME to LANG_NAME_C.
474         * cplus-class.c (init_class_processing): Initialization of
475         LANG_NAME_{C,CPLUSPLUS} was too late here.
477         * cplus-decl.c (duplicate_decls): If NEWDECL is a FUNCTION_DECL,
478         and it was the last object allocated on the permanent_obstack, cut
479         the permanent_obstack back to NEWDECL, since we have OLDDECL.
481         @ The following three changes are conditional on actually defining
482         LANG_DECL_PERMANENT in cplus-tree.h.  It is currently not defined
483         becuase a good solution for saving lang_decls might require more
484         space than the space that could be reclaimed.
486         @ cplus-tree.h (lang_decl): New bit LANG_DECL_PERMANENT says if
487         the lang_decl was allocated on the permanent_obstack.
488         @ cplus-lex.c (build_lang_decl):  Set it if appropriate.  New
489         variable FREE_LANG_DECL_CHAIN holds previously freed LANG_DECLs.
490         @ cplus-decl.c (duplicate_decls):  Add the lang_decl of the old
491         decl to FREE_LANG_DECL_CHAIN if it was allocated on the
492         permanent_obstack.
494         * cplus-decl.c (duplicate_decls): Preserve DECL_LANGUAGE when
495         NEWDECL is a definition.
496         * cplus-decl.c (start_function): Don't set DECL_LANGUAGE here, now
497         that it is properly handled in `duplicate_decls'.  Also, set
498         DECL_OVERLOADED (DECL1) from DECL_OVERLOADED (OLDDECL).
500 Mon Nov 27 06:30:53 1989  Michael Tiemann  (tiemann at arkesden)
502         * cplus-method.c (dump_init): Argument to `dump_type' was missing
503         in SAVE_EXPR case.
505         * cplus-class.c (compute_conversion_costs): While it is probably
506         an error to permit a call from a const member function to a
507         non-const member function, cfront seems to do it, grudginly.
508         Change this function to make this conversion cost the heaviest of
509         built-in conversion costs, to give behavior that matches cfront.
510         This can easily be changed back to error-giving behavior.
511         * cplus-class (build_method_call): Give warning if calling to
512         non-const member function from const member function.
514         * cplus-method.c,cplus-class.c: Change name of
515         `do_actual_overload' to `build_overload_call', and move the
516         function from cplus-method.c to cplus-class.c.  Also, rewrite
517         slightly to call `build_decl_overload', removing duplicated code.
518         * cplus-typeck.c (build_x_function_call): Change the name of
519         called function.
521         * cplus-tree.c (hash_tree_cons): Typo--set TREE_VIA_PUBLIC twice,
522         instead of TREE_VIA_PUBLIC and TREE_VIA_VIRTUAL.
524         * cplus-decl.c (finish_decl): It is INIT, and not
525         DECL_INITIAL (DECL) which holds the real value of DECL's
526         initializer.  We need INIT's value for `complete_array_type' to do
527         its job.
529         * expr.c (save_noncopied_parts): Deal with case of having
530         `assign_stack_local' return an invalid memory reference.
532         * cplus-typeck.c (build_component_ref): 11/26 fix was almost
533         right, but called `value_member' in first case where should have
534         called `assoc_value'.
536         * cplus-init.c (expand_vec_delete): Lines were reversed in
537         multi-dimensional array code.
539         * version.c: Test release version 1.36.2-
541         * integrate.c (expand_inline_function): Bug in use of
542         CONST_EQUIV_MAP did not work correctly in the presence of loops
543         for variables initialized in first basic block but modified within
544         a loop body.
546 Sun Nov 26 17:11:08 1989  Michael Tiemann  (tiemann at arkesden)
548         * cplus-init.c (build_new): Handle case when TRUE_TYPE gets
549         ERROR_MARK_NODE, such as when the size expression for an ARRAY_REF
550         is ERROR_MARK_NODE.
552         * cplus-type2.c (digest_init): Catch case where ELEMENT is
553         ERROR_MARK_NODE, which avoids calling `comptypes' with
554         ERROR_MARK_NODE as our type (recall that TREE_TYPE (ERROR_MARK_NODE)
555         is ERROR_MARK_NODE, not NULL_TREE).
557         * cplus-typeck.c (build_component_ref): Forgot to pull offset from
558         association of type once we found the field!  This causes fields
559         in two separate baseclasses to overlap when referenced from a
560         class deriving from the baseclasses.
562         * cplus-parse.y (primary, primary_no_id): Recognize
563         `SCOPE operator_name'.
565         * cplus-decl.c (grok_reference_init): Code to permit references to
566         arrays was somehow missing.  Also, in the case where DECL is
567         TREE_STATIC and the initializer is TREE_LITERAL, no need to call
568         `expand_static_init'.
570         * cplus-tree.h [DECL_OVERLOADED]: User `overloaded_attr' in
571         lang_decl to distinguish overloaded functions from nonoverloaded
572         ones.
573         * cplus-tree.h [DECL_EXTERNAL]: Use TREE_LANG_FLAG_1 instead of
574         TREE_LANG_FLAG_3.  The latter was used for TREE_PRIVATE.
576         * cplus-init.c (expand_vec_delete): Handle multi-dimensional
577         arrays.
579         * cplus-decl.c (duplicate_decls): Copying of DECL_IN_AGGR_P bit
580         was backwards.
581         * cplus-decl.c (start_decl): And need to turn off DECL_IN_AGGR_P
582         when seeing this decl in non-aggr context.  Also, clear
583         TREE_EXTERNAL if DECL_EXTERNAL is not set.
585         * cplus-decl.c (grok_reference_init): Code split from
586         `finish_decl' for modularity.
588 Sat Nov 25 06:29:08 1989  Michael Tiemann  (tiemann at teacake)
590         * cplus-decl.c (grokdeclarator): Was incorrectly rejecting
591         class-local typedefs which had things like RID_LONG (thought they
592         were storage class specifiers).
594         * cplus-method.c (report_type_mismatch): Corrected error
595         introduced by making INLINE_BUFFER non-static.
597         * cplus-tree.c (build_exception_variant): Correctly handle case
598         when RAISES is NULL_TREE.
600         * cplus-except.c (lookup_exception_object): Switch to
601         permanent_obstack when implicitly declaring an exception object.
603         * cplus-class.c (instantiate_type): Handle TREE_LIST of
604         FUNCTION_DECL in addition to TREE_LIST of TREE_LIST of
605         FUNCTION_DECL.  The former is what a BASELINK in disguise.
607         * cplus-decl.c (grokdeclarator): Don't crash if TYPE ==
608         ERROR_MARK_NODE when DECL_CONTEXT == FIELD.  Happens when array
609         size is undefined, for example.
611 Fri Nov 24 16:04:44 1989  Michael Tiemann  (tiemann at teacake)
613         * cplus-search.c (get_baselinks): When we get to end of search
614         (i.e., TYPE has only one basetype), propagate BASELINKs.
616         * cplus-decl.c (shadow_tag): Missing call to
617         `end_exception_decls'.
619 Tue Nov 21 23:40:57 1989  Michael Tiemann  (tiemann at teacake)
621         * cplus-method.c: Change from static allocation of INLINE_BUFFER
622         to dynamic, saving 8k static data size.
623         * cplus-method.c (fndecl_as_string): Initialize INLINE_BUFFER
624         always from BUF.
625         * cplus-class.c, cplus-tree.c: Callers of `fndecl_as_string'
626         changed.
628 Mon Nov 20 20:56:49 1989  Michael Tiemann  (tiemann at arkesden)
630         * cplus-class.c (build_method_call): Don't check visibility on
631         calls to wrappers.
633         * cplus-tree.h: Delete bitfields HAS_WRAPPER and NEEDS_WRAPPER.
634         Add field for TYPE_WRAP_TYPE.
635         * cplus-decl.c, cplus-class.c: Set fields accordingly
636         * cplus-class.c (build_method_call): Call `get_wrapper' if we need
637         to be wrapping a function call.
638         * cplus-search.c (get_wrapper): Implement this function.
640 Sat Nov 18 05:16:22 1989  Michael Tiemann  (tiemann at teacake)
642         * cplus-lex.c (check_newline): Recognize (but apologize about)
643         #pragma newworld.
645         * cplus-method.c (build_decl_overload): Compact encoding for
646         member functions ifndef LONGERNAMES.
647         * cplus-dem.c (cplus_demangle,do_args): Deal with different
648         encoding ifndef LONGERNAMES.
650         * cplus-tree.c (list_has_lookup_or_cons): New function optimizes
651         most common case in parsing.
652         * cplus-parse.y: Call in in place of `hash_tree_chain (_, NULL_TREE)'.
654         * cplus-parse.y, cplus-lex.c: Gather statistics on tokens and
655         reductions.
657         * cplus-class.c (instantiate_type): Forgot to check COMPLAIN
658         before complaining.
660         * cplus-init.c (build_new,build_vec_delete): Call
661         do_pending_stack_adjust before building and after finalizing
662         RTL_EXPR.  Also removed bogus construct
664                    emit_insn (gen_sequence ());
666         which was causing circular rtl to be output.  (Thanks to rms for
667         identifying the problem!).
668         * cplus-type2.c (make_merged_ref): Same change.
669         * cplus-parse.y (except_stmts): Same change.
671         * cplus-init.c (get_member_function): Wrap a SAVE_EXPR around the
672         address of MEMBER.
674 Fri Nov 17 20:11:19 1989  Michael Tiemann  (tiemann at teacake)
676         * cplus-type2.c (store_init_value)
678         * cplus-dem.c (do_type): Initialize NON_EMPTY.
680 Tue Nov 14 00:19:31 1989  Michael Tiemann  (tiemann at arkesden)
682         * cplus-init.c (build_vec_delete): Call `emit_note' in case no
683         code is emitted by `expand_vec_delete'.
685         * cplus-parse.y (operator_name): If the operator name is
686         erroneous, build something signifying that fact, rather than just
687         returning NULL_TREE.
689         * cplus-typeck.c (target_type): New function.  Returns the target
690         type of TYPE.
691         * cplus-decl.c (finish_decl): Call `target_type' to figure out the
692         built-in type that DECL is based on.  If we find it to be
693         ANON_AGGRNAME_P, then we must change it, since nothing else will,
694         and the compiler will go into loops if expand_inline_function trys
695         to push it back into the environment.
697         * cplus-parse.y (primary): Need to do `lookup_name' on operator
698         names that come through here.
700         * stmt.c (expand_end_try): Jump to after label to avoid falling
701         through into default handler.
703         * cplus-decl.c (define_label): Don't complain about jumps past
704         initialziation of compiler-generated temporaries.  They can't be
705         accessed, and by the time we get to the label, they should be
706         cleaned up.
708 Mon Nov 13 02:34:58 1989  Michael Tiemann  (tiemann at arkesden)
710         * cplus-init.c (get_member_function): If EXP_ADDR was something
711         hairy (like a CALL_EXPR), make EXP indirect from it.  This saves
712         writing out twice the code (once for each branch of the
713         conditional).
715         * cplus-dem.c (cplus_demangle): Recognize virtual function tables.
716         * Also, handle operator* and operator->().
718         * cplus-class.c (finish_struct): Don't warn about all class
719         members being private if there are public baseclasses.
721         * cplus-decl.c (grokdeclarator): Catch case where friend function
722         is declared with method qualifiers.
724         * cplus-typeck.c (commontype): Get the right value for BASETYPE in
725         METHOD_TYPE case.
727         * cplus-method.c (build_opfncall): TYPE1 was being initialized too
728         late.
730         * cplus-dem.c[USG]: Use this instead of #ifndef sequent.
732 Sun Nov 12 01:35:08 1989  Michael Tiemann  (tiemann at arkesden)
734         * integrate.c (note_integrated): New function.  If insn generated
735         used constants, check that it is legit.  If not, delete it and
736         return zero to caller, indicating that the caller should try
737         again.  If successful, set RTX_INTEGRATED_P.
739         * cplus-tree.c (layout_vbasetypes): Use `int' return type to
740         advantage.
742         * cplus-init.c (build_delete): Don't abort if TYPE ==
743         ERROR_MARK_NODE.  It can happen.
745         * integrate.c: Use "iteration numbering" to propagate constants
746         through inline function expansion.
748         * stmt.c: Added exception stmts to nesting stack.
749         * cplus-except.c: Move appropriate stuff out of here.
751 Sat Nov 11 10:10:59 1989  Michael Tiemann  (tiemann at arkesden)
753         * integrate.c: Make `expand_inline_function' smart enough to use
754         constant when safe, and not when not.
756         * integrate.c: Merged changes from rms as of today.
757         * varasm.c: Merged changes from rms as of today.
759         * cplus-except.c: Use variable TRY_DEPTH to determine whether we
760         are inside a TRY block or not.
761         * cplus-except.c (cplus_expand_{start,end}_try):
762         Increment/decrement that variable.
763         * cplus-except.c (expand_cplus_raise_stmt): If TRY_DEPTH is
764         nonzero, then simply exiting the try block does all the right
765         things.  Otherwise, we must use `longjmp'.
767         * cplus-init.c (build_new): Don't use the RTL_EXPR hack for static
768         initializations.
770         * ld.c (write_output): Unconditionally remove the old file in case
771         another owns it but user has write permission.
773         * cplus-decl2.c (finish_file): Set DECL_PRINT_NAME of file
774         clean/initialization functions to things we might want to print.
776 Fri Nov 10 19:08:51 1989  Michael Tiemann  (tiemann at arkesden)
778         * cplus-tree.h: Get rid of EXCEPTION_LABEL_DECL, no longer needed.
779         Add EXCEPTION_THROW_DECL.  This VAR_DECL is used to determine
780         whether to throw from a binding contour using the exception
781         handling machinery.
782         * cplus-decl.c, cplus-except.c: Changes to adapt to new model.
784         * tree.c (build_op_identifier): #if 0 in this file.
785         * cplus-lex.c (build_op_identifier): define this function here.
786         Change interface to take `tree_code' arguments instead of `tree'
787         arguments.  Use memoizing table to preserve previously allocated
788         nodes.
789         * cplus-parse.y, cplus-method.c: Callers changed.
790         * cplus-lex.c (build_operator_fnname): Can't get by on
791         side-effecting an OP_IDENTIFIER's TREE_CODE anymore.  Change
792         interface to pass OP_IDENTIFIER node in as a tree*, and set that.
793         * cplus-decl2.c (grokopexpr): Must also take DECLARATOR in as
794         pointer.
796         * cplus-init.c (build_new): After calling `start_sequence', prime
797         the insn pump by calling `emit_note' to emit a NOTE_INSN_DELETED.
799 Wed Nov  8 15:54:32 1989  Michael Tiemann  (tiemann at teacake)
801         * cplus-type2.c (build_functional_cast): Move from cplus-class.c
802         to this file.
804         * cplus-class.c (build_functional_cast): Don't assume that
805         TYPE_NAME (TYPE) is a TYPE_DECL; it might be an IDENTIFIER_NODE.
807         * gcc.c (main): Print out the name `g++' instead of `gcc' until
808         the merge is complete.
810 Tue Nov  7 14:56:50 1989  Michael Tiemann  (tiemann at teacake)
812         * cplus-init.c (build_new): Initialize RVAL if SOS.
814 Mon Nov  6 00:51:43 1989  Michael Tiemann  (tiemann at arkesden)
816         * crt1.c: Changes from Eirik Fuller (Cornell Theory Center) to fix
817         incremental linking.
818         * gnulib3.c (__do_global_cleanup): Also from Eirik: fixed braino
819         that was not reinitializing __DLI.
821         * cplus-method.c (build_overload_name): Mangle member functions
822         with qualifiers differently than member functions without
823         qualifiers.  Also, add 'F' before argument list for METHOD_TYPE,
824         since cfront 2.0 seems to do so.
825         * cplus-method.c (dump_type_suffix): Make formatting of these
826         kinds of METHOD_TYPEs right.
827         * cplus-dem.c (do_type): Grok these changes.
829         * cplus-except.c (exception_object_name): Don't crash in case
830         of ``raise all'', which comes encoded as VOID_TYPE_NODE.
831         @@ Handle it correctly in next release.
833         * cplus-decl2.c (grok_method_quals): New function.  Incorporate
834         `const' and `volatile' qualifiers into FUNCTION_DECLs and
835         TYPE_DECLs.  Uses code broken out of `grokclassfn'.
836         * cplus-decl2.c (grokclassfn): Caller changed.
837         * cplus-decl.c (grokdeclarator): Call `grok_method_quals' when
838         QUALS is non-zero in declarator grokking loop.
840 Sat Nov  4 20:21:54 1989  Michael Tiemann  (tiemann at arkesden)
842         * cplus-init.c (build_new): If TYPE_NEEDS_CONSTRUCTING (TYPE),
843         then always wrap RVAL in an RTL_EXPR, since we don't know that we
844         aren't one of the arms of a ?: operation.  RVAL can now be a
845         SAVE_EXPR (normally) or a VAR_DECL (in the case of array
846         initialization).
848         * cplus-init.c (build_new): Fix braino that was causing array
849         types to be collapsed into their element types, causing
850         `build_new' to return a point to the element type, rather then a
851         pointer to the array type.
853         * cplus-decl2.c (grokfield): Check DECL_NAME (VALUE) before
854         dereferencing it.
856         * cplus-init.c (expand_vec_init): Do not fail to initialize
857         element of an array which receive default initialization.
859         * cplus-type2.c (digest_init): If TYPE needs constructing,
860         don't convert INIT to TYPE.  The only time when this happens
861         is when called upon to initialize an ARRAY_TYPE, and
862         `expand_vec_init' will handle that case.
864         * cplus-class.c (build_method_call): Error reporting for bad
865         argument list was screwed for static member functions in static
866         call context.
868         * config.g++: Add MIPS-based configurations.
870         * toplev.c: Make up for systems which do not have unistd.h (like
871         many BSD systems).
872         * Makefile: Add HAVE_UNISTD_H flag.
874         * cplus-dem.c: Sequentize the code.
876         * cplus-init.c (expand_cplus_expr_stmt): Warn if statement is just
877         a reference to, and not a call of, some function.
879 Thu Nov  2 10:03:50 1989  Michael Tiemann  (tiemann at arkesden)
881         * cplus-method.c (build_overload_name): Don't crash if we built a
882         TREE_LIST which contains VOID_TYPE_NODE and which is not
883         VOID_LIST_NODE.  This happens if one of the parameters is of type
884         VOID_TYPE.
886         * stmt.c (expand_return): Even when RETVAL has type VOID_TYPE, we
887         must expand it (it may be a call to another void function).
889         * integrate.c (copy_rtx_and_substitute): Moved one to many insns
890         to BEFORE_INLINE_FP_RTX.
892         * cplus-typeck.c (convert_for_initialization,actualparameterlist):
893         Don't defaultly convert ARRAY_TYPE when converting to
894         REFERENCE_TYPE.
896 Wed Nov  1 04:43:46 1989  Michael Tiemann  (tiemann at teacake)
898         * stmt.c (init_function_start): Initialize MAX_PARM_REG to
899         FIRST_PSEUDO_REGISTER.
901         * cplus-init.c (expand_vec_init): This function can be called to
902         initialize a non-aggregate vector.
904 Tue Oct 31 13:38:42 1989  Michael Tiemann  (tiemann at arkesden)
906         * cplus-type2.c (process_init_constructor): Don't even try
907         initializing a structure from EMPTY_INIT_NODE.
909         * cplus-init.c (build_new): Handle case where SAVE_EXPR_RTL of
910         new'd value is 0 by putting it CONST0_RTX.
912         * cplus-typeck.c (build_component_ref): If the COMPONENT_REF is
913         really a reference to a member function, do the right thing if the
914         member function is virtual.
916 Mon Oct 30 00:39:18 1989  Michael Tiemann  (tiemann at arkesden)
918         * cplus-class.c (build_method_call): Removed code that seemed to
919         build (superflouously) an INDIRECT_REF for INSTANCE just before
920         heading to found/found_and_ok (where INSTANCE was just
921         reinitialized).  Also, fixed bug so that if INSTANCE was of fixed
922         type, that fact remained known even if INSTANCE_PTR became more
923         distanct due to going through a NOP_EXPR.
925         * cplus-init.c (get_member_function): Add parameter EXP_ADDR_PTR
926         which is a pointer to the tree representing the address of EXP.
927         Also, add hairy code which does the right thing wrt. modifying
928         `this' pointer when it is argument to call.
929         @@ This modification causes GNU C++ to generate stupid
930         conditional-branch code when optimizing.  Hopefully future
931         versions of the optimizer will understand and optimize it.
932         * cplus-typeck.c (build_x_function_call): Caller changed.
934         * cplus-tree.h (lang_type): Added new field GOT_SEMICOLON to
935         TYPE_FLAGS field, to record whether a type has been `finished' or
936         not.  Attempt to catch bugs like `struct s { .. } main () { .. }'.
937         * cplus-parse.y (various rules): Add call to `note_got_semicolon'.
938         * cplus-decl.c (start_function): Check that we have a `finished'
939         type.
940         * cplus-lex.c (note_got_semicolon): Set the bit here.
941         * cplus-class.c (finish_struct): Whenever we start afresh with a
942         class type, zero the bit here.
944         * cplus-type2.c: Rename file cplus-typeck2.c to fit brain-damaging
945         SVID 14 char name limit.
947         * cplus-typeck.c (build_modify_expr): Handle case where assignment
948         comes from friend, rather than member function.
950         * cplus-tree.c (lang_printable_name): Handle case where DECL's
951         language specific field is nonexistent.
952         * cplus-method.c (fndecl_as_string): Here too.
954         * cplus-decl.c (finish_decl): Initialization of a reference from
955         `*this' was falling down because nodes for `$this' were getting
956         shared too much.
958         * cplus-tree.h (TREE_HAS_CONSTRUCTOR): Reincarnate use of this
959         flag--for SAVE_EXPR it means that underneath lies a call to
960         `new' for a given type.
961         * cplus-init.c (build_new): Set the flag.
962         * cplus-method.c (dump_init): Test it.
964         * cplus-tree.h (PARM_DECL_EXPR): Use this flag to distinguish
965         parsing initializers for PARM_DECLs from initializers for global
966         variables.
967         * cplus-decl2.c (finish_file): Don't emit anything from
968         STATIC_AGGREGATES that was really just for default parameters.
969         * cplus-decl.c (grokparms): Set PARM_DECL_EXPR on SAVE_EXPRs.
970         * cplus-method.c (dump_init): Same.
972 Sun Oct 29 23:23:48 1989  Michael Tiemann  (tiemann at arkesden)
974         * cplus-method.c (build_opfncall): Don't check visibility here for
975         operators `new' and `delete' unless within a constructor or
976         destructor.
977         * cplus-decl.c (finish_function): Add checks for visibility of
978         those operators here instead.
980         * cplus-decl2.c (groktypefield): Handle case where field name
981         conflicts with a typedef.
983 Fri Oct 27 01:02:20 1989  Michael Tiemann  (tiemann at arkesden)
985         * cplus-search.c (get_virtuals_named_this): Return a baselink
986         instead of a FUNCTION_DECL.  Also, walk through FIELDS as
987         baselinks.  I.e., use `next_baselink' instead of TREE_CHAIN.
989         * cplus-search.c (get_first_matching_virtual): Caller changed.
991 Thu Oct 26 16:09:07 1989  Michael Tiemann  (tiemann at arkesden)
993         * cplus-search.c (get_first_matching_virtual): Only complain about
994         a particular property of a virtual function once.
996         * cplus-class.c (finish_struct): If ASSOC winds up being zero,
997         don't frob the vtable.
999         * cplus-decl.c (shadow_tag): Handle case where exception does not
1000         have any fields.
1001         * cplus-parse.y (component_decl): Handle case where exception does
1002         not have any fields.
1004         * cplus-parse.y (structsp): Call `finish_exception' with only two
1005         parameters.
1007         * cplus-parse.y (stmt): Forgot ';' after `RAISE' stmt.
1009         * cplus-class.c: Gather statistics on number of elments in virtual
1010         function tables, number of entries we build for them, and number
1011         of virtual function table entries we search using linear lookup.
1013         * cplus-parse.y (aggr,opt.component_decl_list): Call
1014         `build_tree_list' instead of `decl_tree_list', because of nested
1015         structures.  Would be better to make TEMP_DECL_OBSTACK pushable
1016         like the momentary obstack, but we don't for now.
1018 Tue Oct 24 06:26:13 1989  Michael Tiemann  (tiemann at arkesden)
1020         * integrate.c (copy_rtx_and_substitute): Don't change something to
1021         a memory address unless it really is `memory_address_p'.
1023         * cplus-decl.c (finish_decl): Handle array initialization if type
1024         of array needs constructor.  Also, implement initialization
1025         without INIT0 crutch.
1026         * cplus-init.c (expand_vec_init): Handle array initialization from
1027         {...} where type of array needs constructor.
1029         * cplus-typeck.c (build_binary_op_nodefault): Make compiler give
1030         error, not warning, if comparing pointers with integers.
1032         * cplus-typeck.c (build_component_ref): Call `lookup_fnfields' to
1033         get a list of methods.
1035 Mon Oct 23 17:29:03 1989  Michael Tiemann  (tiemann at arkesden)
1037         * cplus-tree.h (lang_decl): Add bit `COMPILER_GENERATED' to
1038         indicate whether this FUNCTION_DECL was generated automatically by
1039         the compiler.
1040         * cplus-lex.c (cons_up_dtor_for_type): Set this bit.
1041         * cplus-decl.c (redeclaration_error_message): Give better error
1042         message if user redeclares something that was implicitly created
1043         by the compiler.
1045         * cplus-decl.c (finish_decl): Test DECL_LANG_SPECIFIC before
1046         testing DECL_IN_AGGR_P in case of init-free reference decl.
1048 Sat Oct 21 10:29:09 1989  Michael Tiemann  (tiemann at arkesden)
1050         * cplus-class.c (build_method_call): Forgot to increment b_or_d as
1051         we go through class hierarchy.  Probably fell out as a result of
1052         `next_baselink' change on Friday, Oct 13.
1054         * cplus-cvt.c (build_up_reference): When calling
1055         `convert_to_nonzero_pointer', use TYPE_MAIN_VARIANT so that
1056         TYPE_POINTER_TO is defined.
1058         * cplus-search.c ({push,pop}_memoized_context): Plug memory leak
1059         by freeing pushing and popping the TYPE_OBSTACK irrespective of
1060         whether we are memoizing lookups or not.
1062         * cplus-decl2.c (grokclassfn): Don't make `this' TREE_READONLY
1063         inside of destructors.
1065         * cplus-search.c (get_abstract_virtuals): New function.  Returns
1066         the list of virtual functions that are considered abstract for a
1067         given type (i.e., those which are ` = 0' in declaration).
1068         * cplus-class.c (finish_base_struct): Call it.
1070         * All GNU C++ files: change names containing `UNINHERIT*' to names
1071         containing `ABSTRACT'.  Eliminate use of
1072         CLASSTYPE_HAS_ABSTRACT_VIRTUALS in favor of testing
1073         CLASSTYPE_ABSTRACT_VIRTUALS directly.
1075         * cplus-decl.c (start_function): Handle case where user names and
1076         internal names conflict.
1078         * cplus-typeck.c (build_conditional_expr): Put type instantiation
1079         back in.
1081         * cplus-decl.c (start_function): Use DECL_STATIC_CONTEXT instead
1082         of DECL_CONTEXT for pushing into context of static function.
1084         * cplus-decl.c (auto_function): Like `builtin_function', but
1085         builds an overloadable function.
1086         * cplus-decl.c (init_decl_processing): Call it for __builtin_new,
1087         __builtin_delete and similar functions.
1089 Fri Oct 20 02:22:06 1989  Michael Tiemann  (tiemann at arkesden)
1091         * cplus-decl.c (finish_decl): Set TREE_USED bit of DECL if DECL is
1092         a const VAR_DECL at TOPLEVEL.
1094         * cplus-class.c (modify_vtable_entry): Still more fixes to code
1095         which computes derived vtable.
1097 Thu Oct 19 11:14:55 1989  Michael Tiemann  (tiemann at arkesden)
1099         * cplus-class.c (finish_struct): Move code that sets
1100         TYPE_USES_MULTIPLE_INHERITANCE from here...
1101         * cplus-decl.c (xref_tag): ...to here.
1103         * cplus-decl.c (finish_decl): Oct 12 change to implement
1104         initialization of class members so that their initializers could
1105         use private members did not test DECL sufficiently.  In addition
1106         to checking DECL_CONTEXT, must also check that TREE_CODE (DECL) ==
1107         VAR_DECL.  Otherwise redeclaration of member functions cause
1108         crashes.
1110 Tue Oct 17 03:34:05 1989  Michael Tiemann  (tiemann at arkesden)
1112         * cplus-method.c (hack_identifier): Use `error', not
1113         `error_with_decl' to report that a non-static member is being
1114         referenced in a static member function.
1116         * cplus-decl.c (duplicate_decls): TREE_INLINE was not being set
1117         for OLDDECL, which is really where it matters.
1119         * cplus-typeck2.c (merge_component_comparisons): Track TEM1 in
1120         addition to TEM0 in loop which computes BITPOS0.
1122         * cplus-decl2.c (grokfield): Set CLASSTYPE_LOCAL_TYPEDECLs from
1123         CURRENT_CLASS_TYPE rather than DECL_CONTEXT (VALUE), since the
1124         latter is not set up for TYPE_DECLs.
1126         * cplus-decl.c (xref_tag): Set CLASSTYPE_DECLARED_CLASS each time
1127         we see an xref to this tag until we see the actual type defined
1128         for this tag.
1130 Mon Oct 16 01:48:27 1989  Michael Tiemann  (tiemann at arkesden)
1132         * cplus-tree.h (DECL_VIRTUAL_P): If set in an IDENTIFIER_NODE, it
1133         means that somebody has defined a virtual function with this name.
1134         * cplus-decl.c (grokfndecl): Set it.
1135         * cplus-search.c (get_first_matching_virtual): Use it.
1137         * cplus-decl.c (cplus-tree.h): Define DECL_EXTERNAL as synonym for
1138         TREE_LANG_FLAG_3, which means for a VAR_DECL to mean that `extern'
1139         was specified in for that VAR_DECL.
1140         * cplus-decl.c (grokvardecl): Set DECL_EXTERNAL.
1141         * cplus-decl.c (duplicate_decls): Set TREE_PUBLIC of `const'
1142         variables based on TREE_STATIC and DECL_EXTERNAL.
1144 Sun Oct 15 00:44:01 1989  Michael Tiemann  (tiemann at arkesden)
1146         * cplus-decl.c (start_function): Set CURRENT_EXTERN_INLINE from
1147         TREE_PUBLIC of DECL1 if DECL1 came pre-parsed.
1149         * cplus-decl2.c (finish_file): Don't write out inline functions
1150         which had their address taken if they were declared
1151         `extern inline'.
1153         * cplus-decl.c (grokdeclarator): Don't set TREE_PUBLIC based on
1154         INLINEP here.  Also, don't treat RID_INLINE as being a storage
1155         class for `multiple storage classes' error message.
1156         * cplus-decl2.c (grokfield): Do it instead here.
1157         * cplus-init.c (do_friend): And here.
1158         * cplus-decl.c (duplicate_decls): And change this to more match
1159         how GCC does things.
1161         * cplus-lex.c [USG_STDIO]: Use this instead of USG, for turncoats
1162         who have enough of System V that their stdio is broken, and too
1163         much Berkeley for USG to be the right thing.
1165         * cplus-decl.c (grokdeclarator): Grok declarations of the form
1166         `X x(args)[size]' to mean ARGS is an initializer to the array
1167         constructor for X[SIZE].
1168         * cplus-decl2.c (finish_file): Handle new case.
1170         * cplus-method.c (build_opfncall): Don't abort if user makes a bad
1171         call to operator new.  It's not the compiler's fault.
1173         * cplus-init.c (finish_base_init): Unmark virtual baseclasses
1174         which have explicit initializers.
1176         * cplus-init.c (expand_aggr_init_1): Change PROTECT parameter to
1177         FLAGS parameter.  All callers changed.
1179         * cplus-decl.c (finish_function): In destructor code, it is
1180         CLASSTYPE_VSIZE, not TYPE_VIRTUAL_P, which is the operative
1181         value to test when building base destructor code.  See Sept 1
1182         change for more info.
1184         * cplus-parse.y (unary_expr): Arguments to build_vbase_delete were
1185         wrong: was passing POINTER_TYPE and address when should have been
1186         passing object type and object.
1188 Sat Oct 14 06:45:34 1989  Michael Tiemann  (tiemann at arkesden)
1190         * stmt.c (expand_anon_union_decl): For anonymous unions in memory,
1191         don't call `change_address'.  Just cast the memory reference
1192         ourselves.
1194         * cplus-typeck2.c (store_init_value): Don't test PEDNATIC to see
1195         whether to permit initialization of static variable from
1196         non-constant, since C++ 2.0 defines it to work.
1198         * cplus-init.c (expand_aggr_init_1): PARM_SLOTS was allocating
1199         sizeof (char) instead of sizeof (struct rtx_def*).
1201         * cplus-decl.c (grokfndecl): Call to `get_first_matching_virtual'
1202         must be followed by code which, under certain cases, goes all the
1203         way down the inheritance hierarchy to match the virtual function.
1204         Otherwise, the wrong virtual function tables come in to play when
1205         the time comes to reconcile them (in modify_vtable_entry).  Note
1206         that the call to `get_first_matching_virtual' does the right thing
1207         within `finish_struct'.  In that case, since we pull BASE_FNDECL
1208         from a virtual base class's virtual function table, there is no
1209         issue where it should be thought of as coming from.
1211         * cplus-search.c (rank_mi_virtuals): Spurious TREE_TYPE made it
1212         look like we were trying to compare PARM_DECLs instead of _TYPE
1213         nodes in our list at some time.
1215         * cplus-search.c (get_first_matching_virtual): Friday the 13th
1216         change was wrong.  Instead, make `get_first_matching_virtual'
1217         handle the instance variable itself, and call `compparms' as
1218         before.
1220         * cplus-lex.c (reinit_parse_for_method): Null character was being
1221         inserted if USG hack to round up buffer length was being used.
1223         * cplus-class.c (compute_conversion_costs): When trying a type
1224         conversion, use the actual type that the function wants.  No
1225         reference-bashing here!
1227         * cplus-search.c: Add a new obstack BRIDGE_OBSTACK which contains
1228         the class declarations across scopes.  This is an alternative to
1229         building their lists on the permanant_obstack.
1230         * cplus-search.c (push_search_level): Record the obstack for which
1231         this level was pushed.
1232         * cplus-search.c (pop_search_level): Remove OBSTACK parameter.
1233         Get that value from the search level that is being popped.
1235         * cplus-tree.h (lang_type): Add a slot for the instance variable.
1236         * cplus-decl.c (start_function): Use it.
1238         * tree.c (build_nt0): New function.  Use this to build declarators
1239         instead of `build_nt'.  Uses new obstack `temp_decl_obstack'.
1241         * cplus-cvt.c (build_type_conversion): Distinguish void* from
1242         const void* if we are trying to convert from some arbitrary
1243         pointer to a void* variant.
1245         * cplus-class.c (finish_struct_bits): New function.  Code broken
1246         out of `finish_struct'.  Extend to handle both conversions to
1247         const pointers and conversions to non-const pointers.
1249         * cplus-tree.h (lang_type):  Extend to handle both conversions to
1250         const pointers and conversions to non-const pointers.
1252         * cplus-decl.c (start_function): FNTYPE was not re-set after
1253         calling `pushdecl'.  Consequently, static member functions with
1254         default arguments were breaking.
1256         * cplus-class.c (pushclass): When pushing tags into the class
1257         binding level, push the TYPE_DECL, not the _TYPE into the
1258         IDENTIFIER_CLASS_VALUE slot.
1260         * cplus-method.c (fndecl_as_string): Don't skip first parameter if
1261         FNDECL is a static member function.
1263         * gplus.gperf [CATCH]: Add it.
1265         * cplus-init.c (build_member_ref): Nodes returned from
1266         lookup_fnfields are not saved on the permanent obstack, regardless
1267         of CURRENT_OBSTACK.  This is usually ok, since they are usually
1268         only used as a structure through which search machinery will
1269         traverse looking for values that do live on the permanent obstack.
1270         One exception is when `build_member_ref' builds an expression
1271         which requires type instantiation at top-level.
1273         * cplus-decl.c (finish_decl): Give better error messages for
1274         initialization of references, and remove invalid messages as well.
1275         Initialization of type-qualified references is different than
1276         initialization of type-qualified pointers in the following way:
1277         you can initialization a `X&' from a `const X&', but you cannot
1278         initialize a `X*' from a `const X*'.  This is because the compiler
1279         can convert the `const X&' to a `const X', create a new temporary,
1280         and take a reference from that.
1282         * cplus-init.c (is_friend): In testing for friendly classes, allow
1283         for static member functions to be considered friends.
1285 Fri Oct 13 00:03:18 1989  Michael Tiemann  (tiemann at arkesden)
1287         * cplus-decl.c (grokdeclarator): If DECL_CONTEXT is FIELD for
1288         building a TYPE_DECL, allocate using `build_lang_field_decl'
1289         instead of `build_decl'.
1291         * cplus-decl.c (xref_tag): Undo Sept 10 change.  It causes
1292         problems for InterViews.  Better to work around in ET++.
1294         * cplus-decl.c (lookup_name): When looking up NAME, if
1295         CURRENT_CLASS_TYPE is being defined, check its baseclasses for a
1296         definition of a TYPE_DECL.
1298         * cplus-decl.c (grok_enum_decls): Return DECL, not NULL_TREE if
1299         TYPE has already been recorded.
1301         * cplus-search.c (dfs_pushdecls): Push class-local TYPE_DECLs into
1302         IDENTIFIER_CLASS_VALUEs.
1304         * cplus-typeck.c (c_expand_return): Call `expand_cleanups_to' with
1305         NULL argument in case the return value generated cleanups for its
1306         call.
1308         * stmt.c (expand_anon_union_decl): Fixed so that MEM anon unions
1309         are correctly handled.
1311         * cplus-decl2.c (finish_anon_union): Handle non-global static
1312         anonymous unions.
1314         * cplus-decl.c (shadow_tag): Change int variable OK to enum
1315         tree_code OK_CODE, remembering the value of the code we though was
1316         ok.  This avoids being confused when other legitimate DECLSPECS
1317         (such as `static') appear after one like `union ...'.
1319         * cplus-class.c (popclass): When popping from a class's scope,
1320         back to another class's scope, restore CURRENT_VTABLE_DECL only if
1321         we had one before.
1323         * cplus-decl2.c (grokfield): Push TYPE_DECL into class level as
1324         soon as we see it.
1326         * cplus-class.c (instantiate_type): In ADDR_EXPR case, complain if
1327         type we are instantiating to is not POINTER_TYPE.
1329         * cplus-decl.c (start_method): Call `preserve_data' to save the
1330         parameters (which were read into the maybepermanent obstack).
1332         * cplus-typeck2.c (digest_init): Handle case of union with
1333         constructor.
1335         * cplus-init.c (build_member_ref): Vestigial bug from change in
1336         representation of method lists (from list of lists to list of
1337         chains).
1339         * cplus-class.c (instantiate_type): Rewrite TREE_LIST case to use
1340         `next_baselink' when appropriate, and to try overloading based on
1341         non-member functions if that looks appropriate.
1343         * cplus-search.c (next_baselink): New function.  Contains code
1344         broken out of `build_method_call' to advance to next chain of
1345         FUNCTION_DECLs.
1347         * cplus-init.c (build_member_ref): If member ref is a reference to
1348         non-unique member function, return a BASELINK (which is a list of
1349         lists) rather than a list containing just that type's methods with
1350         that name.
1352         * cplus-init.c (resolve_member_ref): Handle uninstantiated method
1353         types.
1355         * cplus-decl.c ({start,finish}_decl): Call pushclass/popclass for
1356         decls which are static class members, in order to perform
1357         visibility computations for initializers correctly.
1358         * cplus-decl.c (grokvardecl): If static class member, set
1359         DECL_CONTEXT of the decl to the containing class type.
1361         * cplus-search.c (get_first_matching_virtual): Must call comptypes
1362         starting from first parameter, not its TREE_CHAIN, since one
1363         version of the function may have a this which is `*const' while
1364         the other does not.
1366         * cplus-decl.c (finish_decl): Permit static class members of
1367         reference type to be uninitialized in class declaration.  They
1368         will get initialized elsewhere, presumably.
1370         * cplus-method.c (dump_type_prefix): `const' and `volatile' were
1371         being put in the wrong places.  Type like `const *const ...' were
1372         being dumped as `const const *...'.
1374         * cplus-decl2.c (finish_file): Don't try to initialize anything
1375         which has ERROR_MARK_NODE in its initializer.
1377 Thu Oct 12 02:41:34 1989  Michael Tiemann  (tiemann at arkesden)
1379         * cplus-init.c (resolve_member_ref): Catch case when we are in
1380         static member function context by reference is to (apparently)
1381         non-static member.
1383         * cplus-method.c (fndecl_as_string): Check PARMTYPES before
1384         chaining down, in case of syntax error.
1386         * cplus-init.c (do_friend): Take QUALS parameter.  Needed for
1387         `grokclassfn'.  Also take CTYPE instead of CNAME parameter.
1388         * cplus-decl.c (grokdeclarator): Caller changed.
1390         * cplus-init.c (do_friend): Set DECL_CONSTRUCTOR_P bit if we get a
1391         constructor.
1393         * cplus-tree.c (layout_basetypes): Don't allocate a virtual
1394         baseclass pointer if we can share one with a non-virtual
1395         baseclass.
1397         * tree.c (make_node): Build PARM_DECL nodes on the
1398         maybepermanent_obstack, not on the permanent_obstack.
1400         * cplus-typeck.c (build_unary_op): If addressing a reference and
1401         the reference is a variable, we need to check DECL_INITIAL, in
1402         case the variable is being initialized by a function call at top
1403         level.
1405         * cplus-decl.c (grokdeclarator): Be more careful when looking for
1406         function name when giving error that parameter list is random.
1408         * cplus-decl.c (grokdeclarator): Change handling of STATICP for
1409         member functions.  Eliminate variable MEMFUNC_STATICP.
1411         * cplus-decl.c (init_decl_processing): Don't disable profiling
1412         anymore.
1414 Wed Oct 11 05:37:12 1989  Michael Tiemann  (tiemann at arkesden)
1416         * c plus-except.c [_JBLEN]: More systems have more ways to fail to
1417         define this value.  Implement yet another way to get it.
1419         * cplus-typeck.c (build_component_ref): Have to really check
1420         whether FIELD comes from a virtual baseclass.
1422         * cplus-init.c (is_aggr_typedef): Renamed
1423         `is_aggr_typedef_or_else' to `is_aggr_typedef', and gave it
1424         OR_ELSE parameter.  All callers changed.
1425         * cplus-parse.y (member_init): Call `is_aggr_typedef' with zero
1426         value for OR_ELSE.  We just want to know if the member looks like
1427         a virtual baseclass member or not.
1429         * cplus-method.c (build_decl_overload): Handle case where error
1430         has us building an overloaded name for something with a signature
1431         of X::f (...).  That signature is technically erroneous, but can
1432         arise in the face of certain syntax errors.
1434         * cplus-lex.c (yylex): Handling of extern language strings was
1435         broken.  If we were unlucky and got a file name string while
1436         reading a declaration, it could cause YYLVAL.TTYPE to contain the
1437         filename, rather than the type that was read in.  Fixed by
1438         assigning to YYLVAL.TTYPE after checking for possible language
1439         string identifier.
1441         * cplus-init.c (build_new): We cannot expand `new' inside of base
1442         or member initializers, so instead put the expansion into an
1443         RTL_EXPR.  CURRENT_VTABLE_DECL is ERROR_MARK_NODE in that case.
1444         * cplus-parse.y (.set_base_init): Set CURRENT_VTABLE_DECL to
1445         ERROR_MARK_NODE to indicate we are in initialization.
1446         * cplus-class.c (build_vfn_ref): Don't use cached vtable if
1447         calling function from base or member initializer.
1449 Tue Oct 10 22:47:47 1989  Michael Tiemann  (tiemann at arkesden)
1451         * cplus-typeck.c (unary_complex_lvalue): Can't take pointer to
1452         member through virtual baseclass.
1453         * cplus-typeck.c (convert_for_assignment): Same change.
1455         * stmt.c (assign_parms): Don't let BLKmode parameter get
1456         ``rounded'' off its word boundary...`access_parm_map' does not
1457         know what to do if that should happen for an inline function.
1459         * cplus-decl.c (grokdeclarator): Distinguish STATICP, which has
1460         roughly the usual `C' meaning, from MEMFUNC_STATICP, which means
1461         that the declaration is a static member function.
1463 Mon Oct  9 00:55:19 1989  Michael Tiemann  (tiemann at arkesden)
1465         * cplus-method.c (build_overload_name): Change naming scheme so
1466         that GNU calling convention (which passes objects in the stack) is
1467         distinct from cfront/PCC convention.
1469         * cplus-decl.c (push_overloaded_decl): Don't compare DECL_LANGUAGE
1470         of previously overloaded decl if it is not a FUNCTION_DECL.
1472         * cplus-decl.c (grokfndecl): Use parameter CHECK to control
1473         behavior of `grokclassfn' in non-constructor case (already used in
1474         constructor case).
1476         * cplus-class.c (finish_struct): Give warning if struct or union
1477         has no data members if PEDANTIC *or* EXTRA_WARNINGS.
1479         * cplus-typeck.c (convert_for_initialization): Don't forget to
1480         change TREE_READONLY VAR_DECLs into their constant initial value
1481         if they have one.
1483         * cplus-parse.y (.set_base_init): Change grammar to not go into
1484         error mode if a base initializer shows up for a non-member
1485         function.  Otherwise, compiler will push binding levels (in
1486         `start_function' and `store_parm_decls') which it will not pop,
1487         leaving us not at global_bindings_p at function end.
1489         * cplus-class.c (ideal_candidate): In the event that there is no
1490         ideal candidate, restore PARMS by moving value from TREE_PURPOSE
1491         values back into the TREE_VALUE slots.
1493 Mon Oct  2 02:28:43 1989  Michael Tiemann  (tiemann at arkesden)
1495         * cplus-lex.c (cons_up_dtor_for_type): Call to `start_method'
1496         could yield VOID_TYPE_NODE in case of errors.  Handle that.
1497         * cplus-class.c (finish_struct): Caller of `cons_up_dtor_for_type'
1498         changed.
1500         * cplus-decl.c (pushtag): Don't call `pushdecl' on for tags which
1501         are TREE_NONLOCAL.
1502         * cplus-class.c (pushclass): Set TREE_NONLOCAL before calling
1503         `pushtag'.
1505 Sun Oct  1 00:05:49 1989  Michael Tiemann  (tiemann at arkesden)
1507         * cplus-tree.h [DECL_VINDEX]: Change definition from being a
1508         FUNCTION_DECL to being a list of FUNCTION_DECLs, in the event that
1509         multiple baseclasses define the same virtual function.  This only
1510         affects code where DECL_VINDEX was assumed to be a FUNCTION_DECL,
1511         namely in cplus-decl.c (grokfndecl) and cplus-class.c
1512         (add_virtual_function).
1514         * cplus-typeck.c (convert_for_initialization): If we are
1515         converting to an ARRAY_TYPE, don't call `default_conversion' on an
1516         initializer which is also of ARRAY_TYPE.
1518         * cplus-decl.c (finish_decl): If FIELD_DECL is of type ARRAY_TYPE
1519         that has not yet been laid out, we must go through the code which
1520         calls `complete_array_type' for TYPE and `layout_decl' for DECL.
1522         * cplus-init.c (expand_aggr_init_1): See whether initializer can
1523         go through a type-conversion operator rather than an X(X&)
1524         constructor, since wel will save one constructor that way.  I.e.,
1525         trying to go through an X(X&) constructor may lead us to needing
1526         to go through a type-conversion operator, but the result of that
1527         conversion must still go through the original X(X&) constructor.
1529         * cplus-decl.c (finish_decl): For FUNCTION_DECLs with default
1530         argument, we build sub-FUNCTION_DECLs to catch calls to this
1531         function with fewer than the total number of arguments.  We set
1532         TREE_USED of the sub-FUNCTION_DECLs to keep GNU C++ from
1533         complaining about the function being when compiling with -Wall.
1534         We also need to set TREE_ASM_WRITTEN and DECL_INITIAL of the
1535         function to really ensure that GNU C++ does not spuriously
1536         complain about these sun-FUNCTION_DECLs.
1537         * cplus-decl.c (grokdeclarator): Set TREE_PUBLIC of after calling
1538         `grokfndecl' on all paths.
1540         * cplus-typeck.c (build_function_call): Set TREE_USED for
1541         FUNCTION_DECL if TREE_INLINE is zero.
1543         * cplus-decl2.c (grok_enum_decls): Move to cplus-decl.c since it
1544         now needs access to `struct binding_level'.
1545         * cplus-decl.c (grok_enum_decls): When looking for class-local
1546         enum tags, warning if we find them in a class binding level other
1547         than the current one.  It probably indicates a parse error in the
1548         file.
1550         * cplus-decl.c (lang_decode_option): Recognize new option
1551         -Wenum-clash, which gives warnings when enumeral types are
1552         used in suspect ways, such as assigning from one enumeral
1553         type to another.
1555         * cplus-typeck.c (message_2_types): Was previously called
1556         `error_2_types'.  Now takes argument PFN which is pointer to
1557         the function which will actually print the message.
1558         * cplus-typeck.c (convert_for_assignment): Give error for
1559         passing incompatible enums only if pedantic.  Otherwise, give
1560         warning.
1562         * cplus-init.c (finish_base_init): Add argument T which is the
1563         type for which the base initialization is being finalized.  When
1564         finished initializing fields which come from anonymous unions,
1565         call `finish_base_init' on that anonymous union, which will unmark
1566         interesting fields recursively.
1567         * cplus-decl.c (finish_function): Caller changed.
1569         * cplus-method.c (hack_identifier): Permit calls through
1570         REFERENCE_TYPE fields which overload `operator ()'.
1572         * cplus-cvt.c (convert): Remove warning ``assignment to virtual
1573         aggregate type''.
1575         * cplus-decl.c (finish_decl): Make sure to destroy function-local
1576         static objects if they had been initialized.  Set TREE_STATIC bit
1577         for elements of STATIC_AGGREGATES which are function-local
1578         objects.
1579         * cplus-decl2.c (finish_file): Rest of that implementation.
1581 Sat Sep 30 20:34:52 1989  Michael Tiemann  (tiemann at arkesden)
1583         * cplus-typeck.c (actualparameterlist): Don't let objects with
1584         operator= or X(X&) constructors be passing into `...'.  If
1585         PEDANTIC, give error, otherwise, give warning.
1587         * cplus-typeck.c (convert_for_assignment): Get tougher on
1588         conversions to/from enumeral data types.
1590         * cplus-typeck.c (build_modify_expr): Make `operator=' an
1591         inheritable operator.
1593         * cplus-decl.c (push_overloaded_decl): Give error message if
1594         overloaded functions from different language contexts have the
1595         same type signature.
1597         * cplus-cvt.c (build_default_binary_type_conversion): If the types
1598         are not C++ types, then give error message saying that no type
1599         conversion operator exists.  Call function `typedecl_for_tag' to
1600         get name for error message.
1601         * cplus-decl.c (typedecl_for_tag): New function.  Return the
1602         TYPE_DECL (if any) assoicated with TAG.
1604         * cplus-class.c (build_functional_cast): Handle case where `A (B)'
1605         does not mean pass `B' to A's constructor, but rather call
1606         B.operator A ().
1608         * cplus-search.c (get_first_matching_virtual): If argument types
1609         differ only in their qualifiers, admit a match, but warn the user
1610         that this match was made.
1612         * cplus-lex.c (yyungetc): New function.  Give parser routines the
1613         ability to adjust input tokens if initial lexing was a little bit
1614         wrong.
1616         * cplus-method.c (build_overload_name): Distinguish reference
1617         types from non-reference types.
1619         * cplus-typeck.c (process_init_constructor): Give error messages
1620         about types of objects which cannot be initialized from an
1621         initializer list.
1623 Wed Sep 27 00:22:16 1989  Michael Tiemann  (tiemann at arkesden)
1625         * cplus-class.c, cplus-init.c (various places): Handle cases that
1626         fields of struct are really local type declarations.
1628         * cplus-decl2.c (grokclassfn): Added new parameter CTYPE, in order
1629         to remove dependence on class name-class type equivalence.  This
1630         was done for exception handling.
1631         * cplus-decl.c, cplus-init.c, cplus-except.c: All callers changed.
1632         * cplus-lex.c (cons_up_dtor_for_type): Added parameter NAME, for
1633         same reason.
1634         * cplus-class.c (finish_struct): Caller changed.
1636         * cplus-decl.c (duplicate_decls): If OLDDECL's type must change,
1637         remove OLDDECL from STATIC_AGGREGATES if it was there.
1638         * cplus-decl2.c (finish_file): Handle VARS being ERROR_MARK_NODE.
1640         * cplus-class.c (build_method_call): When calling `build_new',
1641         pass BASETYPE, not NAME, as the thing to be new'd.
1643         * cplus-parse.y (raise_identifiers): Permit qualified names, i.e.,
1644         `raises List::NotFound'.
1645         * cplus-decl.c (grokdeclarator): Handle nested exception scopes.
1646         * cplus-except.c (finish_exception_decl): Ditto.
1647         * cplus-class.c (build_method_call): Ditto.
1649         * cplus-except.c (init_exception_processing): Build in `setjmp'
1650         and `longjmp'.
1652         * cplus-except.c (expand_cplus_{start,end}_exception): If the
1653         exception object has elements which need cleanpus, call those
1654         cleanups after handling the exception.
1656         * cplus-except.c (finish_exception_decl): Set TYPE_HAS_CONSTRUCTOR
1657         bit, since call to `grokdeclarator' is subverted.
1659         * cplus-except.c (init_exception_processing): Size of `handler'
1660         field in built-in `ExceptionHandler' type was too big by one.
1662         * cplus-init.c (build_delete): Don't call non-virtual destructor
1663         with first argument of zero.
1665         * cplus-parse.y (except_stmts): Handle default exception as last
1666         exception (so that fall-through does the right thing).  Also, give
1667         error message if multiple `default' clauses appear within an
1668         `except_stmt'.
1670         * cplus-decl.c (finish_decl): If a variable needs a cleanup, pass
1671         the cleanup to `expand_decl', whether or not that variable has RTL
1672         or not.
1673         * cplus-except.c (expand_start_try): Call `finish_decl' instead of
1674         `expand_aggr_init' to initialize the exception handler for the
1675         try.  Otherwise, the exception handler's destructor will not be
1676         called at the end of the try.
1678         * cplus-decl.c (store_parm_decls): Don't call `__main' from `main'
1679         until after the parameters have been dealt with.
1681 Tue Sep 26 09:41:29 1989  Michael Tiemann  (tiemann at teacake)
1683         * cplus-parse.y (stmt): Deal with case of TRY statement without
1684         corresponding EXCEPT clause.
1686         * cplus-decl.c (duplicate_decls): Don't call `compexcepttypes'
1687         until after calling `commontype', lest default parameters cause
1688         identical exception lists to look different.
1690         * cplus-except.c (end_exception_decl): New function clears
1691         exception declaration state.
1692         * cplus-parse.y (datadef): Call end_exception_decl when we are at
1693         the end of a declaration which could be an exception declaration.
1695         * cplus-class.c (modify_vtable_entry): Reenable stubbed out code
1696         which is used when baseclass is virtual.
1697         * cplus-class.c (finish_struct): When base class is virtual, check
1698         CLASSTYPE_VBASECLASSES using `value_member' instead of
1699         CLASSTYPE_ASSOC using `assoc_value'.
1701         * dbxout.c (dbxout_tags): Ensure that fully output types have
1702         their typedefs output as well.  Needed to support -fminimal-debug.
1704 Sun Sep 24 11:22:41 1989  Michael Tiemann  (tiemann at arkesden)
1706         * cplus-method.c (report_type_mismatch): Don't tweak I if the
1707         function was FUNCTION_TYPE.  Let TTF and TTA be advanced according
1708         to CP->U.BAD_ARG only.
1710         * expr.c (expand_expr): PROTECT argument missing in call to
1711         `expand_delete'.
1712         * cplus-init.c (build_delete): Call `convert_force' instead of
1713         `convert' if PROTECT is 0.
1715         * cplus-typeck2.c (digest_init): When initializing a RECORD_TYPE
1716         object, call `convert_for_initialization' as a last resort.
1718         * cplus-tree.c (build_exception_variant): Used TREE_CHAIN for look
1719         when should have used TYPE_NEXT_VARIANT.
1721         * cplus-decl.c ({start,finish}_decl): Handle decls which are
1722         CLASSTYPE_DECLARED_EXCEPTION.  For `start_decl', nothing needs to
1723         be done.  For `finish_decl', call `finish_exception_decl'.
1725         * cplus-except.c (finish_exception): When user defines an
1726         exception, make the compiler generate that exception's constructor
1727         automatically.
1729         * cplus-typeck.c (build_binary_op_nodefault): Associate
1730         (((a && b) && c) && d) to ((a && b) && (c && d)) to get better
1731         merging of component references when possible.
1732         * cplus-typeck2.c (merge_component_comparisons): Permit
1733         non-contiguous bitfield tests if bitfields are comparisons against
1734         integers.
1736         * cplus-tree.c (layout_basetypes): Give each basetype the
1737         alignment it wants.
1739         * cplus-lex.c (yylex): Recognize >?= and <?= operators (like +=
1740         for min and max operators).
1742         * cplus-decl.c (grokdeclarator): Set TREE_PUBLIC bit of
1743         FUNCTION_DECLs in FIELD_CONTEXT if they are !INLINEP.
1745         * cplus-decl.c (finish_function): Don't pay attention to
1746         `current_function_returns_null' when compiling constructors.
1748 Sat Sep 23 00:03:52 1989  Michael Tiemann  (tiemann at arkesden)
1750         * stmt.c (assign_parms): Take care of case where parm arrives on
1751         the stack, but `__builtin_saveregs' might be called.  In that
1752         case, get bits from stack into registers, so that
1753         `__builtin_saveregs' will not overwrite with garbage.
1754         * expr.c (expand_builtin): Modify expansion of BUILT_IN_SAVEREGS
1755         to protect stack args that need protecting.
1757         * cplus-decl.c (grokdeclarator): Never build a METHOD_TYPE if
1758         CTYPE is NULL_TREE.  Was doing that when declaration of illegal
1759         construct ``virtual friend'' was parsed.
1761         * cplus-parse.y (do_array:): Don't try to call `build_array_ref'
1762         if $3 is ERROR_MARK_NODE (cuts down on spurious error messages).
1764         * cplus-decl.c (grokfndecl): Move setting of DECL_VIRTUAL_P bit to
1765         after we know whether the function is virtual.  Remove setting
1766         CLASSTYPE_VSIZE.  This will be set more accurately by
1767         `finish_struct'.
1769 Fri Sep 22 15:36:32 1989  Michael Tiemann  (tiemann at arkesden)
1771         * cplus-cvt.c (convert_to_pointer): PATH was reversed for
1772         computing nested virtual base accesses.
1774         * cplus-except.c (finish_exception): Call POPCLASS at end.
1776         * cplus-class.c (build_field_call): New function containing code
1777         broken out of `build_method_call'.  Extended to grok calls through
1778         fields of exception objects which overload `operator()()', or are
1779         otherwise callable.
1780         * cplus-class.c (build_method_call): Now about 100 lines shorter.
1782         * cplus-decl.c (grokdeclarator): Take new argument RAISES
1783         specifying the exceptions that a function will raise.
1784         * cplus-decl.c (grokfield): Implement RAISES semantics by passing
1785         them to `grokdeclarator'.
1787         * cplus-decl.c (grok{fn,var}decl): Two new functions containing
1788         code broken out of `grokdeclarator'.
1789         * cplus-decl.c (grokdeclarator): Now about 250 lines shorter.
1791 Thu Sep 21 16:51:11 1989  Michael Tiemann  (tiemann at arkesden)
1793         * cplus-search.c (get_vbase_types): Sort was totally broken.
1794         Completely rewritten.
1796 Wed Sep 20 00:47:36 1989  Michael Tiemann  (tiemann at teacake)
1798         * cplus-decl2.c (finish_file): Change !defined(SDB_DEBUGGING_INFO)
1799         to defined(DBX_DEBUGGING_INFO).
1801         * cplus-class.c (finish_struct): Argument to `alloca' was off by
1802         9.
1804         * cplus-init.c (build_new): If type requires alignment >
1805         BITS_PER_WORD (which is what ``__builtin_new'' is supposed to
1806         give), then get more space and round manually.
1808 Tue Sep 19 03:08:58 1989  Michael Tiemann  (tiemann at teacake)
1810         * cplus-decl.c (finish_decl): Don't call `comptypes' if INIT is
1811         error_mark_node.
1813         * cplus-cvt.c (convert_to_reference): Set TREE_VOLATILE bit for
1814         assignment from one reference to another (for
1815         build_compound_expr).
1817         * cplus-decl2.c (finish_file): If we are compiling on Suns, bind
1818         local label ``_fini'' to static file cleanup function and
1819         ``_init'' to static file initialization function. STUBBED OUT FOR
1820         NOW.
1822         * cplus-parse.y: Put `type_quals' in 3rd operand position of a
1823         CALL_EXPR.  Interface to `start_function', `start_method'
1824         and `grokfield' changed.
1825         * cplus-decl.c (grokdeclarator): Get QUALS from
1826         TREE_OPERAND (CALL_EXPR, 2). [n.b.: First operand is
1827         TREE_OPERAND (CALL_EXPR, 0)].
1829         * cplus-tree.h (TYPE_RAISES_EXCEPTIONS): For FUNCTION_TYPE and
1830         METHOD_TYPE, a list of the exceptions that may be raised.
1831         * cplus-decl.c (duplicate_decls): Remove assumption that
1832         TYPE_LANG_SPECIFIC implies that type IS_AGGR_TYPE.
1834 Mon Sep 18 14:08:02 1989  Michael Tiemann  (tiemann at teacake)
1836         * cplus-class.c (add_virtual_function): If WRITE_VIRTUALS == 2,
1837         only set the TREE_ADDRESSABLE bit on a virtual function if the
1838         virtual function table is actually being output in this file.
1839         * cplus-decl.c (grokdeclarator): If WRITE_VIRTUALS == 2, make
1840         inline virtual functions TREE_PUBLIC if we are writing out this
1841         virtual function's virtual function table.
1842         * cplus-lex.c (reinit_parse_for_method): Don't clobber the above
1843         setting of TREE_PUBLIC for virtual functions.
1845         * cplus-lex.c: Process inline functions in declaration order.
1847 Sun Sep 17 01:46:14 1989  Michael Tiemann  (tiemann at teacake)
1849         * cplus-declc. (grokdeclarator,start_method,start_function): Merge
1850         ``extern inline'' change.
1852         * cplus-typeck2.c (merge_component_comparisons): New function.
1853         Optimizes operations on contiguous component references provided
1854         that operations and alignments permit.
1855         * cplus-typeck2.c (make_merged_ref): Subroutine of above function
1856         to actually get the combined references.
1858         * cplus-typeck2.c: New file.  Contains error-reporting
1859         functionality from cplus-typeck.c, and other functionality which
1860         could be easily moved out.
1862         * cplus-typeck.c (unary_complex_lvalue): Must test against
1863         {FUNCTION,METHOD,OFFSET}_TYPE before testing whether ARG is a
1864         MEMBER_REF.  If the former holds, then we have an expression like
1865         X::Y.  In the latter case, we have an expression like (X->*Y).
1867 Sat Sep 16 11:31:21 1989  Michael Tiemann  (tiemann at teacake)
1869         * toplev.c (main): Recognize `+' options again.
1871         * cplus-decl.c (lang_decode_option): Implement `+e2' option, which
1872         writes out only virtual function tables specified in #pragma
1873         vtable.
1874         * cplus-decl2.c (finish_file): Implement semantics of `+e2'
1875         option.
1876         * cplus-lex.c (yylex): Recognize `#pragma vtable'.
1878         * cplus-decl2.c (finish_file): Charge time used against
1879         VARCONST_TIME, not PARSE_TIME.
1881 Thu Sep 14 18:04:10 1989  Michael Tiemann  (tiemann at teacake)
1883         * cplus-init.c (build_new): If FLAG_THIS_IS_VARIABLE is non-zero,
1884         then generate call to constructor with zero as first argument.
1885         Otherwise, use `expand_aggr_init' to initialize the storage
1886         returned from whatever storage allocator was called.
1887         Initialization of virtual baseclasses simplified.  Memory
1888         management made more complex (though more general) because we may
1889         have `new' expressions not being evaluated until `finish_file' is
1890         called.
1891         * cplus-decl2.c (finish_file): Handle a `new' expreesion at top
1892         level.
1894         * cplus-decl.c (finish_function): Change call from `build_x_new'
1895         to `build_new'.
1896         * cplus-init.c (build_x_new): Deleted.
1898         * cplus-init.c (build_new): Give error if arguments are given to a
1899         `new' expression for which no constructor is defined.
1901         * cplus-decl.c (decode_lang_option): Use option table from
1902         toplev.c to decode -f options.
1904         * cplus-method.c (flush_repeats,build_overload_name): Change
1905         naming convention to avoid ambiguous names if type index or number
1906         of repeats is more than nine.
1908         * cplus-except.c (init_exception_processing): Use <setjmp.h> to
1909         find length of setjmp buffer.
1911 Wed Sep 13 05:32:50 1989  Michael Tiemann  (tiemann at teacake)
1913         * cplus-decl.c (start_method): Set TREE_INLINE bit if
1914         FLAG_DEFAULT_INLINE is nonzero.
1915         * cplus-decl.c (lang_decode_option): Recognize -fdefault-inline.
1917         * cplus-init.c (do_friend): Call `pushdecl_top_level' instead of
1918         `pushdecl'.
1920         * cplus-decl.c (start_method): Only need to copy node if it is not
1921         a friend.
1922         * cplus-decl.c (finish_method): In that case, return
1923         VOID_TYPE_NODE if the method was really a friend, but save it to
1924         CLASSTYPE_INLINE_FRIENDS so it can be processed properly later.
1925         It would be nice to have an obstack for this list so it could be
1926         freed at the end of this class's processing.
1928 Tue Sep 12 05:22:03 1989  Michael Tiemann  (tiemann at teacake)
1930         * cplus-decl.c (start_function): Make C++ FUNCTION_DECL inherit
1931         DECL_ASSEMBLER_NAME from old C FUNCTION_DECL if their types are
1932         identical.  This makes C<->C++ calls *much* easier to deal with.
1934         * cplus-decl.c (xref_tag): Don't set CLASSTYPE_DECLARED_CLASS bit
1935         if REF is CURRENT_CLASS_TYPE (??? or on the CURRENT_CLASS_STACK).
1937         * cplus-search.c (lookup_field_1): Give the user the virtual
1938         function table field if the name is `_vptr'.
1939         * cplus-decl2.c (grokfield): Don't let user declare anything with
1940         that name.
1942         * cplus-cvt.c (build_type_conversion): If we are trying to convert
1943         to type `void*' and no conversion to ptr_type_node exists, but a
1944         some other pointer conversion for TYPE exists, then convert to
1945         that pointer type, unless there is more than one such conversion,
1946         in which case return ERROR_MARK_NODE.  The caller will emit an
1947         error message in that case.  All callers changed.
1948         * cplus-cvt.c (convert_to_{integer,real,pointer}): Removed `saving
1949         throw' case which would try converting aggregate to a default type
1950         if requested conversion did not succeed.  `build_type_conversion'
1951         knows how to perform such `saving throws'.
1952         * cplus-tree.h (lang_type): New field `ptr_type_conversion'.
1953         * cplus-decl.c (grokdeclarator): Record whether a type has a
1954         type conversion operator here.
1955         * cplus-class.c (finish_struct): Set up `ptr_type_conversion'.
1956         Also, don't need to trudge through all methods to find out there
1957         are no type conversion methods.
1959 Mon Sep 11 10:45:01 1989  Michael Tiemann  (tiemann at teacake)
1961         * cplus-class.c (finish_struct): If we must cons up a destructor
1962         for a type, and METHOD_VEC was 0, set TREE_VEC_LENGTH (METHOD_VEC)
1963         to 1 after allocating METHOD_VEC.
1965         * cplus-class.c (finish_struct): Finish processing METHOD_VEC
1966         before making other calls out which may call `hash_tree_chain'.
1968         * cplus-class.c (finish_struct): Add BASE_LAYOUT_DECL to eliminate
1969         need for callback in stor-layout.c.
1971         * cplus-typeck.c (build_binary_op): Special case situation where
1972         we compare ARG1 with INTEGER_ZERO_NODE and ARG1 is of aggregate
1973         type.  This is what comes from `truthvalue_conversion'.
1975         * cplus-cvt.c (build_type_conversion): New argument CODE says for
1976         what purpose the conversion is taking place.  Important ones are
1977         truthvalue operations, which permit us to convert to different
1978         types then the ones we asked for.  All callers changed.
1979         * cplus-cvt.c (build_default_{binary,unary}_type_conversion): Same
1980         change.  All callers changed.
1982         * cplus-class.c (finish_{base_}struct): Set
1983         TYPE_NEEDS_CONSTRUCTING bits when basetype or member type needs
1984         constructing.
1986         * cplus-search.c (compute_visibility): Use TYPE_MAIN_VARIANT to
1987         see if field is public member of private baseclass.
1989         * cplus-init.c (expand_aggr_init_1): When bad arguments were
1990         passed to constructors for base initialization, only half the
1991         error message would appear.
1993         * Makefile: Remove dependencies on unexec.c and unex-addr.c.
1995         * cplus-decl.c (push_overloaded_decl): Can't use `value_member' to
1996         find previously declared function.  Use DECL_NAME of function
1997         instead, since that must be unique (as a type signature/name
1998         combination).
2000         * cplus-lex.c (yylex): typo in assert macro.
2001         * cplus-cvt.c (convert_to_nonzero_pointer): Ditto
2003         * All GNU C++ files: implement initialized constant fields.  Make
2004         them non-static, non-addressable VAR_DECLs.
2006 Sun Sep 10 09:19:22 1989  Michael Tiemann  (tiemann at teacake)
2008         * cplus-method.c (build_opfncall): Remove METHOD_REF case.
2009         * tree.def: Remove definition of METHOD_REF.
2011         * cplus-decl.c (finish_decl): If a static member needs
2012         constructing, but it does not have an initializer, make it
2013         TREE_EXTERNAL.
2014         * cplus-decl2.c (grokfield): Set DECL_IN_AGGR_P before calling
2015         `finish_decl' for VAR_DECLs.
2017         * cplus-parse.y (forhead.2): New rule to keep GNU C++ gives better
2018         error handling when multiple variables are declared in the first
2019         part of a `for' stmt.
2021         * cplus-lex.c (finish_method): Handle case when `start_method'
2022         returns VOID_TYPE_NODE (two definitions of the same method in the
2023         same class.
2025         * cplus-decl.c (grok_op_properties): Make static operators (other
2026         than new and delete) trigger error messages.  If operator new or
2027         delete has no arguments (due to syntax errors), rebuild their
2028         types.  They have the right names, because `build_operator_fnname'
2029         knows how to do that.
2031         * stor-layout.c (make_{un}signed_type): Cache size nodes for
2032         pointers, functions, and methods.
2033         * stor-layout.c (layout_type): Use cached types.
2035         * cplus-decl{2}.c: Use `hash_tree_chain' instead of `tree_cons'
2036         where possible.
2038         * cplus-decl.c (expand_static_init): If variable has already been
2039         initialized, give complaint, but don't store the initializer.
2040         That way we don't have to preserve it on the temporary obstack.
2042         * cplus-parse.y (identifier_or_opname): Accept new C++ destructor
2043         syntax, which is effectively "scoped_identifier '~' identifier".
2044         * cplus-class.c (build_scoped_method_call): Accept calls using new
2045         C++ destructor syntax here.
2046         * cplus-class.c (build_method_call): Reject calls through here
2047         which don't use a leading `scoped_identifier'.
2049         * cplus-init.c (build_new): Don't permit arrays of `void'.  Better
2050         error message emitted for newing `void'.
2052         * cplus-typeck.c (build_conditional_expr): Don't call
2053         `default_conversion' on the arms of the conditional if both are of
2054         the same enumeral type.  Otherwise, if EXTRA_WARNINGS, give
2055         warning if enumeral type appears in either (or both) arm(s) of the
2056         conditional.
2058         * cplus-cvt.c (build_type_conversion): Don't convert from `int' to
2059         `void*'.  Don't convert a `void*' to an `int'.
2061         * cplus-decl.c (xref_tag): If we get an old reference to a C
2062         struct name, and we are in C++ langauge context, give it a
2063         TYPE_DECL.
2065         * cplus-class.c (build_method_call): Don't call
2066         `default_conversion' on MEMBER_REFs because they might be enums.
2067         Instead, call `resolve_member_ref', and then if the type is
2068         something we would rather convert before calling
2069         compute_conversion_costs, convert that.
2071         * cplus-init.c: Set TREE_VOLATILE bit after all
2072         ``build (CALL_EXPR, ...)'' calls.
2074         * cplus-init.c (expand_vec_init): If at global binding level,
2075         return a TREE_VEC which contains the initialization parameters for
2076         the vector.  `expand_vec_init' is no longer static.
2077         * cplus-decl.c (finish_decl): Handle INIT being result of
2078         `expand_vec_init' at top-level.
2079         * cplus-decl2.c (finish_file): Ditto.
2081 Sat Sep  9 12:44:48 1989  Michael Tiemann  (tiemann at teacake)
2083         * cplus-class.c (finish_struct): Move error message about static
2084         members in unions from stor-layout.c to here.
2086         * varasm.c, stor-layout.c: Merged with GCC.
2087         * cplus-class.c (finish_struct): Use special FIELD_DECL in
2088         TYPE_FIELDS of T before calling `layout_type' to have effect of
2089         passing basetype layout information to `layout_record'.
2091         * cplus-typeck.c (build_c_cast): Typo in call to
2092         cleanup_after_call.
2094 Fri Sep  8 11:16:01 1989  Michael Tiemann  (tiemann at teacake)
2096         * All GNU C++ files: replaced calls to `abort' with assertion
2097         macros where appropriate.  Also removed some unneccessary tests
2098         against ERROR_MARK_NODE in various function calls.
2100         * cplus-lex.c (check_newline): Changed to take NEXTCHAR into
2101         account.
2103 Thu Sep  7 06:15:56 1989  Michael Tiemann  (tiemann at teacake)
2105         * cplus-decl.c (store_parm_decls): Change where
2106         DECL_REFERENCE_SLOT is initialized.  Eliminate a second loop
2107         through the parms.
2109         * cplus-method.c (hack_identifier): Don't need to test against
2110         FUNCTION_DECL before testing if the TREE_TYPE is REFERENCE_TYPE.
2112         * cplus-lex.c (yylex): If reading `0' or `1', return
2113         INTEGER_ZERO_NODE or INTEGER_ONE_NODE respectively.
2114         * cplus-decl.c (build_enumerator): If we got one of these two
2115         as a value, make a copy.
2117         * tree.c,cplus-lex.c,cplus-class.c,cplus-search.c
2118         [GATHER_STATISTICS]: Now only gather statistics if this macro is
2119         defined.
2121         * tree.c (make_node,build_int_2,tree_cons,build_tree_list): Merge
2122         Bryan Boreham's ``deluxe'' memory profiling code.
2124         * cplus-decl.c (finish_decl): Only complain about uninitialized
2125         refs and consts if there is no constructor for the type.  If there
2126         is a constructor, then that constructor should say whether it did
2127         not initializer certain fields or not.
2129         * cplus-init.c (expand_aggr_init): When initializing, nothing is
2130         `const'.
2132         * cplus-decl.c (store_parm_decls): No need to call
2133         expand_decl_init on a PARM_DECL.  In fact, now it is wrong.
2135         * tree.h: rearranged tree_decl layout and defined
2136         tree_function_decl type for FUNCTION_DECLs.  Now space
2137         requirements for FUNCTION_DECLs do not impose on other kinds of
2138         _DECL nodes.  Also, PARM_DECL nodes use less than a full decl
2139         node's worth of space.
2140         * toplev.c (rest_of_decl_compilation): Don't permit ASMSPEC to
2141         appliy to PARM_DECL nodes.
2142         * varasm.c (make_decl_rtl): Abort if called for a PARM_DECL node.
2143         * print-tree.c (dump): PARM_DECL nodes are not full.
2144         FUNCTION_DECL nodes have more fields then regular _DECLs now.
2145         * tree.c (make_node): Use TREE_CODE_LENGTH when allocating _DECL
2146         nodes.  Also, don't set DECL_SOURCE_* for PARM_DECL nodes.
2147         Instead, set their DECL_CONTEXT to CURRENT_FUNCTION_DECL.
2148         * tree.c (build_decl): Don't set DECL_ASSEMBLER_NAME for PARM_DECL
2149         nodes.
2150         * cplus-decl.c (start_decl): Don't not push DECL if DECL is a
2151         PARM_DECL.
2153         * cplus-lex.c (yylex): Remove tests about whether we *really* saw
2154         a keyword or not.  Instead, use `init_lex' to do most of the work
2155         for us (since lang_c's reserved word set is a subset of
2156         lang_cplusplus).
2158         * cplus-decl.c,cplus-decl2.c,cplus-typeck.c,cplus-class.c,
2159         cplus-lex.c, cplus-method.c: change tests of the form
2160         (TREE_VALUE (t) == void_type_node) to (t == void_list_node).
2162         * cplus-decl2.c (grokopexpr): Added argument CTYPE to help
2163         distinguish whether operators NEW and DELETE belong to a class, or
2164         are the global operators NEW and DELETE.
2165         * cplus-decl.c (grokdeclarator): Caller changed.
2166         * cplus-method.c (hack_operator): Caller changed.
2168 Wed Sep  6 10:29:45 1989  Michael Tiemann  (tiemann at teacake)
2170         * dbxout.c (dbxout_type): Handle static member functions.
2172         * cplus-typeck.c (c_expand_return): Change test from
2173         TYPE_NEEDS_CONSTRUCTING to TYPE_NEEDS_CONSTRUCTOR to see whether
2174         `expand_aggr_init' must be called.
2176         * cplus-decl2.c (grokfield): Use `digest_init' to digest
2177         CONSTRUCTOR initializers of fields.
2179         * cplus-decl.c (grokdeclarator): Permit ARRAY_TYPE field decls to
2180         get their types from their initializer (if they were incomplete).
2182         * cplus-lex.c (build_operator_fnname): If there is more than one
2183         parameter to NEW_EXPR, then it is `__user_new'.
2185         * cplus-decl.c (store_parm_decls): Remove code to deal with case
2186         that function was declared without prototypes.  It is never
2187         executed.
2189         * cplus-typeck.c (unary_complex_lvalue): Handle (x->*y) as an
2190         lvalue.
2192         * cplus-decl.c (start_decl): Put in check that temporary obstack
2193         starts out empty when we start parsing an initializer.
2194         * cplus-decl.c (expand_static_init): If the initializer was read
2195         into the temporary obstack, preserve all space that it used.  I
2196         don't think it is safe to always read the initializer into the
2197         permanent_obstack and then free the space if it doesn't look
2198         interesting, because types may be created dynamically as a result
2199         of reading it in (such as array types), and we don't want them to
2200         get freed.
2202         * cplus-decl.c (finish_decl): Don't set DECL_ASSEMBLER_NAME of the
2203         decl to ASMSPEC if ASMSPEC is 0.
2205         * cplus-decl.c (finish_function): Set named_label_uses to
2206         NULL_TREE at end of function.
2208 Tue Sep  5 05:24:18 1989  Michael Tiemann  (tiemann at teacake)
2210         * cplus-except.c: New file.  Implements exception handling scheme
2211         designed by Michael Powell.
2213         * cplus-method.c (build_overload_name): Overload constructor names
2214         as '__' instead of whatever their original name was.
2215         * cplus-method.c (build_decl_overload): Distinguish constructors
2216         from other kinds of member functions.
2217         * cplus-decl2.c (grokclassfn): Call changed to
2218         `build_decl_overload' to take this into account.
2220         * cplus-decl.c (duplicate_decls): Don't crash if NEWDECL is a
2221         VAR_DECL, and there is an old VAR_DECL on the chain.  Happens for
2222         strange parse errors.
2224 Mon Sep  4 01:36:07 1989  Michael Tiemann  (tiemann at teacake)
2226         * cplus-decl2.c: New file.  Contains functions which used to be
2227         defined in cplus-decl.c, but could be easily broken out. Also
2228         moved some functions out of cplus-tree.c which did not really
2229         belong there, but were put there to make compilation less painful.
2231         * cplus-class.c (build_method_call): Use ERR_NAME in more places
2232         when printing error messages.
2234         * cplus-decl.c (grokdeclarator): Special case NEW_EXPR and
2235         DELETE_EXPR when grokking an OP_IDENTIFIER.  Make these guys
2236         static member functions.  Callers in cplus-init.c changed.
2237         * cplus-tree.c (coerce_new_type,coerce_delete_type): Force the
2238         type of `operator new' and `operator delete' to wind up with the
2239         right types.
2240         * cplus-lex.c (build_operator_fnname): Handle `operator new' and
2241         `operator delete' correctly, warning when the wrong number of
2242         parameters show up.
2244         * expr.c (expand_expr): Add NEW_EXPR to the list of tree codes
2245         for which INIT_EXPR and MODIFY_EXPR don't need to deal with
2246         noncopied_parts.
2248         * cplus-class.c (finish_struct): Initialize TREE_PURPOSE of
2249         TYPE_NONCOPIED_PARTS to the virtual function table for the type.
2251         * cplus-cvt.c (build_type_conversion_1): Compiler was getting into
2252         infinite recursion when asked to convert something from its own
2253         type to its own type.
2255         * cplus-parse.y: Added RERAISE statement.
2256         * cplus-lex.c: Added __reraise keyword.
2258         * cplus-cvt.c (build_type_conversion): Build type conversions to
2259         type variants (i.e., given `operator char * ()', convert to a
2260         `const char *').
2262         * dbxout.c (dbxout_tags): Callback to language-specific files to
2263         see whether a type should actually be output.
2264         * dbxout.c (dbxout_symbol): Same change.
2265         * cplus-tree.c (lang_output_debug_info): New function.
2266         * cplus-decl.c (finish_function): Memoize information for
2267         lang_output_debug_info.
2269         * Merged latest changes from Bryan Boreham for incremental
2270         compilation via dumping.
2272         * cplus-parse.y: Recognize `::new' and `::delete'.
2273         * cplus-init.c (build_new): Handle `::new' by new interpretation
2274         of USER_PARMS.  Only callers in cplus-parse.y needed changing.
2275         * cplus-init.c (build_{x_}delete): Handle `::delete' by accepting
2276         new argument USE_GLOBAL_DELETE.  All callers changed.
2278 Sun Sep  3 12:42:38 1989  Michael Tiemann  (tiemann at teacake)
2280         * expr.c (expand_cleanups_to): New function.
2281         * cplus-init.c (expand_cplus_expr_stmt): Call it after all is said
2282         and done.
2284         * expr.c (expand_expr): When encountering a NEW_EXPR, it is
2285         possible that the NEW_EXPR did not know (when it was built) what
2286         its cleanup needed to be.  If its cleanup is 0, try building one
2287         if a new temporary was built for it.
2289         * cplus-decl.c (duplicate_decls): Warn if function type qualifiers
2290         don't match only if PEDANTIC (following change made by rms).
2292         * cplus-typeck.c (build_function_call): If pedantic, don't permit
2293         `main' to be called.
2295         * cplus-typeck.c (convert_for_assignment): Don't let ints
2296         convert to enums.
2298         * cplus-decl.c (start_function): Ensure that `main' is
2299         always declared to return an integer type.
2300         * cplus-decl.c (finish_function): Make it so that `main' always
2301         returns 0 by default.
2303         * cplus-decl.c (grokdeclarator): Make it now an error to specify
2304         return types for constructors and destructors.
2306         * cplus-typeck.c (comp_target_{parms,types}): Loosen up to permit
2307         contravariance violations, though not without warning.
2309         * cplus-method.c (build_overload_name): Change from old
2310         overloading scheme to one more or less compatible with type-safe
2311         linkage scheme proposed in Stroustrup's 1988 USENIX paper.
2313 Sat Sep  2 09:16:01 1989  Michael Tiemann  (tiemann at teacake)
2315         * cplus-typeck.c (convert_for_initialization): Permit
2316         initialization of reference from incomplete type: that type will
2317         be converted to REFERENCE_TYPE, and that is just as good as a
2318         pointer to incomplete type.
2320         * cplus-decl.c (finish_decl): Handle case of static reference
2321         initialized from non-constant initializer.  Break out code to
2322         initialize static variables as function `expand_static_init'.
2324         * cplus-decl.c (finish_decl): Don't call constructors on external
2325         variables.
2327         * integrate.c (copy_for_inline): Canonicalize PLUS expressions so
2328         that CONST_INTs appear on the right, and `FRAME_POINTER_RTX'
2329         and/or `ARG_POINTER_RTX' on the left.
2330         * integrate.c (copy_rtx_and_substitute): Take advantage of this
2331         fact and test fewer things while integrating.
2333         * cplus-typeck.c (c_expand_return): Try to get away with not
2334         issuing a call to `use_variable' for the DECL_RESULT of the
2335         function.  If that fails, calling it only if
2336         `any_pending_cleanups' returns nonzero.
2338         * cplus-init.c (expand_recursive_init_1): Handle multi-demensional
2339         arrays which need constructing.
2340         * cplus-init.c (expand_vec_init): Handle multi-demensional arrays.
2341         Say sorry if we try to use an explicit initializer in that case,
2342         however.
2344         * cplus-parse.y: Permit the integer zero to be deleted (though who
2345         would want to?).
2347         * varasm.c (make_function_rtl): Replace call to lang_rtl_name with
2348         use of DECL_ASSEMBLER_NAME.
2349         * cplus-decl.c (lang_rtl_name): Removed.
2351         * cplus-decl.c (grokclassfn): Set DECL_ASSEMBLER_NAME after
2352         changing DECL_NAME.
2353         * cplus-init.c (do_friend): Ditto.
2355         * cplus-decl.c (start_function): If CURRENT_FUNCTION_DECL is a
2356         destructor, set up DESTRUCTOR_LABEL.
2357         * cplus-decl.c (finish_function): If DESTRUCTOR_LABEL is nonzero,
2358         expand just before calling base destructors.
2359         * cplus-typeck.c (c_expand_return): If DESTRUCTOR_LABEL is
2360         nonzero, jump there instead of just expanding the return.
2362         * collect.c (process): Change from
2363         (andrew%frip.wv.tek.com@relay.cs.net) to skip auxiliary entries.
2365         * All GNU C++ files merged from 1.35.97+ to 1.35.98.
2367         * cplus-decl.c (define_label): If a newly declared variable in the
2368         label's binding contour will need a cleanup, it must live in a new
2369         binding contour.
2370         * cplus-decl.c (define_case_label): New function.  Same goes for
2371         case labels.
2372         * cplus-parse.y (stmt): Call `define_case_label' for CASE
2373         statements.
2375         * cplus-decl.c (lookup_label): Record in variable NAMED_LABEL_USES
2376         for each label the variables currently in scope at the use of the
2377         label.
2378         * cplus-decl.c (define_label): Give error message if jump to label
2379         crosses variable initialization in the current scope.
2381         * cplus-decl.c (struct binding_level): Change field
2382         `more_cleanups_ok' from char to bitfield.  Added field
2383         `have_cleanups'.  Change other fields to bitfields so that
2384         `struct binding_level' fits in 7 words, which can be
2385         malloc'd in total of 32 bytes.
2386         * cplus-decl.c (PUSH_BINDING_LEVEL,maybe_build_cleanup):
2387         Initialize and set field `have_cleanups'.
2388         * cplus-decl.c (expand_label): Set `more_cleanups_ok' to zero when
2389         we cross a label.
2391         * stmt.c (struct stack_block): Added field `initialized_decls_p'
2392         for blocks which need their decls expanded before used.
2393         * stmt.c (expand_decl{_init}): Set field initialized_decls_p when
2394         appropriate.
2396 Fri Sep  1 04:29:44 1989  Michael Tiemann  (tiemann at teacake)
2398         * Exception handling constructs recognized (but nothing working).
2400         * cplus-decl.c (init_decl_processing): Call `set_identifier_size'
2401         with a length, not a number of bytes.
2403         * cplus-class.c (build_class_init_list): Braino.
2405         * cplus-init.c (expand_aggr_init_1): Reinitialize virtual base
2406         class virtual function tables if they are set to wrong values by
2407         their constructors.
2408         * cplus-init.c (expand_aggr_init): Initialize virtual base class
2409         virtual function tables if they are not set any other way.
2411         * cplus-class.c (finish_struct): Use CLASSTYPE_VSIZE instead of
2412         TYPE_VIRTUAL_P to determine whether a particular class has virtual
2413         functions which belong in its vtable.  A type can be
2414         TYPE_VIRTUAL_P, meaning that *somewhere* it relies on virtual
2415         functions, but CLASSTYPE_VSIZE could be zero, meaning that it
2416         itself may not even have a virtual function table pointer.
2417         * cplus-decl.c (finish_file): Same changes.
2418         * cplus-decl.c (setup_vtbl_ptr): Same changes.
2419         * dbxout.c (dbxout_type): Same changes.
2420         * cplus-tree.c (layout_basetypes): Same changes.
2422         * cplus-class.c (finish_base_struct): Return 0 if all virtual
2423         functions come only from virtual baseclasses.  Also, do not put
2424         into VFIELDS those fields which come from virtual baseclasses.
2425         * cplus-class.c (modify_vtable_entry): Instead, run through by
2426         hand the virtual baseclasses whose virtual function tables need to
2427         be modified.  This means really using exactly the right
2428         associations for both base, context, and derived types.
2429         * cplus-class.c (prepare_fresh_vtable): Change parameter TYPE to
2430         CONTEXT_ASSSOC.  All callers changed.
2432 Thu Aug 31 08:17:45 1989  Michael Tiemann  (tiemann at teacake)
2434         * cplus-class.c (finish_struct): Test MAX_HAS_VIRTUAL, not
2435         HAS_VIRTUAL to assign TYPE_VIRTUAL_P (T).
2437         * integrate.c (save_for_inline): Add new variable
2438         PARM_INITIALIZATION which is nonzero during parameter
2439         initialization (either from the stack or registers).
2440         * integrate.c (copy_for_inline): Only zero TREE_READONLY of parm
2441         if PARM_INITIALIZATION is zero.
2442         * integrate.c (expand_inline_function): Back out Aug 30
2443         TREE_INLINE change for PARM_DECLs.
2444         * cplus-decl.c, cplus-typeck.c: Ditto.
2446         * cplus-decl.c (finish_decl): Take into account case where static
2447         variable must be initialized ``by hand''.
2449         * cplus-typeck.c (store_init_value): Return VALUE if
2450         initialization could not be trivially performed for static
2451         variable.  Otherwise return NULL_TREE.
2453         * cplus-decl.c (get_temp_name): Add parameter STATICP.  All
2454         callers changed.
2456         * integrate.c (copy_rtx_and_substitute): Significantly simplify
2457         PLUS and MEM case after finding out that code from tList.cc could
2458         break the complex cases on Sparc.  Net effect: maybe more work for
2459         optimizer in later passes, and maybe more space occupied by inline
2460         insns during compilation.
2462         * expr.c (store_one_arg): Add test to see if we can avoid calling
2463         convert_units if possible.
2465 Wed Aug 30 04:01:15 1989  Michael Tiemann  (tiemann at teacake)
2467         * toplev.c (main): Change +e[01] to -f+e[01], and move to
2468         lang_decode_option.
2469         * cplus-decl.c (lang_decode_option): Incorporate new flags.
2471         * integrate.c (copy_rtx_and_substitute): Don't build a SUBREG of a
2472         CONST_INT.
2474         * integrate.c (expand_inline_function): Change test of FORMAL from
2475         TREE_READONLY to TREE_INLINE.
2476         * cplus-typeck.c (build_modify_expr,build_unary_op): When
2477         modifying a PARM_DECL, set TREE_INLINE to 0.
2478         * cplus-decl.c (store_parm_decls): Set TREE_INLINE of PARM_DECL to
2479         1.
2481         * cplus-decl.c (finish_function): When finishing constructors, if
2482         simple case holds (no cleanups), just store CURRENT_CLASS_DECL
2483         into the DECL_RESULT of FNDECL and fall through.
2485         * integrate.c (expand_inline_function): Don't emit
2486         NOTE_INSN_DELETED notes.
2488         * cplus-parse.y (compstmt): Only save binding contour information
2489         if there actually were decls.
2491         * cplus-decl.c (finish_file): Argument LINENO was missing in calls
2492         to finish_function.
2494 Tue Aug 29 23:03:17 1989  Michael Tiemann  (tiemann at teacake)
2496         * cplus-typeck.c (unary_complex_lvalue): Treat INIT_EXPR like
2497         MODIFY_EXPR.  Also, handle WITH_CLEANUP_EXPR case.
2499         * expr.c (expand_expr): Brainos in WITH_CLEANUP_EXPR case.
2501         * cplus-cvt.c (build_up_reference): Handle case where ARG is a
2502         WITH_CLEANUP_EXPR.
2504         * stmt.c (expand_function_end): *Don't* set REG_FUNCTION_VALUE_P.
2506         * tree.def [NEW_EXPR]: Change from 2 arguments to 3.  Third
2507         argument, if non-NULL, is cleanup expression to run after the
2508         new'd expression is used.  All users of NEW_EXPR changed.
2510 Sun Aug 27 01:13:09 1989  Michael Tiemann  (tiemann at hobbes.ai.mit.edu)
2512         * stor-layout.c (layout_basetypes): Move from this file.
2513         * cplus-tree.c (layout_basetypes): To this one.
2515         * make-links.g++ (borrowed_files): typeclass.h is now a
2516         borrowed file.
2518         * cplus-decl.c (cleanup_after_call): New function.
2519         * cplus-typeck.c (build_compound_expr): Call it if neccesary.
2520         * cplus-typeck.c (build_c_cast): Ditto.
2521         * cplus-init.c (expand_cplus_expr_stmt): Ditto.
2522         * expr.c (expand_call): Remove code to allocate destructable stack
2523         slot if function return value is not used.
2525         * cplus-decl.c (init_decl_processing): `built_in_vec_delete' is
2526         NOT_BUILT_IN.
2527         * expr.c (expand_builtin): Don't try to expand EXPAND_VEC_DELETE.
2529         * cplus-init.c (build_vec_delete): Build the vector delete here;
2530         don't make a call to `__builtin_vec_delete'.
2532         * expr.c (expand_expr): Merge INIT_EXPR and MODIFY_EXPR.
2533         * expr.c (init_noncopied_parts): New function.
2535         * gcc.c: Merged completely.  Use GCC from standard distribution.
2537 Sat Aug 26 10:38:14 1989  Michael Tiemann  (tiemann at hobbes.ai.mit.edu)
2539         * cplus-typeck.c (build_binary_op): Perform type instantiation if
2540         necessary.
2542         * cplus-class.c (instantiate_type,build_instantiated_decl): Change
2543         "type instantiation" to "overload" in various error messages.
2544         * cplus-class.c (instantiate_type): Also fix error message to
2545         report overload resolution failure only if function has more than
2546         one type signature declared.
2548         * cplus-class.c (instantiate_type): Call `mark_addressable' on
2549         result of instantiating something for an ADDR_EXPR.
2551         * 1.35.96 to 1.35.97+ changes:
2552         * Makefile: Change name of `cplus-parse.tab.*' to `cplus-tab.*'.
2553         * cplus-lex.c: Change #includes to reflect this.
2554         * cplus-decl.c: All merged except CURRENT_EXTERN_INLINE.
2555         * toplev.c: Changes for extern inlines not merged.
2557         * cplus-decl.c (finish_file): Reset FNNAME from DECL_NAME of the
2558         current function, since `start_function' may cause it to change if
2559         overloaded.  Also, push into C language context during the
2560         generation of file-level initializer/cleanup functions, since we
2561         don't want the extra-long names that overloading will give us.
2563         * cplus-decl.c,cplus-class.c,cplus-search.c: #include "obstack.h"
2564         instead of "cplus-obstack.h".
2566         * gnulib3.c: New file.  Provides initialization and cleanup
2567         services for GNU C++.  This should obviate the need for crt0.c.
2568         * crt1.c: Changed completely for new initialization/cleanup model.
2569         * cplus-decl.c (store_parm_decls): Put in special hooks to call
2570         `__main' from `main' for such purposes.
2572 Thu Aug 24 02:11:42 1989  Michael Tiemann  (tiemann at yahi)
2574         * cplus-lex.c (check_newline): Only call unexec #ifndef
2575         DONT_HAVE_UNEXEC.
2577         * cplus-lex.c (reinit_parse_for_method)[USG]: If the buffer given
2578         to setvbuf is shorter than eight bytes long, setvbuf will (in
2579         violation of its man page) ignore the buffer and call malloc to
2580         get a bigger one.  Fixed.
2582         * cplus-typeck.c (comp_target_types): Permit converting from a T**
2583         to a T** which has different qualifiers.
2585         * gcc.c (collect_spec): Changes for sun386.
2586         * collect.c: Ditto.
2587         * config.g++: Ditto.
2589         * cplus-parse.y (primary): Handle case where unfound
2590         identifier comes from base class during class declaration.
2592         * cplus-init.c (build_member_ref): Handle uses of class-local
2593         enums and static members before type is completed.
2595         * cplus-decl.c (pushdecl_class_level): Put enums and static
2596         members into class scope as soon as they are seen.
2597         * cplus-decl.c (poplevel_class): Make sure to take them out upon
2598         leaving scope.
2600         * cplus-lex.c (build_lang_field_decl): Take new argument CODE to
2601         say what kind of decl to build.
2602         * cplus-decl.c,cplus-parse.y: All callers changed.
2603         * cplus-decl.c (grok_enum_decls): Call `build_lang_field_decl'
2604         instead of `build_lang_decl'.  Saves memory.
2605         * cplus-decl.c (grokdeclarator): Same change for VAR_DECLs local
2606         to structs.
2607         
2608         * cplus-typeck.c (build_modify_expr): Fix logic so that when
2609         assigning to `this', the error message about not being within a
2610         constructor or destructor is only emitted at the appropriate time.
2612         * cplus-tree.h [OPERATOR_NEW_FORMAT,OPERATOR_DELETE_FORMAT]:
2613         Define these.
2614         * cplus-method.c (build_opfncall): Use them.
2616         * cplus-tree.h [OPERATOR_MODIFY_FORMAT,OPERATOR_MODIFY_LENGTH,
2617         OPERATOR_CALL_FORMAT,OPERATOR_CALL_LENGTH,OPERATOR_ARRAY_FORMAT,
2618         OPERATOR_ARRAY_LENGTH]
2619         Define these.
2620         * cplus-decl.c (grok_op_properties): Use them.
2621         * cplus-init.c (add_friends): Ditto.
2623         * cplus-tree.h [VTBL_PTR_TYPE]: Define this.
2624         * cplus-decl.c (init_decl_processing): Use it.
2626         * cplus-tree.h [OPERATOR_METHOD_FORMAT,OPERATOR_METHOD_LENGTH]:
2627         Define these.
2628         * cplus-class.c (build_method_call): Use them.
2630         * cplus-class.c (compute_conversion_costs): Fix typo which would
2631         cause error message to be generated for calling a const member
2632         function with a non-const object.
2634         * Aug 24 03:10 g++.xtar.Z on ~ftp/pub
2636         * cplus-init.c (build_new): Braino involving -fthis-is-variable
2637         removed.
2639 Wed Aug 23 00:12:29 1989  Michael Tiemann  (tiemann at yahi)
2641         * cplus-decl.c (finish_decl): Cannot forever remove READONLY
2642         attribute from decl needing initialization.
2644         * cplus-method.c (report_type_mismatch): Report error if calling
2645         non-const member function with const object.
2647         * cplus-class.c (convert_harshness,build_method_call): Finish
2648         implementing code to catch calls to non-const member functions
2649         with const objects.
2651         * cplus-class.c (build_method_call): No longer need to get to
2652         TYPE_MAIN_VARIANT for type information, such as TYPE_NEEDS_....
2654         * cplus-class.c (finish_struct): Set flags in all type variants.
2655         * cplus-parse.y (various places): Ditto.
2657         * integrate.c (expand_inline_function): No longer call abort if
2658         TREE_TYPE (arg) != TREE_TYPE (formal) for BLKmode parameter.  This
2659         can happen when TREE_TYPE (formal) == ERROR_MARK_NODE.
2661 Tue Aug 22 09:06:32 1989  Michael Tiemann  (tiemann at yahi)
2663         * cplus-class.c (ideal_candidate): Use `function' member instead
2664         of `u.field' member of candidates.  The former is always properly
2665         set up, whereas the latter is set to 0 if the function used is a
2666         non-member function.
2668         * cplus-decl.c (groktypefield): Handle case where IDENTIFIER_NODE
2669         comes in which is not an aggregate type name.
2671         * cplus-method.c (hack_operator): Return ERROR_MARK_NODE if
2672         operator name is missing.
2673         * cplus-parse.y: Callers changed to deal with this.
2675         * cplus-search.c (various places): Most calls to
2676         `error_with_aggr_type' were wrong, leading to backward error
2677         messages (such as `member `A' not found for class `memfunc').
2678         Changed back to call `error' with appropriate parameters.
2680         * cplus-search.c (lookup_fnfields): Braino in printing error
2681         message: TREE_VALUE (entry) is a BASELINK (a TREE_LIST of
2682         TREE_LISTs), not a TREE_LIST.
2684         * cplus-decl.c (grokdeclarator): Handle missing operator name for
2685         for OP_IDENTIFIER case.
2687         * cplus-init.c (finish_base_init): If the vtable installed by the
2688         constructor was not the right one, fix after call to base
2689         constructor, before derived initialization.
2691         * cplus-decl.c (store_parm_decls): New parm PRESERVE is nonzero if
2692         we should preserve the data containing the function parameters.
2693         This is normally done for inline functions, but also needs to be
2694         done for constructors of classes which use virtual baseclasses.
2695         * cplus-decl.c (finish_function): Don't set DECL_ARGUMENTS (FNDECL)
2696         to zero if above condition holds.
2697         * cplus-decl.c, cplus-parse.y: all callers of store_parm_decls
2698         modified.
2700         * cplus-tree.c (hash_tree_chain): New function.  Simplified
2701         version of hash_tree_cons.
2702         * cplus-parse.y (declmods): Use `hash_tree_chain' to build up
2703         lists which are not destroyed during parsing.  They can be reused
2704         throughout the rest of the parse.
2706 Mon Aug 21 09:51:47 1989  Michael Tiemann  (tiemann at yahi)
2708         * cplus-init.c (expand_aggr_init_1): Replace PARM_DECL rtl's with
2709         actual values to parameters.
2711         * cplus-init.c (expand_aggr_vbase_init): Only try initializing
2712         base classes here if FNDECL is nonzero.
2713         * cplus-init.c (expand_aggr_init_1): Try initializing them here in
2714         that case instead.
2716         * cplus-decl.c (finish_decl): We can initialize a const& from a
2717         const int, etc.
2719         * cplus-init.c (expand_vec_delete): Only warn about ignored array
2720         size expressions if EXTRA_WARNINGS.
2722         * cplus-init.c (build_new): Don't forget to allocate space for
2723         vectors.
2725         * cplus-init.c (add_friend): If the friend is not of METHOD_TYPE,
2726         set CTYPE = ERROR_MARK_NODE.  This prevents false friend matches
2727         due to fact that `is_friend' assumes that if CURRENT_CLASS_TYPE ==
2728         TREE_PURPOSE (friends), that a class-match has occured.
2730         * stmt.c (expand_end_bindings): Don't let cleanups affect ({...})
2731         constructs.
2733         * cplus-decl.c (finish_decl): When initializing one reference from
2734         another, make sure that we wrap the initializer in a SAVE_EXPR if
2735         it is TREE_VOLATILE.
2737         * cplus-class.c (compute_conversion_costs): Check that FORMAL_TYPE
2738         is not ERROR_MARK_NODE.
2740         * tree.h (tree_type): Delete unused field `parse_info'.
2742         * cplus-decl.c (setup_vtbl_ptr): Add tests for OPTIMIZE and that
2743         CURRENT_FUNCTION_DECL is not DECL_STATIC_FUNCTION_P.
2745 Sun Aug 20 12:09:30 1989  Michael Tiemann  (tiemann at yahi)
2747         * cplus-decl.c,cplus-typeck.c (various places): Check for
2748         CONST_DECL in addition to TREE_READONLY VAR_DECLs when needing
2749         constants for various purposes.
2751 Sat Aug 19 12:27:41 1989  Michael Tiemann  (tiemann at yahi)
2753         * cplus-class.c (build_method_call): Handle case where
2754         INSTANCE_PTR is integer_zerop.  This can happen with casts like
2755         { return ((Object*)0)->Object::IsA(); }
2757 Fri Aug 18 01:14:02 1989  Michael Tiemann  (tiemann at yahi)
2759         * cplus-class.c (build_method_call): Complain about using abstract
2760         function only if INSTANCE is of known abstract type.
2762         * cplus-class.c (add_method): Don't crash if FIELDS is 0.
2764         * dbxout.c (dbxout_type): Don't crash if type only defines
2765         constructors and destructors.
2767         * cplus-typeck.c (build_component_ref): If METHOD_VEC is 0, break
2768         out of loop.
2770         * cplus-decl.c (finish_file): Don't abort if INIT is 0.
2772 Thu Aug 17 21:55:35 1989  Michael Tiemann  (tiemann at yahi)
2774         * cplus-parse.y (LC): If the type we get left of a '{'
2775         !IS_AGGR_TYPE, then make a fake node which can hold our types for
2776         us.
2778         * cplus-init.c (do_friend): Argument missing in call to
2779         grokclassfn.
2781         * cplus-decl.c (poplevel): Only call `expand_end_bindings' if the
2782         level being popped needed an `expand_start_bindings' to get going.
2783         This only happens if the level is specifically to hold
2784         temporaries (i.e., when the KEEP field is < 0).
2786         * cplus-decl.c (finish_decl): Emit a sorry message if the _DECL
2787         needs constructing, and is not at toplevel.
2789         * cplus-class.c (build_method_call): Complain about incomplete
2790         types only if (FLAGS&LOOKUP_COMPLAIN).
2792 Wed Aug 16 17:11:22 1989  Michael Tiemann  (tiemann at yahi)
2794         * toplev.c (compile_file), cplus-lex.c (yylex): Use setjmp/longjmp
2795         to communicate fact that dump was just performed.  This prevents
2796         duplicate bytes being written to the asm file, due to inline
2797         functions being written out by both original and dumped compilers.
2799         * toplev.c (compile_file): Hack to make dumped compiler move bytes
2800         quickly from old asm file to new.
2802         * cplus-search.c (build_mi_virtuals,free_mi_matrix): Pointer
2803         arithmetic for mi_vmatrix accesses were off by 1.
2805         * cplus-class.c (build_method_call): Handle case where INSTANCE
2806         has a POINTER_TYPE type.  This is when it is a dummy argument for
2807         `operator new ()'.
2809 Tue Aug 15 00:05:49 1989  Michael Tiemann  (tiemann at yahi)
2811         * cplus-decl.c (grokclassfn): `const' member function information
2812         was being lost.
2814         * cplus-class.c (build_method_call): Generate error message when
2815         passing const objects to non-const member functions.
2817         * cplus-class.c (finish_struct): METHOD_VEC must track the object
2818         being grown on the class obstack.
2820         * cplus-method.c (dump_type{_prefix}): Print `class' instead of
2821         `struct' if declared as class.
2823         * cplus-method.c (build_{decl,typename}_overload,do_actual_overload,
2824         fndecl_as_string): Distinguish `const' member functions from
2825         normal member functions.
2827         * cplus-search.c (get_base_type): Distinguish whether we want to
2828         know if a public field of baseclass is protected, or whether a
2829         conversion from derived to base class is protected by passing
2830         either 1 or 2 to the argument PROTECT.
2831         * cplus-search.c (get_base_distance): If protect is non-zero,
2832         always emit an error message if conversion from derived to base
2833         class is across a private visibility boundary.
2835         * cplus-cvt.c (convert_to_reference): Don't violate visibility
2836         rules when converting to references.  Add parameter PROTECT to
2837         control this behavior.  All callers changed.
2838         * cplus-cvt.c (build_up_reference): Ditto.
2840 Mon Aug 14 00:03:46 1989  Michael Tiemann  (tiemann at yahi)
2842         * stmt.c (expand_end_case): Incorporate rfg's bugfix for
2843         optimizing case statements with signed negative test term.
2845         * cplus-search.c (reinit_search_statistics): New function.
2846         * toplev.c (compile_file): Call that function if BEEN_HERE_BEFORE.
2848         * cplus-decl.c: Remove explicit initializations from static
2849         variables--let them sit in common rather than data space.
2850         * cplus-method.c: Ditto.
2852         * Makefile,toplev.v, cplus-decl.c, cplus-lex.c: Incorporated
2853         changes from Bryan Boreham <kewill!bryan@uunet.uu.net> to dump a
2854         running GNU C++ for later reexecing.
2855         * unexec.c,lastfile.c: borrowed from GNU Emacs
2856         * unex-addr.c,getpagesize.h: New files
2858         * Aug 14 13:07 g++.xtar.Z on ~ftp/pub
2860         * cplus-decl.c (finish_file): Handle case where initializer for
2861         one static aggregate is another.  Do so by disabling code which
2862         assumed the wrong thing in that case.
2864         * cplus-search.c, cplus-tree.c, cplus-class.c: Major surgery on
2865         assoc lists.  Virtual baseclasses are no longer represented in the
2866         main assoc list of a type.  CLASSTYPE_VBASECLASSES already holds
2867         such information.  Various functions changed and/or simplified to
2868         use value from that assoc list when needed.
2870         * cplus-decl.c (grokdeclarator): Don't get confused by
2871         non-storageclass bits in SPECBITS when DECL_CONTEXT == FIELD.
2873         * cplus-init.c (expand_aggr_init_1): Only check whether a new
2874         value has been assigned to `this' by the base class if
2875         FLAG_THIS_IS_VARIABLE is nonzero.
2877         * cplus-init.c (expand_aggr_init_1,build_new): Function
2878         `expand_aggr_vbase_init_1' was the wrong thing.  Change these
2879         functions to call `expand_aggr_vbase_init' instead.
2880         Also, #ifdef'd out `expand_aggr_vbase_init_1'.
2882         * cplus-search.c: Move assoc code from here...
2883         * cplus-tree.c: ...to here.
2885         * cplus-decl.c (lang_printable_name): Don't print return type for
2886         constructors or destructors.
2888         * cplus-class.c (finish_struct): Set TYPE_NEEDS_CONSTRUCTING bit
2889         if any default members.
2891         * cplus-decl.c (finish_file): Remove test for
2892         TYPE_NEEDS_CONSTRUCTING when considering vars in
2893         STATIC_AGGREGATES.  If something made it to this list, it should
2894         be initialized.
2896 Sun Aug 13 14:25:55 1989  Michael Tiemann  (tiemann at yahi)
2898         * cplus-decl.c: Rename static variable GLOBAL_AGGREGATES to
2899         STATIC_AGGREGATES.
2900         * cplus-decl.c (finish_decl): Put static aggregates on the
2901         STATIC_AGGREGATES list if the VAR_DECL is TREE_STATIC.  It does
2902         not have to be at the global_binding_level to get this treatment.
2903         Also, rename variable OLDGLOBAL to OLDSTATIC, and remove error
2904         messages which are no longer needed due to this change.
2906         * cplus-typeck.c (comptypes): Qualifiers must match.  (Fix taken
2907         from GCC).
2909         * cplus-init.c (expand_aggr_{vbase}_init,expand_recursive_init):
2910         provide arguments INPUT_FILENAME and LINENO to
2911         `expand_asm_operands'.
2912         * cplus-search.c (init_vbase_pointers,build_vbase_vtables_init):
2913         Ditto.
2915         * cplus-class.c (push_lang_context): Don't set current_lang_name
2916         if it is not a name we recognize.
2918         * All GNU C++ files: Merged changes from 1.35.95 to 1.35.96.
2920 Sat Aug 12 00:27:43 1989  Michael Tiemann  (tiemann at yahi)
2922         * cplus-decl.c (finish_function): Call use_variable on
2923         CURRENT_VTABLE_DECL if it is non-NULL.
2925         * cplus-decl.c (finish_decl): Call build_indirect_ref instead of
2926         building the INDIRECT_REF by hand when setting the decl reference
2927         slot.
2929         * cplus-obstack.h: New file.  Defines obstack_int_grow and
2930         obstack_ptr_grow.  Cuts many calls to bcopy.
2931         * cplus-class.c: Use cplus-obstack.h instead of obstack.h.
2932         * cplus-search.c: Ditto.
2934         * cplus-parse.y (aggr): Fix minor nits in error messages.
2936         * cplus-class.c (finish_struct): Removed code which redundantly
2937         called `finish_decl' on static class members.
2939         * cplus-decl.c (finish_decl): C++ 2.0 now permits static class
2940         members to be of types with constructors.
2942         * cplus-search.c (bfs_unmark_finished_struct): Don't call
2943         assoc_value if TYPE == CURRENT_CLASS_TYPE.
2945         * cplus-search.c (assoc_value): Call compiler_error if we have
2946         multiple baseclass hits.  Also, make this function look for
2947         matches recursively.  This saves having to flatten out the
2948         hierarchy all the time, saving storage.
2950         * cplus-init.c (expand_recursive_init_1): Take into account fact
2951         that there is no virtual function table initialization needed if
2952         CLASSTYPE_NEEDS_VIRTUAL_REINIT set TREE_VALUE (init_list) to
2953         NULL_TREE.
2954         * cplus-class.c (build_class_init_list): Set up init lists
2955         correctly if the derived class just takes virtual function table
2956         initialization from the base class.
2958         * cplus-init.c (finish_base_init): Unmark fields initialized which
2959         belong to base classes.
2961         * cplus-decl.c (grokdeclarator,duplicate_decls): Implement C++ 2.0
2962         interpretation of `const'.
2964         * Aug 12 08:33 g++.xtar.Z on ~ftp/pub
2966         * cplus-typeck.c (commontype): Case for REFERENCE_TYPE appeared to
2967         be missing.
2968         * cplus-typeck.c (comptypes): Ditto.
2970         * cplus-typeck.c (comp_target_parms): Braino caused this function
2971         to return after processing just the first argument!
2973         * cplus-typeck.c (comp_target_parms,compparms): Take
2974         contravariance into account for argument lists.
2976 Fri Aug 11 04:58:40 1989  Michael Tiemann  (tiemann at yahi)
2978         * cplus-tree.c (list_hash): Implement hashing scheme for
2979         unchanging list nodes, such as compose TYPE_BASELINKS.
2980         Several new functions and data structures implement this.
2981         * cplus-search.c (get_baselinks): Call hash_tree_cons instead of
2982         tree_cons to get fresh nodes.
2984         * tree.c (init_tree): Remove call to bzero for hash_table.
2986         * cplus-init.c (expand_aggr_init): Typo in call to
2987         expand_vec_init.
2989         * newld.c (decode_command): Fix failure to bzero all entries in
2990         FILE_TABLE.
2992         * cplus-lex.c (cons_up_dtor_for_type): Add missing QUALS
2993         parameter in call to start_method.
2995         * cplus-decl.c (start_function): Set TREE_READONLY and
2996         TREE_VOLATILE bits of C_C_D.
2997         * cplus-class.c (popclass): Ditto.
2999         * cplus-tree.c (build_cplus_method_type): New function.  Like
3000         `build_method_type', but permits qualifiers for the instance
3001         variable.
3002         * cplus-tree.h: Declare it.
3003         * cplus-decl.c (grokdeclarator,grokclassfn): Call this function
3004         instead of build_method_type.
3006         * tree.c (build_method_type): Set TYPE_METHOD_BASETYPE from the
3007         TYPE_MAIN_VARIANT of BASETYPE.
3009         * cplus-lex.c (gplus.input): Change `friend' from TYPE_QUAL to
3010         SCSPEC.
3012         * cplus-parse.y (fn.def1): Permit const and volatile member
3013         functions.
3014         * cplus-method.c (stash_inline_prefix): Handle case of const and/or
3015         volatile member functions declared inside class.
3016         * cplus-decl.c (start_{method,function}): Grok const and volatile
3017         member functions.
3018         * cplus-decl.c (grokdeclarator): New parameter QUALS.
3020         * cplus-typeck.c (readonly_warning_or_error): If ARG is a
3021         PARM_DECL, print its name.  Also, if the message is due to the
3022         underlying structure of a COMPONENT_REF, tell user the
3023         member name instead of trying to hunt down the structure name.
3024         also, if ARG is a reference variable or parameter, name the
3025         reference as well.
3027         * cplus-cvt.c (build_up_reference): Handle case where we build a
3028         reference to a sub-object of an object which uses multiple
3029         inheritance.
3031         * cplus-class.c (finish_struct): Simplify conditions under which
3032         CLASSTYPE_NEEDS_VIRTUAL_REINIT is used, and use it.
3034 Thu Aug 10 00:13:03 1989  Michael Tiemann  (tiemann at yahi)
3036         * cplus-parse.y (member_init): If base class is virtual, save the
3037         intializer on the permanent_obstack.
3039         * cplus-init.c (expand_aggr_vbase_init_1): New function.  Called
3040         to actually walk the virtual baseclass initialization list.
3042         * cplus-init.c (expand_aggr_vbase_init): New argument DECL is
3043         the FUNCTION_DECL for the constructor by which this object is
3044         initialized.  From that constructor comes the virtual base class
3045         initialization list.
3047         * cplus-init.c (finish_base_init): Store initializers for virtual
3048         base classes.
3050         * cplus-tree.h (lang_decl): Add new field `vbase_init_list'.
3051         Holds initializers for virtual base classes.
3053         * cplus-init.c (build_new): Arrange to initialize virtual
3054         baseclasses before calling constructor if FLAG_THIS_IS_VARIABLE
3055         is zero.  Otherwise, constructor will call it on allocation.
3057         * cplus-cvt.c (convert_to_nonzero_pointer): If EXPR is already
3058         of type TYPE, don't build a NOP_EXPR; instead, just return
3059         EXPR.
3061         * cplus-class.c (build_method_call): If INSTANCE is NULL_TREE,
3062         then pre-allocate storage for the constructor.  After that, if
3063         there are virtual baseclasses to initialize, initialize them right
3064         away.  Then call constructor with resulting argument.
3066         * cplus-decl.c (flag_this_is_variable): Change default from 1 to 0.
3067         * cplus-decl.c (lang_decode_option): Recognize
3068         `-fthis-is-variable' on command line.
3069         * cplus-decl.c (finish_function): Don't emit test for whether `this'
3070         is zero if FLAG_THIS_IS_VARIABLE is zero.  Check both constructor
3071         and destructor case.
3072         * cplus-decl.c (grokclassfn): Make `this' a *const if
3073         !FLAG_THIS_IS_VARIABLE.
3075         * cplus-search.c (build_mi_matrix): Initialize MI_SIZE when
3076         reusing an old mi-matrix.
3078         * cplus-cvt.c (convert_to_nonzero_pointer): Abort if argument is
3079         integer_zerop.
3081         * cplus-class.c (build_method_call): Simplify code, mostly for
3082         speed.
3084         * cplus-search.c (lookup_field): Use my_tree_cons instead of
3085         tree_cons for looking up fields.
3087         * cplus-search.c (my_{tree_cons,build_string}): Use SET_TREE_CODE
3088         to set tree code.
3090         * cplus-decl.c (finish_decl): Initialize globals whose type needs
3091         constructing, but ! IS_AGGR_TYPE (type), with empty_init_node to
3092         keep assemble_variable from crashing.
3094         * cplus-search.c (build_mi_matrix): Take into account
3095         CLASSTYPE_N_VBASECLASSES when computing MI_SIZE.
3096         * cplus-class.c (finish_struct): Braino: set
3097         CLASSTYPE_N_VBASECLASSES after calling layout_vbasetypes.
3099         * cplus-class.c (finish_base_struct): Set MAX_HAS_VIRTUAL
3100         regardless of whether base class is a virtual baseclass or not.
3101         * cplus-class.c (finish_struct): Also, set MAX_HAS_VIRTUAL
3102         taking into account virtual baseclasses.
3103         * cplus-tree.c (layout_vbasetypes): Takes new arg PMAX which
3104         passes info of maximum number of virtual functions defined in
3105         virtual baseclasses from this function to finish_struct.
3107         * cplus-class.c (finish_struct): Set MAX_HAS_VIRTUAL if
3108         HAS_VIRTUAL is set.
3110         * cplus-class.c (modify_vtable_entry): If VFIELD can be
3111         NULL_TREE, if the current class has no virtual function except
3112         those inherited from a virtual baseclass.  In such a case,
3113         NORMAL will be zero.
3115         * cplus-lex.c (copy_type_lang_specific): Copy the array of
3116         basetypes so that CLASSTYPE_BASECLASS (t, i) gives the right
3117         baseclass.
3119 Wed Aug  9 10:41:17 1989  Michael Tiemann  (tiemann at yahi)
3121         * cplus-typeck.c (c_expand_return): Don't pass return value though
3122         a temporary if there are no pending cleanups.
3123         * stmt.c (no_pending_cleanups): New function to support above
3124         change.
3126         * stmt.c (assign_parms): Add test to see if we can avoid calling
3127         convert_units if possible.
3129         * cplus-decl.c (grokparms): Use variables LAST_RESULT and
3130         LAST_DECL to eliminate need to call `chainon'.
3132         * stmt.c (expand_fixup,expand_start_bindings): Use static variable
3133         EMPTY_CLEANUP_LIST to short-circuit cleanup checking, and also
3134         cut down on calls to tree_cons, in new binding contours, which are
3135         quite frequent in C++ (20% of calls to tree_cons, and 5% of total
3136         TREE_LIST nodes).
3138         * stmt.c (expand_start_*): Build new nesting level structure on
3139         obstack instead of calling malloc.  New variable STMT_OBSTACK.
3140         New function `init_stmt'.
3141         * toplev.c: Call `init_stmt'.
3143         * obstack.h (obstack_{ptr,int}_grow): New macros.
3145         * cplus-cvt.c (build_default_{binary,unary}_type_conversion):
3146         Handle case where one (or both) incoming types are "C" types, not
3147         "C++" types.
3149         * cplus-cvt.c (convert_to_pointer): If we go through any virtual
3150         base pointers, make sure that casts to BASETYPE from the last
3151         virtual base class use the right value for BASETYPE.
3153         * cplus-search.c (dfs_find_vbases): VBASES are now TREE_VECs,
3154         not TREE_LISTS.  Change variable named OFFSET_INFO to ASSOC,
3155         and use accordingly.
3157         * cplus-search.c (dfs_get_vbase_types): Make assocs in VBASE_TYPES
3158         contain the true basetype, not its MAIN_VARIANT.
3160 Tue Aug  8 00:19:43 1989  Michael Tiemann  (tiemann at yahi)
3162         * stor-layout.c (layout_basetypes): Don't inherit assoc info.
3163         Synthesize it instead.
3165         * cplus-class.c (finish_struct): Reenable code which fills in
3166         virtual function tables of virtual baseclasses.
3168         * cplus-class.c (finish_struct): Fill in virtual function table
3169         with values which come from virtual or non-leftmost baseclasses.
3170         These are not filled in correctly by `modify_vtable_entry', which
3171         for these cases, only correctly allocates their skeleton.
3173         * cplus-class.c (modify_vtable_entry): Only call get_base_distance
3174         when BASE != CONTEXT.
3176         * cplus-search.c (get_base_distance): Don't push a search_stack
3177         level until we know we need it and will use it.
3179         * cplus-class.c (modify_vtable_entry): Once we know what vtable is
3180         of interest, set BASE to the best approximation of T's vtable we
3181         know.  I.e., set it to the vtable for the immediate super-class of
3182         T.
3184 Mon Aug  7 17:12:31 1989  Michael Tiemann  (tiemann at yahi)
3186         * cplus-class.c (finish_struct): When extending the bounds of the
3187         virtaul function table, keep VFIELDS as it was; don't move it up
3188         the inheritance tree.
3190         * cplus-class.c (finish_struct): No need to allocate a lang_decl
3191         for the virtual function table pointer FIELD_DECL.  Others need
3192         bits, but not bytes that FUNCTION_DECLs need.
3194         * cplus-init.c (build_virtual_init): For now, assume that FOR_TYPE
3195         and TYPE may be distinct, so use assoc lists to find the right
3196         vtable.
3198         * cplus-init.c (expand_recursive_init_1): Initialize the virtual
3199         function table of sub-components of aggregates driven by
3200         sub-component.  Otherwise, we have to initialize the virtual
3201         function table driven by the caller who knows what sub-components
3202         must be initialized.  Question: will this cause multiple
3203         initialization of vtables which are not down the left-hand side?
3204         Answer is probably yes.
3206         * tree.c (make_tree_vec): New function.
3208         * tree.c (copy_node): Now handles TREE_VEC correctly.
3210         * cplus-search.c ({make,copy}_assoc,assoc_value,debug_dump_assoc):
3211         Change representation of assoc list from TREE_LIST to TREE_VEC
3212         representation.
3213         * cplus-tree.h (ASSOC_* macros): Also here.
3215         * cplus-typeck.c (process_init_constructor): Don't complain about
3216         non-initialization of static class members, regardless of whether
3217         they are in global scope or not.  (Previously only complained when
3218         at global scope.)
3220         * cplus-class.c (finish_struct): Allocate method_vec if members
3221         need destructors.
3223 Sun Aug  6 10:23:31 1989  Michael Tiemann  (tiemann at yahi)
3225         * cplus-class.c (finish_struct): Eliminate redundant
3226         initialization of class fields to 0.
3228         * cplus-parse.y (parm rules): Use void_list_node instead of
3229         build_tree_list (NULL_TREE, void_type_node) where possible.
3231         * print-tree.c (dump): Handle TREE_VEC case.
3233         * cplus-init.c (add_method): Modified, and moved to cplus-class.c.
3235         * cplus-tree.h (lang_type): Change representation of list of
3236         member functions from list of lists to vector of lists.
3237         * cplus-class.c (finish_struct,build_method_call): Also here.
3238         * cplus-method.c (do_inline_function_hair): Also here.
3239         * cplus-decl.c (grokclassfn): Also here.
3240         * cplus-init.c (build_delete,build_member_ref): Also here
3241         * cplus-ptree.c (walk_lang_type): Also here.
3242         * cplus-search.c (lookup_fnfields{_1},get_baselinks,dfs_pushdecls,
3243         dfs_compress_decls,dfs_popdecls): Also here.
3244         * cplus-typeck.c (build_component_ref): Also here.
3245         * dbxout.c (dbxout_type): Also here.
3247         * cplus-class.c (build_method_call): Remove vestigal use of
3248         OVERLOAD_MAX_LEN.
3250 Sat Aug  5 09:49:48 1989  Michael Tiemann  (tiemann at yahi)
3252         * cplus-decl.c (grokparms): Reuse TREE_LIST node in usual case of
3253         parameter processing.
3255         * cplus-decl.c (init_decl_processing): Do things here which used
3256         to be done in toplev.c
3257         * toplev.c (various places): Merge with GCC.
3259 Fri Aug  4 17:47:24 1989  Michael Tiemann  (tiemann at yahi)
3261         * stor-layout.c (genop): Avoid creating new nodes when old ones
3262         will do.
3263         * stor-layout.c (build_int): Cache sizes we have made for types.
3265 Thu Aug  3 21:44:04 1989  Michael Tiemann  (tiemann at yahi)
3267         * cplus-decl.c (pushdecl): Canonicalize enum typedefs same as
3268         struct, class, and unions.
3270         * cplus-init.c (resolve_member_ref): When member is of
3271         METHOD_TYPE, return logical address of the member, not the member
3272         itself.  The member itself has type METHOD_TYPE, which has mode
3273         EPmode, which is not a valid mode for expand_expr.
3275         * cplus-init.c (expand_vec_delete): When calling vector delete on
3276         store which does not need destructors, just ignore the argument,
3277         and delete the container (array) instead.
3279         * cplus-decl.c (start_function): Handle case where OLDDECL comes
3280         back as a TREE_LIST.
3282 Wed Aug  2 10:54:54 1989  Michael Tiemann  (tiemann at yahi)
3284         * collect.c (process): Initialize ldptr to NULL if COFF is defined.
3286         * cplus-method.c (stash_inline_prefix): String name of function is
3287         IDENTIFIER_POINTER (DECL_NAME (...)), not DECL_NAME.
3289 Mon Jul 31 12:14:35 1989  Michael Tiemann  (tiemann at yahi)
3291         * cplus-decl.c (finish_decl): Handle case where INIT can be a
3292         TREE_LIST when initializing a named return value.  Specifically,
3293         translate a TREE_LIST into a COMPOUND_EXPR when initializing a
3294         referece.
3296         * toplev.c (compile_file): Gripe about *non*-extern functions
3297         declared static but not defined.
3299         * cplus-init.c (build_delete): Keep ADDR parameter from being
3300         evaluated multiple times if TREE_VOLATILE.
3302         * cplus-decl.c (grok_function_init): Note whether DECL is an
3303         uninheritable virtual (i.e., a virtual function of an "abstract
3304         class").
3305         * cplus-tree.h (lang_decl): Add bit to record above info.
3306         * cplus-class.c (build_method_call): Give error if compiler can
3307         detect that user is attempting to call this function for an object
3308         whose type is that of the "abstract class".
3310         * gcc.c (link_spec): Make libg++.a available via %s rather than
3311         from -lg++.
3313 Fri Jul 28 00:22:14 1989  Michael Tiemann  (tiemann at yahi)
3315         * cplus-typeck.c (comp_target_types): Take contravariance into
3316         account for OFFSET_TYPE.
3318         * cplus-decl.c (grokdeclarator): When declaring an array, always
3319         call suspend momentary, since the TYPE_DOMAIN of the array may be
3320         needed later, for instance by expand_vec_delete.
3321         * cplus-parse.y (nonmomentary_expr): Second change needed to
3322         ensure that above condition is met.
3324         * cplus-decl.c (grokdeclarator): Handle case of derived class
3325         declaring member function static when derived class declared
3326         member function virtual.
3328         * cplus-decl.c (grokparms): Permit functions which have default
3329         arguments to end with `...'.
3330         cplus-typeck.c (actualparameterlist): Handle this new case.
3332         * cplus-typeck.c (c_expand_return): Handle case where conversion
3333         to return type of function returns ERROR_MARK_NODE.
3335         * cplus-init.c (build_delete): Handle case where member type is
3336         ARRAY_TYPE.
3338         * cplus-parse.y (component_decl): Handle case of missing ';'
3339         before '}'.
3341         * cplus-typeck.c (c_expand_start_case): Handle case where switch
3342         quantity is a MEMBER_REF.
3344         * cplus-method.c (build_component_type_expr): Handle case of
3345         calling non-virtual type conversion operators.
3347         * cplus-decl.c (shadow_tag): Make permanent any type created here.
3349         * gcc.c (struct compiler compilers[]): add -D__GNUC__ to files
3350         which are compiled using GNU C++.
3352         * cplus-parse.y (primary <- IDENTIFIER): If the identifier is a
3353         class-local enumeral value, check visibility--it may be a private
3354         member of a base class.
3356         * cplus-cvt.c (convert_force): New function.  Permit conversion from
3357         sub-type to private super-type.
3358         * cplus-typeck.c (build_c_cast): Call convert_force instead of
3359         convert.
3361         * cplus-typeck.c (build_x_function_call): Don't crash if asked to
3362         resolve a function which has been declared overloaded, but does
3363         not yet have any signatures.
3365         * cplus-class.c (finish_decl): Don't crash when warning (or
3366         flagging as error) that array types in static objects cannot need
3367         constructors.
3369 Thu Jul 27 02:26:27 1989  Michael Tiemann  (tiemann at yahi)
3371         * cplus-tree.c (build_cplus_array_type): Make array type permanent
3372         if ELT_TYPE is permanent.  This is needed because the array type
3373         may exist within an inline function, and that inline function may
3374         be expanded at any future time.
3376         * cplus-typeck.c (build_scoped_ref): Typo caused fn call to have
3377         virtually no effect.
3379         * cplus-init.c (expand_recursive_init): Make usage of global
3380         INIT_PTR reentrant.
3382         * cplus-search.c (dfs_pushdecls): Don't try initializing a
3383         TYPE_DECL, just continue through it.
3385         * integrate.c (access_parm_map): Don't compensate for
3386         BYTES_BIG_ENDIAN if parm is BLKmode.
3388         * stmt.c (various places): Make stmt.c agree much more closely
3389         with GCC's stmt.c.  Now only a few places where there are
3390         differences.  These have to do with calling do_pending_adjust
3391         before running cleanups, and using `lang_printable_name' instead
3392         of DECL_PRINT_NAME to assign to `current_function_name'.
3394 Wed Jul 26 15:04:45 1989  Michael Tiemann  (tiemann at yahi)
3396         * cplus-decl.c (finish_decl): If decl is static, but initialized
3397         by non-static initializer (such as an object initialized by a
3398         constructor), use a special initializer to make the decl lay down
3399         in data rather than bss space.
3400         * varasm.c (assemble_variable): Remove C++-specific code for above
3401         case.
3403 Tue Jul 25 13:10:19 1989  Michael Tiemann  (tiemann at yahi)
3405         * cplus-class.c (modify_vtable_entry): If the base fndecl is
3406         not contained in the vtable, don't try to modify the vtable.
3407         This automatically includes virtual functions from virtual base
3408         classes.
3409         * cplus-class.c (modify_vtable_entry): If the virtual function
3410         does come from a virtual base class, remember to change its
3411         DECL_VINDEX from a FUNCTION_DECL to an INTEGER_CST before
3412         continuing with the loop.  Use the DECL_VINDEX of the base
3413         FUNCTION_DECL.
3415         * cplus-search.c (debug_dump_assoc): New function.
3417 Mon Jul 24 11:22:50 1989  Michael Tiemann  (tiemann at yahi)
3419         * cplus-class.c (finish_struct): Break out code to initialize a
3420         struct with information deriving from its base classes.
3421         * cplus-class.c (finish_base_struct): New function where that code
3422         now lives.
3424         * cplus-search.c (dfs_get_vbase_types): Make full association
3425         list; Don't do so only when TREE_VIRTUAL bit is set.
3427 Sun Jul 23 20:31:57 1989  Michael Tiemann  (tiemann at yahi)
3429         * cplus-class.c (modify_vtable_entry): Braino caused base
3430         association to overwrite derived associate, causing base
3431         virtual functions to appear in derived virtual function tables
3432         when they shouldn't have.
3434 Sat Jul 22 14:48:51 1989  Michael Tiemann  (tiemann at yahi)
3436         * cplus-lex.c (yylex): Characters are of type `char'
3437         * cplus-decl.c (lang_decode_option): No longer a need for
3438         flag_char_charconst.
3439         * flags.h: ditto.
3441         * All GNU C++ files: Merged changes from 1.35 to 1.35.95.
3443 Thu May 25 02:56:16 1989  Michael Tiemann  (tiemann at yahi)
3445         * cplus-init.c (expand_aggr_init_1): make sure to emit error
3446           message when following an error path.
3448         * stor-layout.c (layout_decl): call this function instead of
3449           cplus_size_in_bytes.  This saves many calls to `convert_units'.
3451         * cplus-typeck.c (cplus_size): new function, just returns the size
3452           of the type we are interested in (no units conversion is done).
3454         * cplus-decl.c (init_decl_processing): preallocate
3455           IDENTIFIER_NODES for `this' and `__delete_me__'; saves calls to
3456           get_identifier.
3458         * cplus-parse.y, cplus-lex.c: tried to speed things up.  Removed
3459           vestigial `@' construct from cplus-parse.y.  Also parse '(' ')'
3460           as a single token.
3462         * cplus-init.c (add_friend): make sure to return void_type_node if
3463           we want our callers not to see anything.  Also, undo having set
3464           TREE_GETS_{NEW,DELETE} if the friend we get is global operator new or
3465           global operator delete.
3467 Tue May 23 01:10:51 1989  Michael Tiemann  (tiemann at yahi)
3469         * cplus-typeck.c (build_modify_expr): Recursive memberwise
3470           assignment must work on all type variants, not just the main
3471           variant.  Otherwise, we can't assign a const B& to a B&.
3473         * cplus-cvt.c (convert_to_pointer): convert to virtual baseclasses
3474           through virtual baseclass pointers.  Also, give error if
3475           converting up from a virtual baseclass type.
3477 Mon May 22 22:03:24 1989  Michael Tiemann  (tiemann at yahi)
3479         * cplus-class.c (finish_struct): remember to give dynamic classes
3480           a vfield even if they don't define virtual functions (-fSOS).
3482         * cplus-decl.c (init_decl_processing): fixed typo: TYPE_POINTER_TO
3483           does not build a pointer type, but build_pointer_type does.
3485         * cplus-decl.c, cplus-init.c: allow builtin functions to be
3486           declared friends.
3488         * cplus-class.c (ideal_candidate): if the best candidates require
3489           user-defined type conversions, don't reject as ambiguous the
3490           case where one candidate comes from one class, and the other
3491           candidates come from base classes of that class.
3493         * stor-layout.c (layout_type): after laying out a type, make sure
3494           that all type variants get the type's size.
3496 Fri May 19 13:20:07 1989  Michael Tiemann  (tiemann at yahi)
3498         * cplus-class.c (popclass): don't kill out prev_class_type's decls
3499           if not at the global binding level.
3501         * cplus-decl.c: added new field `class_shadowed', which may some
3502           day be used to implement nested clases.
3504         * newld.c (various places): round up size to double word boundary
3505           if defined(sparc) || defined(sun).
3507         * tree.c (lvalue_p): A CALL_EXPR is an lvalue if the return type
3508           is an addressable type.
3510         * cplus-init.c (make_friend_class): fix typo in error message.
3512         * cplus-class.c (finish_struct): Don't give error message if class
3513           is does not define virtual functions which must be defined if
3514           that class has some of its own.
3516         * cplus-class.c (instantiate_type): handle case where user
3517           requests member function using object, i.e., `x.f'.  If f is
3518           virtual, return the function found in the virtual function table.
3520         * stor-layout.c (layout_basetypes): language dependent code
3521           removed, put in cplus-class.c
3523         * stmt.c (expand_goto_internal, expand_end_bindings,
3524           fixup_cleanups): if cleanups were called on leaving a binding
3525           contour, and EXIT_IGNORE_STACK is not defined, call
3526           do_pending_stack_adjust.
3528         * gcc.c: recognize ".cxx" as a C++ file name extension.
3530         * cplus-typeck.c (convert_for_initialization,
3531           convert_for_assignment): convert MEMBER_REFs, if possible, to
3532           members or component refs as appropriate.
3534         * cplus-typeck.c (build_member_ref): recognize member refs which
3535           are not associated with any object in particular (i.e., could
3536           be, but need not be `this').
3538         * cplus-search.c (get_vbase_types): orders the virtual base
3539           classes so that initialization and anti-initialization are 
3540           performed in correct order.  A virtual baseclass is not
3541           destroyed until all parts of the object which could be using
3542           that virtual base class are destroyed.
3544         * cplus-parse.y: call build_vbase_delete if appropriate.
3546         * cplus-init.c (expand_delete): call build_vbase_delete if
3547           appropriate.  No longer deletes parts of objects via virtual
3548           base classes.
3550         * cplus-init.c: new function build_vbase_delete, performs
3551           destructors on objects with virtual base classes.  new function
3552           build_x_delete calls free-store deallocator on objects without
3553           running destructors.
3555         * cplus-decl.c (pushdecl, shadow_tag, and xref_tag): implement
3556           C-like behavior in "C" language scope vis a vis type
3557           declarations.
3559         * cplus-decl.c: define macros PUSH_BINDING_LEVEL and
3560           POP_BINDING_LEVEL.  Use these macros where appropriate.  Fixed
3561           bug in popping binding contours in the presence of syntax
3562           errors.
3564         * README, config.g++, make-links.g++: fixed minor glitches
3566 Wed May 17 20:34:29 1989  Michael Tiemann  (tiemann at yahi)
3568         * stor-layout.c: move code which deletes an incomplete base type
3569           to cplus-class.c.
3571         * cplus-class.c (finish_struct): call `propagate_basetype_offsets'.
3573         * cplus-class.c: new function `propagate_basetype_offsets' gives
3574           correct offsets to base types which are not immediate base types
3575           in a multiple inheritance lattice.
3577 Tue May 16 09:40:00 1989  Michael Tiemann  (tiemann at yahi)
3579         * Started using ChangeLog for version 1.35.0