|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ M T ┃
Length: 47012 (0xb7a4) Types: TextFile Names: »MC68020_OS2000_RELEASE7_2_2_LPT«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2 └─ ⟦77aa8350c⟧ »DATA« └─⟦0e555866a⟧ └─⟦this⟧
Rational Cross-Development Facility: M68020/OS-2000 Release Information Rev7_2_2 Release \f Copyright 1992 by Rational Part Number: 508-003218-007 October 1992 (Software Release Rev7_2_2) Motorola is a registered trademark of Motorola, Inc. Rational is a registered trademark and Rational Environment is a trademark of Rational. Rational 3320 Scott Boulevard Santa Clara, California 95054-3197 \f Rev7_2_2 Release 1. Overview Rev7_2_2 is a release of the Rational M68020/OS-2000 Cross-Development Facility (CDF). This release note lists new features added, problems fixed, and problems still outstanding since the previous release of the CDF. The main features of this release are: * Support for shared-code generics * Support for spec/load views * Support for code views * Integration with "Program_Library" facilities, providing faster prelinking * Reduced compilation times * Object files are now generated directly by the compiler This release REQUIRES environment release D_12_4_7 or later. This release generates code that is incompatible with code generated by previous versions of the CDF. 1.1. Views in This Release This release includes the following views: * !TARGETS.IMPLEMENTATION.MC68020_OS2000_DEBUGGERS.REV11_SPEC * !TARGETS.IMPLEMENTATION.MC68020_OS2000_DEBUGGERS.REV11_0_3 * !TARGETS.IMPLEMENTATION.MC68020_OS2000_TARGET.REV11_SPEC * !TARGETS.IMPLEMENTATION.MC68020_OS2000_TARGET.CODE11_0_3 * !TARGETS.IMPLEMENTATION.MOTOROLA_68K.REV7_2_SPEC * !TARGETS.IMPLEMENTATION.MOTOROLA_68K.CODE7_2_20 * !TARGETS.IMPLEMENTATION.MOTOROLA_68K_HOST.REV11_5_SPEC * !TARGETS.IMPLEMENTATION.MOTOROLA_68K_HOST.CODE_REV7_13 * !TARGETS.IMPLEMENTATION.MOTOROLA_68K_TRANSFER.REV3_SPEC * !TARGETS.IMPLEMENTATION.MOTOROLA_68K_TRANSFER.REV3_1_1 * !TARGETS.IMPLEMENTATION.OBJECT_CONVERSION.REV7_2_SPEC * !TARGETS.IMPLEMENTATION.OBJECT_CONVERSION.CODE7_2_0 RATIONAL October 1992 1\f Rational Cross-Development Facility: M68020/OS-2000 Release Information * !TARGETS.IMPLEMENTATION.OBJECT_MODULE.REV7_2_SPEC * !TARGETS.IMPLEMENTATION.OBJECT_MODULE.CODE7_2_0 * !TARGETS.IMPLEMENTATION.MC68020_OS2000_RUNTIMES.REV7_2_3 * !TARGETS.IMPLEMENTATION.MOTOROLA_68K_MACHINE.OS2000_11_0_6 1.2. Changed Predefined Units The predefined units themselves have not changed, but their location has. See Section 17, "Code Views and the Predefined Subsystem," for more information. 2. Status of Software Problems in This Release 2.1. Reported Problems Fixed * 0-0251-6 The compiler now deals more efficiently with constant strings. * 1181016-Shei-Lsj Internal_error - float constant out of range. This has been fixed. * 4814499-Etoi-Kjm Pragma Pack on unconstrained arrays of booleans caused code generation error. This has been fixed. * 5307212-Stan-Mv There were problems when declaring subtypes of short integer. This has been fixed. * 721413-Etoi-Mv Internal error during phase: LAB. This has been fixed. * 9883117-Etoi-Mv The code generator caused an error when it encountered certain combinations of multiply nested loops and case statements. This has been fixed. * 9723630-0104-6 Support for pragma Inline in compilation tools. Comp.Make now codes bodies as quickly as possible after the spec. This is not a full solution, but makes the problems much less likely to occur. * 0-0248-9 Combined views required because of inlining and generics. Since shared-code generics are no longer proscribed from spec views, it is now feasible to use spec-load subsystems with the 2 October 1992 RATIONAL\f Rev7_2_2 Release Mc68020_Os2000 target. Inlining subprogram calls through spec views is not supported, but this does not prevent the use of spec-load subsystems. * 9723630-0022-1 Instantiation in limited private task type. Fixed in this release. * 9723630-0120-2 Slow compilation and linking. The Cross_Cg.Linker_Generate_Map switch can now be used to control whether a link map file is generated when a main program is coded. * 2887093-Shei-Jst Middle pass problem with spliced contexts. Fixed in this release. * 5003830-Euse-Lsj Constraint Error is no longer raised when compiling Nosc.Speller. * 1680472-Shei-Lsj Constraint Error in stmt_gen.gen_stmt. This has been fixed. * 4031776-Shei-Jst Array inequality on packed arrays of discretes failed. This has been fixed. * 8518071-Etoi-Mv Evaluation of 3D boolean array failed. This has been fixed. * 3244099-Rati-Pbk A request to zero only the portions of records which are unused because of alignment issues; the loops that are currently generated are expensive. This has been fixed. * 7582583-Etoi-Mv A representation clause was accepted after the default determination of an entity. Since this situation is illegal (according to the LRM), this should have been flagged as an error. Fixed in Delta 3.0. * SPR#900515-3 CDF Code generation error (internal error in WRI) * SPR#900822-16, 900822-24 Deadlock or crash of operating system/ada runtime * SPR#900928-3 Constraint Error when assigning integer * SPR#911003-10 Unexpected Traps RATIONAL October 1992 3\f Rational Cross-Development Facility: M68020/OS-2000 Release Information * SPR#911230-1 Package Command_Line cannot handle long lines * SPR#920130-5 Compiler error in coding stage * SPR#920203-24 Priorities of main programs and tasks * SPR#920205-2 Rational allows pragma shared on records * SPR#920305-1 CDF Linker aborts with errors (Undefined symbol) * SPR#920323-13 Error in dead code elimination * SPR#920505-17, 920522-13 Collection sizes too large - waste of heap memory * SPR#920505-23 Elaboration fails (Array incorrectly initialized) * MFP 74 [ITX] Illegal operand combination for Am.Move * MFP 73 Program_Error in Piwg * MFP 72 runtime problem * MFP 71 [ITX] E-Stack underflow * MFP 69 [WTR] Bad pc relative address * MFP 68 [WTR] Compiler capacity exceeded * MFP 67 [MID] in Decl_Gen.Gen_Decl - Constraint_Error (Null Access) * MFP 66 [MID] Access_Gen.Operations.Unchecked_Deallocation: Formal_Private_Class. * MFP 64 [MID] Attempt to reconstruct object in current unit * MFP 63 [MID] in Stmt_Gen.Gen_Stmt - Constraint_Error (Null Access) 4 October 1992 RATIONAL\f Rev7_2_2 Release * MFP 62 Sedt runtime problem * MFP 60 [MID] in Stmt_Gen.Gen_Stmt - !Lrm.System.Assertion_Error * MFP 59 [CSE] Internal error (Unhandled Exception => Constraint_Error (Array Index) * MFP 58 CDF accepts fixed point in out object, which leads to infinite loop and storage leak * MFP 57 [MID] in Decl_Gen.Gen_Decl - !Lrm.System.Assertion_Error * MFP 55 [MID] in Code_Generation.Generate - Constraint_Error (Null Access) * MFP 54 Incorrect raise of Numeric_Error * MFP 53 [MID] in Decl_Gen.Gen_Decl - Program_Error (prompt executed) * MFP 53a ERROR [LNK] Can't process library ... * MFP 51 Debugger puts wrong indicies for arrays in record * MFP 50 [MID] in Stmt_Gen.Gen_Stmt - !Lrm.System.Assertion_Error * MFP 49 [ITX] Illegal operand combination for Am.Move. * MFP 48 [MID] Context.Enclosing_Generic_Package_Id failed. * MFP 46 [CHK] Not a valid exp_tree node * MFP 45 [ITX] Illegal operand combination for Am.Move. * MFP 44 [CHK] Null pointer. * MFP 43 [MID] Shared instance subprogram lacks Original_Node attribute: 0.DN_VOID. RATIONAL October 1992 5\f Rational Cross-Development Facility: M68020/OS-2000 Release Information * MFP 42 [CHK] Object is down-level addressed. * MFP 41 [MID] Unexpected Diana: Types.Arrays. Reconstruct_Array_Info DN_IN_ID. * MFP 40 [MID] Unexpected Diana: Types.Arrays. Reconstruct_Array_Info DN_IN_ID. * MFP 39 [CHK] dot does not have a basetype * MFP 38 [MID] in Stmt_Gen.Gen_Stmt - !Lrm.System.Assertion_Error [This is really the same as Mfp_35] * MFP 37 [MID] in Code_Generation.Generate - Constraint_Error (Null Access) * MFP 36 [MID] Shared instance subprogram lacks Original_Node attribute: 0.DN_VOID. * MFP 35 Unimplemented feature: Task entry as shared generic actual subprogram. * MFP 34 Unimplemented feature: Shared generic subprogram skins over Unchecked Conversion * MFP 33 [ITX] Illegal address mode for Am.Add. * MFP 32 [MID] Shared instance subprogram lacks Original_Node attribute: 0.DN_VOID. * MFP 31 [MID] Float_Util.Comparison_Operation: bad class. * MFP 30 WARNING [MID] Reconstruction of instantiation base not implemented * MFP 29 [MID] Unimplemented Feature: Tasks in outermost level of shared generic * MFP 28 [MID] Unimplemented Feature: In-out array objects 6 October 1992 RATIONAL\f Rev7_2_2 Release * MFP 27 [MID] Attempt to reconstruct object in current unit * MFP 26 Debugger Problem * MFP 25 [Cse] Constraint_Error (Null Access) At #41b503, #4ff * MFP 23 Bad code for variant record * MFP 22 [ITX] Exception in CODER while coding routine _RECORD ... * MFP 21 [CSE] Constraint_Error (Null Access) at #52A902, #5C6 * MFP 20 Execution-time misuse of base register * MFP 18 [CSE] Constraint_Error (Type Range) at #3A4104, #4BC * MFP 16 Ada runtime traps not handled as exceptions * MFP 15 [ASY] Value for constant block does not fit element size * MFP 14 [ITX] Exception in CODER while coding routine _RECORD ... * MFP 13 [ITX] E-Stack underflow. * MFP 11 [Cse] Constraint_Error (Type Range) At #320902, #C60 * MFP 10 [Itx] Attempt To Restore Spilled Register ... * MFP 9 [Lab] Constraint_Error (Null Access) At #383102, #Be6 * MFP 8 [Evo] Internal Error In Phase Evo At ... * MFP 7 [Mid] Unexpected Diana: Instantiation_Checking.Get_Indices * MFP 6 [Itx] Internal Coder Stack Inconsistency RATIONAL October 1992 7\f Rational Cross-Development Facility: M68020/OS-2000 Release Information * MFP 4 [Mid] In Stmt_Gen.Gen_Stmt - !Lrm.System.Assertion_Error * MFP 1 [Mid] In Dec_Gen.Gen_Decl Assertion_Error At #3aa902, #B09 2.2. Reported Problems Not Fixed in This Release The following problems reported against previous revisions are not fixed in the current release: * SPR#910614-1 Memory allocated in a declare block is not reused in subsequent non-overlapping declare blocks. * SPR#910731-1 Text_Io.Get_Line skips a line of input. * MFP 65 [MID] Unimplemented Feature: Unchecked_Conversion of a formal private type used as a formal subprogram. * MFP 54a The debugger can be invoked correctly, but the directory of the program must be given as part of the name of the program. * MFP 47 Debugger unable to put complex packed object * MFP 24 Unimplemented Feature: Formal fixed point types * MFP 19 Size representation clause failed to compile * MFP 17 [WTR] Lost symbol. when coding task body * MFP 12 [Chk] Object Is Down-Level Addressed. * MFP 5 Representation Clause Permitted After Forcing Occurrence * MFP 3 [Mid] In Decl_Gen.Gen_Decl Assertion_Error At #3abd02, #C9 * MFP 2 Undefined Symbol Referenced During Link Time 2.3. Other Issues Not Dealt With in This Release This section contains suggestions and errors that need further clarification or evaluation. * 9723630-0020-9, 9723630-0067-2, SPR#890627-3, SPR#980731-3 Odd length of modules. Will be considered for a future release. 8 October 1992 RATIONAL\f Rev7_2_2 Release * 4815206-Etoi-Kjm Stack usage for main programs have changed radically. The scheme for determining the size of discriminated records was improved, causing an object which used to be allocated on the heap to be allocated on the stack. It appears from the PRS that the customer has a tool which thinks that this storage is never assigned to, although the generated code does seem to be doing the assignment. This may no longer be a problem. * 0-0215-1 Warning messages "Tree_Check_Error" still remain. Waiting for test case from customer. * 9723630-0105-1 An assignment statement that doesn't work. This is not reproduceable. Waiting for test case from customer. * SPR#881116-1 Minimize run-time library checks of linker command file * SPR#881212-2 Error path starting at /h0 costs memory * SPR#881222-3 Add option "CPU" to Debug.Invoke * SPR#890509-1 Debugger support for tuning heap and stack sizes * SPR#890518-2 Incremental change of pragma main 3. Changes and New Features The following features have been changed or added. Consult your Rational technical representative for more details. 3.1. Improvements in Compiler Operation 3.1.1. Incremental Changes Support for incremental operations has been improved; in particular, the user may now make incremental changes in coded package specifications. As a result, the OS-2000 compiler now supports all incremental operations provided by the R1000's native compiler. RATIONAL October 1992 9\f Rational Cross-Development Facility: M68020/OS-2000 Release Information 3.1.2. Compile-Time Improvements Compile-time when handling floating point literals has been greatly reduced. This is especially visible with large array aggregates consisting of float literals. The Build_Conflict_Graph algorithm now runs 2ver fewer nodes, which improves performance because it is an O(N) algorithm. Several expensive optimizer algorithms were improved to reduce compile times. The assembly-code writer has been replaced with an object-code writer. This eliminates the step of running the assembler, which was previously a bottleneck in the code generation process, and results in a substantial reduction in compile time. If the Cross_Cg.Asm_Listing switch is set to True, a listing file is generated by running the assembly-code writer in addition to the object-code writer. 3.1.3. More Efficient Use of Compiler Streams Invocations of the CDF back ends have always been serialized; that is, each compiler stream can only handle a single compilation at a time. This is still true, but it is now the case for main programs that the serialization lock is relinquished as soon as the linker is invoked. This means that the compilation stream on which a main program is being coded is freed for another compilation as soon as the linker is invoked, rather than after it completes. 3.1.4. Address Clause Support Support for address clauses on objects has been improved: * The address need not be determinable at compile time if the object is an array or record. * Addresses clauses may now be used on arrays and records whose size is not determinable at compile time. The address given in the address clause must be determinable at compile time unless the specified object is an array or record, in which case the address may be dynamic. An address is considered to be determinable at compile time only if it takes the form of a call to System.To_Address with a compile-time determinable argument. An object may not have both pragma Import_Object and an address clause. 10 October 1992 RATIONAL\f Rev7_2_2 Release An address clause with a static address will cause the object to be addressed using absolute addressing. Pragma Import_Object will cause the object to be addressed A5-relative, with the linker resolving the external symbolic name to get the offset. An object having an address clause is NOT subject to default initialization unless this is explicitly requested using pragma Initialize. Pragma Initialize has the following format: pragma INITIALIZE(simple_name); This pragma causes the imported or address-claused object denoted by simple_name to become subject to default initialization. The parameter to pragma Initialize, simple_name, must denote a variable declared earlier in the same declarative part. The variable must be an array or record and must have an address clause or pragma Import_Object applied to it before the occurrence of pragma Initialize. The object must not have an explicit initial value. 3.1.5. <Elab_Order_Listing> file If the Cross_Cg.Elab_Order_Listing switch is set to True, the Os2000 CDF now generates an <Elab_Order_Listing> file when a main program body is coded. This file consists of a list of the fully qualified names of the units in the closure of the main program, listed in the order of their elaboration. The file also includes comments indicating how a unit came to be included in the closure. The format of this file is suitable for use as an indirect file in a naming expression, although names of any units out of code views will not be resolvable. When the main program is demoted to installed, the <Elab_Order_Listing> file is destroyed. 3.1.6. Object-Module Converter The object-module converter is now run automatically as part of coding a main program, generating an <Os2000> file. When a main program is demoted from coded to installed, the <Os2000> file is automatically deleted. Since the <Os2000> file is now automatically generated, the compiler no longer creates a <Exe> file by default. An <Exe> file can be created by setting the Cross_Cg.Produce_Full_Exe switch to true. RATIONAL October 1992 11\f Rational Cross-Development Facility: M68020/OS-2000 Release Information 3.2. Improvements in Generated Code Compiler code generation has been improved in the following areas (among others): * The propagation of constraint information has been improved. This improves the elimination of unnecessary overflow and constraint checks. * To reduce overall register costs, the allocation of common subexpressions has been integrated with that of other objects. * The allocation of volatile registers has been improved. This increases the number of opportunities for stack frame elimination when the debugging level is PARTIAL or NONE. * Object preferencing has been improved, reducing the number of move instructions. * Processing of case statements by the optimizer has been much improved. The optimizer chooses from a number of different techniques to implement each case statement, depending on factors such as its size and density. Different techniques are combined when appropriate, for example to handle a large, generally sparse case statement having small regions of high density. * Constant folding has been expanded. In particular, constant folding of floating point expressions has been improved. 3.3. Shared-Code Generics Users may request that all instantiations of a given generic share the same general code, that all instantiations of a given generic have their own custom code, or that all instantiations by default share the same code but that specified instantiations have their own code. Two new pragmas, Generic_Policy and Instance_Policy, are used to specify the manner in which code is to be generated for generics. 3.3.1. Pragma Generic_Policy pragma GENERIC_POLICY ([GENERIC_UNIT =>] simple_name, [CODE =>] REPLICATED | SHARED) The simple name must denote a generic package or subprogram. The pragma and the declaration of the named generic must occur immediately within the same declarative part or package specification; the generic declaration must occur before the pragma. Only one Generic_Policy pragma may be applied to a generic. 12 October 1992 RATIONAL\f Rev7_2_2 Release The pragma specifies how code should be generated for the generic. If the Shared option is selected, code will be generated for the generic itself; this code will be used for all instantiations of the generic (except as noted below). If the Replicated option is selected, code will not be generated for the generic, but rather for each instantiation of the generic. The replicated code for an instantiation will be smaller and faster than the shared code for the corresponding generic. Demoting the body of a replicated generic to installed causes all instantiations of that generic to also be demoted to installed, whereas demoting the body of a shared generic to installed does not cause demotion of any instantiations (except those that were explicitly made replicated using pragma Instance_Policy). If pragma Generic_Policy is not specified, the compiler decides between Shared and Replicated. At present, the default is always Replicated. Replicated generics are not permitted in spec views (therefore, a generic in a spec view must also have a generic policy pragma specifying that the code is to be shared). The generic policy must be the same for corresponding generics in a load view and spec view. This is currently not enforced, so care should be taken to ensure that all generics which appear in a spec view are implemented as shared-code generics. To simplify the rules for spec/load view compatibility, and because complete control is afforded by the pragmas defined here, pragma Optimize does not play a role in selecting between shared and replicated code. 3.3.2. Pragma Instance_Policy When a policy of shared has been selected for a generic, the user may still wish for certain instantiations to have replicated code for performance reasons. Pragma Instance_Policy allows this to be specified for a particular instantiation. pragma INSTANCE_POLICY ([INSTANTIATION =>] simple_name, [CODE =>] REPLICATED) The simple name must denote an instantiation of a generic (which may be either shared or replicated). The pragma and the declaration of the named instantiation must occur immediately within the same declarative part or package specification; the instantiation must occur before the pragma. If the simple_name names several overloaded subprogram instantiations in the current declarative part or package specification, the pragma applies to all of them. Only one Instance_Policy pragma may be applied to a single instantiation. RATIONAL October 1992 13\f Rational Cross-Development Facility: M68020/OS-2000 Release Information The pragma is ignored if the instantiation refers to a generic in a spec view. 3.3.3. Shared-Code Generic Features The following subset of shared-code generic features is supported in this release: * Formal floating point types * Formal private and limited private types * Formal access types * Formal subprograms * Formal objects of mode IN * Formal arrays * Formal discrete and integer types * Formal scalar objects of mode IN OUT * Formal nondiscriminated record objects of mode IN OUT * Formal array objects of mode IN OUT * Generics (shared or replicated) nested immediately within shared generic packages * Subunits, and subunits of subunits A Generic_Policy pragma with a policy of Shared will be rejected of the generic has any of the following formal parameters: * Formal fixed point types * Formal discriminated private and limited private types * IN OUT discriminated objects * IN OUT formal private or limited private objects Exceptions declared in shared generics are not handled strictly correctly. The Ada language requires that such exceptions be replicated for each instantiation (as happens naturally when a macro-expansion technique is used); at the present time, this does not occur for shared generics. There is a temporary restriction on the use of bodiless library unit generic packages. Use of this construct will result in an error at code generation time. 14 October 1992 RATIONAL\f Rev7_2_2 Release The temporary restriction concerning the declaration of task types and objects in shared generic package specs and bodies has been removed; such declarations will now be correctly processed. 3.3.4. Guidelines for Using Shared Code Generics This section discusses the performance impact of shared code generics and offers some suggestions on when to use them and how to optimize performance when they are used. In general, shared code generics will be less time efficient than replicated generics, but will often be more space efficient as well as permitting the spec of the generic to be placed in a spec view. The code is less efficient because code is generated to handle all the parameters with which a generic can be instantiated, rather than only the code necessary for the specific parameters which are available at the instantiation site (where code for replicated generics is generated). Shared generics must also manage the state of a generic package (i.e., objects declared in the package). This is always less efficient, since it requires an extra level of indirection, and sometimes more than one. In general, shared code generics will be more space efficient because code will only be generated once rather than at each of the instatiation sites, but only if there are several instantiations of the generic (it is always more efficient to use replicated generics if there is only one instantiation). It is also possible that a shared code generic will allocate more heap or stack than the same generic replicated. This occurs when the shared generic needs to allocate space but has less information about how much space to allocate than it would if it were replicated. For instance, suppose a generic has a formal in object which is used as a bound in an array. If the generic is replicated, the compiler may be aware of the value that has been give to the object, in which case it will allocate the array statically. If the generic is shared, however, the array must be allocated dynamically, since the compiler must generate code without knowing the bounds of the array. Whether more space will be used because of a given generic depends heavily on what kinds of generic parameters it takes, so here is a type by type list of some of the effects. * Formal Floating Point Types All simple objects of a formal floating point type will cause more stack space to be allocated, since the compiler allocates enough space to store a double-word value. Arrays of formal floats will be only as long as is needed, but they will be dynamic in all cases, since the size of the element cannot be known at compile time. * Formal Subprograms All formal subprograms are implemented by passing a compiler generated subprogram which does any needed type conversions and then calls the actual subprogram. They have little effect on the stack or heap used, although they do cause an extra RATIONAL October 1992 15\f Rational Cross-Development Facility: M68020/OS-2000 Release Information stack frame to be allocated. * Formal Access Types No extra space is allocated for an object of a formal access type, but extra master layers may be created in some cases where we are unable to tell whether the access type is an access to a task type. * Formal Objects of Mode IN Formal IN objects have no significant effect on the amount of space allocated. * Formal Arrays Formal arrays cause little difference in the amount of space allocated on either heap or stack. * Formal Private Types Formal private types can incur much more overhead with shared code generics than with replicated generics. This is because the compiler must now allow for the possiblity of any type. In general, objects of a formal private type will be allocated a single word on the stack. If the actual type is a simple type (i.e. a scalar), the word will contain the value of object. If the actual type is more complex, the word will point to another object allocated dynamically which will contain the actual data, or possibly more pointers to other dynamic objects. With this scheme, little more space is allocated that is necessary, but space which would have been on the stack in a replicated generic will now be allocated dynamically, sometimes on the heap. Also, since pointers must be dereferenced (in some cases a chain of pointers must be followed), operations on formal private types will be slower than in replicated generics. In many cases, runtime calls are made to perform operations (e.g., equality tests, assignment, function return of formal privates, etc). * Formal Discrete and Integer Types The only effect of formal discrete and integer types is that some arrays which would be allocated statically will become dynamic. * Formal Scalars of Mode IN OUT In out objects cause little change in the amount of space allocated. With all types an effort has been made to ensure that shared code generics behave in the same way as the same generic does when replicated, including raising the same errors at the same locations. The only exception to this is that in some cases with formal floating point types Constraint_Error will be raised where Numeric_Error was previously raised. 16 October 1992 RATIONAL\f Rev7_2_2 Release 3.4. Code Views and the Predefined Subsystem Prior to this release, code views could not be transferred between machines because the link names of the predefined units (e.g. system) were not the same on different machines. This has been corrected by placing the predefined units in a subsystem view called !Targets.Predefined. As a result, new models are required which point to the new predefined units. This new organization permits worlds which were compiled with previous compilers to coexist on the same machine with worlds compiled with the new compiler. Note, however, that modules produced by one version of the compiler cannot be linked with modules produced by another version. Existing subsystem views which are to be compiled with the new compiler must have their models replaced. The links in other worlds must be changed to point to the new predefined units. A tool is provided with this release which will demote units in existing worlds and update these worlds for the Rev7_2 compiler - see the installation notes for more details. 3.5. Other New Features 3.5.1. Pragma Assert pragma ASSERT([Predicate =>] boolean_expression [, [Class =>] integer_expression]); When the pragma is encountered, boolean_expression is evaluated. If the resulting value is FALSE, the exception System.Assertion_Error is raised; otherwise, no further action is taken. If System.Assertion_Error is not defined, Program_Error is raised instead. The integer_expression is ignored; for the moment, it is allowed only for compatibility with the R1000 Ada code generator. This pragma may appear wherever a statement or declaration would be legal. 3.5.2. Pragma Collection_Policy The pragma Collection_Policy can be used to customize storage management. The complete syntax for this pragma is: pragma COLLECTION_POLICY (Access_Type => access_type, Initial_Size => integer_expression [, Extensible => boolean_expression] [, Extension_Size => integer_expression]); RATIONAL October 1992 17\f Rational Cross-Development Facility: M68020/OS-2000 Release Information This pragma must appear in the same declarative region as the access type that it applies to, and the access type's full type declaration must occur before the pragma. This implies that, in order to use a private type for the Access_Type argument, the pragma must be given in the private part after the complete access-type declaration. At most one such pragma is allowed for a given access type. The Collection_Policy pragma is ignored when: * a `Storage_Size clause is given for the access type; in this case, the Storage_Size takes precedence. This is because a statement of the form: for X'Storage_Size use size; is equivalent to: pragma Collection_Policy (Access_Type => X, Initial_Size => size, Extensible => False); * the pragma follows a forcing occurrence of the access type (LRM 13.1.6). Access_Type and Initial_Size are required. Extensible and Extension_Size are optional. All arguments must be specified using named association, as shown in all examples in this pragma's discussion. If Extensible is False, the collection is nonextensible. If Extensible is True, which is the default if not specified, then the collection will be extended by a certain number of storage units when it fills up, if it is possible to do so. The number of storage units in the extension size is chosen by the runtime system unless the Extension_Size is specified. Extension_Size allows the user to specify the number of storage units to be allocated whenever the collection needs to be extended. This parameter is ignored if Extensible is False. Initial_Size gives the size in storage units of the collection created at the point of the type declaration. If no pragma Collection_Policy is used, the initial size of the collection is determined by the runtime system. A nonpositive Initial_Value on a nonextensible collection raises the Storage_Error exception in the situations described below. Currently, for X'Storage_Size use 0; means that no collection should be created for X. The same effect is achieved with pragma Collection_Policy by giving: 18 October 1992 RATIONAL\f Rev7_2_2 Release pragma Collection_Policy (Access_Type => X, Initial_Size => 0, Extensible => False); In both of the above cases, an attempt to use an allocator will result in a Storage_Error exception. However, you could also say: pragma Collection_Policy (Access_Type => x, Initial_Size => 0, Extensible => True, Extension_Size => 100); which means "do not create a collection until an allocation is performed." When the first allocator is executed, the collection is created with the extension size. 3.5.3. New Attribute: 'Homogeneous Applicable to an access type; yields a Boolean value. The value returned is False if the designated type given in the access type declaration is an unconstrained array type or an unconstrained discriminated record type, and True otherwise. If the attribute is True, then all objects in the collection must have the same size. The converse, however, is not true. Note that the attribute is a property of the type, not of the subtype. Thus, for any access type T, T'Homogeneous = T'Base'Homogeneous. For example: type T1 is access String; type T2 is new T1 (1 .. 10); -- T2'Homogeneous = False At the implementation level, the attribute indicates whether or not constraint information needs to be stored with allocated objects. 3.5.4. Object Writer The compiler now generates an object file directly. Previously, the compiler generated an assembly file and invoked the assembler to obtain an object file. This change results in code generation times that are approximately 25% faster. As a consequence, the Cross_Cg.Asm_Source switch is now obsolete. To obtain an assembly listing, use the Cross_Cg.Listing switch. RATIONAL October 1992 19\f Rational Cross-Development Facility: M68020/OS-2000 Release Information 3.5.5. Elaboration Checks The CDF now supports the Suppress_Elaboration_Objects switch, which eliminates all elaboration objects and the code to test and set them. When this new switch is set to true, the compiler behaves as if the user had inserted: pragma Suppress (Elaboration_Check, On => Snaggle); for each subprogram 'snaggle' in each compilation unit in the library. This significantly reduces the amount of initialization code in Ada units. Because the prelinker guarantees that spec/load subsystems are elaborated in layers, the compiler never generates elaboration checks on cross-subsystem calls to subprograms that are imported via a spec view. Due to this, it is not necessary that the Suppress_Elaboration_Objects switch have the same value in corresponding spec and load views. Elaboration objects for generics are NOT affected by the Suppress_Elaboration_Objects switch. 20 October 1992 RATIONAL\f Rev7_2_2 Release Contents 1. Overview 1 1.1. Views in This Release 1 1.2. Changed Predefined Units 2 2. Status of Software Problems in This Release 2 2.1. Reported Problems Fixed 2 2.2. Reported Problems Not Fixed in This Release 8 2.3. Other Issues Not Dealt With in This Release 8 3. Changes and New Features 9 3.1. Improvements in Compiler Operation 9 3.1.1. Incremental Changes 9 3.1.2. Compile-Time Improvements 10 3.1.3. More Efficient Use of Compiler Streams 10 3.1.4. Address Clause Support 10 3.1.5. <Elab_Order_Listing> file 11 3.1.6. Object-Module Converter 11 3.2. Improvements in Generated Code 12 3.3. Shared-Code Generics 12 3.3.1. Pragma Generic_Policy 12 3.3.2. Pragma Instance_Policy 13 3.3.3. Shared-Code Generic Features 14 3.3.4. Guidelines for Using Shared Code Generics 15 3.4. Code Views and the Predefined Subsystem 17 3.5. Other New Features 17 3.5.1. Pragma Assert 17 3.5.2. Pragma Collection_Policy 17 3.5.3. New Attribute: 'Homogeneous 19 3.5.4. Object Writer 19 3.5.5. Elaboration Checks 20 RATIONAL October 1992 iii\f Rational Cross-Development Facility: M68020/OS-2000 Release Information iv October 1992 RATIONAL\f