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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
245 * cplus-init.c (expand_member_init): Don't permit initialization
246 of member from base class--unless baseclass is virtual and has no
248 * cplus-init.c (member_init_ok_or_else): New function
249 encapsulating this and other checks for validity of member
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
579 * cplus-decl.c (duplicate_decls): Copying of DECL_IN_AGGR_P bit
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
625 * cplus-class.c, cplus-tree.c: Callers of `fndecl_as_string'
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
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)
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
657 * cplus-class.c (instantiate_type): Forgot to check COMPLAIN
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
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
689 * cplus-typeck.c (target_type): New function. Returns the target
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
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
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
727 * cplus-method.c (build_opfncall): TYPE1 was being initialized too
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
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
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
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
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
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
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
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
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
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
868 * config.g++: Add MIPS-based configurations.
870 * toplev.c: Make up for systems which do not have unistd.h (like
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
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
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'
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1323 * cplus-decl2.c (grokfield): Push TYPE_DECL into class level as
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
1335 * cplus-init.c (build_member_ref): Vestigial bug from change in
1336 representation of method lists (from list of lists to list of
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
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
1352 * cplus-init.c (resolve_member_ref): Handle uninstantiated method
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
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)
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
1393 * cplus-tree.c (layout_basetypes): Don't allocate a virtual
1394 baseclass pointer if we can share one with a non-virtual
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
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
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
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
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
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'
1500 * cplus-decl.c (pushtag): Don't call `pushdecl' on for tags which
1502 * cplus-class.c (pushclass): Set TREE_NONLOCAL before calling
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
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
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
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
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
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
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
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
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
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'
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
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
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
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
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
1736 * cplus-tree.c (layout_basetypes): Give each basetype the
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
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
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
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
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
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
1874 * cplus-decl2.c (finish_file): Implement semantics of `+e2'
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
1891 * cplus-decl2.c (finish_file): Handle a `new' expreesion at top
1894 * cplus-decl.c (finish_function): Change call from `build_x_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
1920 * cplus-decl.c (start_method): Only need to copy node if it is not
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
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
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
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
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
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'
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
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
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
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
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
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
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
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
2150 * cplus-decl.c (start_decl): Don't not push DECL if DECL is a
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
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
2189 * cplus-typeck.c (unary_complex_lvalue): Handle (x->*y) as an
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
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
2240 * cplus-lex.c (build_operator_fnname): Handle `operator new' and
2241 `operator delete' correctly, warning when the wrong number of
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
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
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
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
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
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,
2344 * cplus-parse.y: Permit the integer zero to be deleted (though who
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
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
2370 * cplus-decl.c (define_case_label): New function. Same goes for
2372 * cplus-parse.y (stmt): Call `define_case_label' for CASE
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
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
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
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
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
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
2469 * cplus-decl.c (lang_decode_option): Incorporate new flags.
2471 * integrate.c (copy_rtx_and_substitute): Don't build a SUBREG of a
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
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
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
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
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
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
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
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.
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
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
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]:
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]
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]:
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
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
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
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
2716 * cplus-decl.c (finish_decl): We can initialize a const& from a
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
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 ({...})
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
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
2778 * cplus-init.c (do_friend): Argument missing in call to
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
2809 Tue Aug 15 00:05:49 1989 Michael Tiemann (tiemann at yahi)
2811 * cplus-decl.c (grokclassfn): `const' member function information
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
2896 Sun Aug 13 14:25:55 1989 Michael Tiemann (tiemann at yahi)
2898 * cplus-decl.c: Rename static variable GLOBAL_AGGREGATES to
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
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):
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
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
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
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
2989 * newld.c (decode_command): Fix failure to bzero all entries in
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
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
3012 * cplus-parse.y (fn.def1): Permit const and volatile member
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
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
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
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
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
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
3081 * cplus-class.c (build_method_call): Simplify code, mostly for
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
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
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
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
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
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
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
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
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
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
3220 * cplus-class.c (finish_struct): Allocate method_vec if members
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
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
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
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
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
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
3338 * cplus-parse.y (component_decl): Handle case of missing ';'
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
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
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
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
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
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
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
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.
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
3458 * cplus-parse.y, cplus-lex.c: tried to speed things up. Removed
3459 vestigial `@' construct from cplus-parse.y. Also parse '(' ')'
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
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
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
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
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
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