DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ M T

⟦0c2371ad1⟧ TextFile

    Length: 47012 (0xb7a4)
    Types: TextFile
    Names: »MC68020_OS2000_RELEASE7_2_2_LPT«

Derivation

└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
    └─ ⟦77aa8350c⟧ »DATA« 
        └─⟦0e555866a⟧ 
            └─⟦this⟧ 

TextFile




        




















                     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