diff options
author | Bob Duff <duff@adacore.com> | 2006-10-31 18:58:48 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2006-10-31 18:58:48 +0100 |
commit | 88b32fc3a7728aac518bb52c53cb7596c49b720c (patch) | |
tree | b27b24d9bf1dfcca04c420002e7632e08960845e /gcc/ada/sem_ch3.ads | |
parent | bae7876b4d3c0e1c5532b00f744a86d1f31d403e (diff) | |
download | gcc-88b32fc3a7728aac518bb52c53cb7596c49b720c.zip gcc-88b32fc3a7728aac518bb52c53cb7596c49b720c.tar.gz gcc-88b32fc3a7728aac518bb52c53cb7596c49b720c.tar.bz2 |
g-awk.adb (Default_Session, [...]): Compile this file in Ada 95 mode, because it violates the new rules for AI-318.
2006-10-31 Bob Duff <duff@adacore.com>
Robert Dewar <dewar@adacore.com>
Ed Schonberg <schonberg@adacore.com>
* g-awk.adb (Default_Session, Current_Session): Compile this file in
Ada 95 mode, because it violates the new rules for AI-318.
* g-awk.ads: Use overloaded subprograms in every case where we used to
have a default of Current_Session. This makes the code closer to be
correct for both Ada 95 and 2005.
* g-moreex.adb (Occurrence): Turn off warnings for illegal-in-Ada-2005
code, relying on the fact that the compiler generates a warning
instead of an error in -gnatg mode.
* lib-xref.ads (Xref_Entity_Letters): Add entry for new
E_Return_Statement entity kind.
Add an entry for E_Incomplete_Subtype in Xref_Entity_Letters.
* par.adb (P_Interface_Type_Definition): Addition of one formal to
report an error if the reserved word abstract has been previously found.
(SS_End_Type): Add E_Return for new extended_return_statement syntax.
* par-ch4.adb (P_Aggregate_Or_Paren_Expr): Improve message for
parenthesized range attribute usage
(P_Expression_No_Right_Paren): Add missing comment about error recovery.
* par-ch6.adb (P_Return_Object_Declaration): AI-318: Allow "constant"
in the syntax for extended_return_statement. This is not in the latest
RM, but the ARG is expected to issue an AI allowing this.
(P_Return_Subtype_Indication,P_Return_Subtype_Indication): Remove
N_Return_Object_Declaration. We now use N_Object_Declaration instead.
(P_Return_Object_Declaration, P_Return_Subtype_Indication,
P_Return_Statement): Parse the new syntax for extended_return_statement.
* par-endh.adb (Check_End, Output_End_Deleted, Output_End_Expected,
Output_End_Missing): Add error-recovery code for the new
extended_return_statement syntax; that is, the new E_Return entry on
the scope stack.
* s-auxdec-vms_64.ads, s-auxdec.ads (AST_Handler): Change type from
limited to nonlimited, because otherwise we violate the new Ada 2005
rules about returning limited types in function Create_AST_Handler in
s-asthan.adb.
* sem.adb (Analyze): Add cases for new node kinds
N_Extended_Return_Statement and N_Return_Object_Declaration.
* sem_aggr.adb (Aggregate_Constraint_Checks): Verify that component
type is in the same category as type of context before applying check,
to prevent anomalies in instantiations.
(Resolve_Aggregate): Remove test for limited components in aggregates.
It's unnecessary in Ada 95, because if it has limited components, then
it must be limited. It's wrong in Ada 2005, because limited aggregates
are now allowed.
(Resolve_Record_Aggregate): Move check for limited types later, because
OK_For_Limited_Init requires its argument to have been resolved.
(Get_Value): When copying the component default expression for a
defaulted association in an aggregate, use the sloc of the aggregate
and not that of the original expression, to prevent spurious
elaboration errors, when the expression includes function calls.
(Check_Non_Limited_Type): Correct code for AI-287, extension aggregates
were missing. We also didn't handle qualified expressions. Now also
allow function calls. Use new common routine OK_For_Limited_Init.
(Resolve_Extension_Aggregate): Minor fix to bad error message (started
with space can upper case letter).
* sem_ch3.ads, sem_ch3.adb (Create_Constrained_Components): Set
Has_Static_Discriminants flag
(Record_Type_Declaration): Diagnose an attempt to declare an interface
type with discriminants.
(Process_Range_Expr_In_Decl): Do validity checks on range
(Build_Discriminant_Constraints): Use updated form of
Denotes_Discriminant.
(Process_Subtype): If the subtype is a private subtype whose full view
is a concurrent subtype, introduce an itype reference to prevent scope
anomalies in gigi.
(Build_Derived_Record_Type, Collect_Interface_Primitives,
Record_Type_Declaration): The functionality of the subprograms
Collect_Abstract_Interfaces and Collect_All_Abstract_Interfaces
is now performed by a single routine.
(Build_Derived_Record_Type): If the type definition includes an explicit
indication of limitedness, then the type must be marked as limited here
to ensure that any access discriminants will not be treated as having
a local anonymous access type.
(Check_Abstract_Overriding): Issue a detailed error message when an
abstract subprogram was not overridden due to incorrect mode of its
first parameter.
(Analyze_Private_Extension_Declaration): Add support for the analysis of
synchronized private extension declarations. Verify that the ancestor is
a limited or synchronized interface or in the generic case, the ancestor
is a tagged limited type or synchronized interface and all progenitors
are either limited or synchronized interfaces.
Derived_Type_Declaration): Check for presence of private extension when
dealing with synchronized formal derived types.
Process_Full_View): Enchance the check done on the usage of "limited" by
testing whether the private view is synchronized.
Verify that a synchronized private view is completed by a protected or
task type.
(OK_For_Limited_Init_In_05): New function.
(Analyze_Object_Declaration): Move check for limited types later,
because OK_For_Limited_Init requires its argument to have been resolved.
Add -gnatd.l --Use Ada 95 semantics for limited function returns,
in order to alleviate the upward compatibility introduced by AI-318.
(Constrain_Corresponding_Record): If the constraint is for a component
subtype, mark the itype as frozen, to avoid out-of-scope references to
discriminants in the back-end.
(Collect_Implemented_Interfaces): Protect the recursive algorithm of
this subprogram against wrong sources.
(Get_Discr_Value, Is_Discriminant): Handle properly references to a
discriminant of limited type completed with a protected type, when the
discriminant is used to constrain a private component of the type, and
expansion is disabled.
(Find_Type_Of_Object): Do not treat a return subtype that is an
anonymous subtype as a local_anonymous_type, because its accessibility
level is the return type of the enclosing function.
(Check_Initialization): In -gnatg mode, turn the error "cannot
initialize entities of limited type" into a warning.
(OK_For_Limited_Init): Return true for generated nodes, since it
sometimes violates the legality rules.
(Make_Incomplete_Declaration): If the type for which an incomplete
declaration is created happens to be the currently visible entity,
preserve the homonym chain when removing it from visibility.
(Check_Conventions): Add support for Ada 2005 (AI-430): Conventions of
inherited subprograms.
(Access_Definition): If this is an access to function that is the return
type of an access_to_function definition, context is a type declaration
and the scope of the anonymous type is the current one.
(Analyze_Subtype_Declaration): Add the defining identifier of a regular
incomplete subtype to the set of private dependents of the original
incomplete type.
(Constrain_Discriminated_Type): Emit an error message whenever an
incomplete subtype is being constrained.
(Process_Incomplete_Dependents): Transform an incomplete subtype into a
corresponding subtype of the full view of the original incomplete type.
(Check_Incomplete): Properly detect invalid usage of incomplete types
and subtypes.
From-SVN: r118273
Diffstat (limited to 'gcc/ada/sem_ch3.ads')
-rw-r--r-- | gcc/ada/sem_ch3.ads | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/gcc/ada/sem_ch3.ads b/gcc/ada/sem_ch3.ads index d4d3799..ebdb209 100644 --- a/gcc/ada/sem_ch3.ads +++ b/gcc/ada/sem_ch3.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2006, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,23 +28,30 @@ with Nlists; use Nlists; with Types; use Types; package Sem_Ch3 is - procedure Analyze_Component_Declaration (N : Node_Id); - procedure Analyze_Incomplete_Type_Decl (N : Node_Id); - procedure Analyze_Itype_Reference (N : Node_Id); - procedure Analyze_Number_Declaration (N : Node_Id); - procedure Analyze_Object_Declaration (N : Node_Id); - procedure Analyze_Others_Choice (N : Node_Id); - procedure Analyze_Private_Extension_Declaration (N : Node_Id); - procedure Analyze_Subtype_Declaration (N : Node_Id); - procedure Analyze_Subtype_Indication (N : Node_Id); - procedure Analyze_Type_Declaration (N : Node_Id); - procedure Analyze_Variant_Part (N : Node_Id); + procedure Analyze_Component_Declaration (N : Node_Id); + procedure Analyze_Incomplete_Type_Decl (N : Node_Id); + procedure Analyze_Itype_Reference (N : Node_Id); + procedure Analyze_Number_Declaration (N : Node_Id); + procedure Analyze_Object_Declaration (N : Node_Id); + procedure Analyze_Others_Choice (N : Node_Id); + procedure Analyze_Private_Extension_Declaration (N : Node_Id); + procedure Analyze_Subtype_Indication (N : Node_Id); + procedure Analyze_Type_Declaration (N : Node_Id); + procedure Analyze_Variant_Part (N : Node_Id); + + procedure Analyze_Subtype_Declaration + (N : Node_Id; + Skip : Boolean := False); + -- Called to analyze a subtype declaration. The parameter Skip is used for + -- Ada 2005 (AI-412). We set to True in order to avoid reentering the + -- defining identifier of N when analyzing a rewritten incomplete subtype + -- declaration. function Access_Definition (Related_Nod : Node_Id; N : Node_Id) return Entity_Id; -- An access definition defines a general access type for a formal - -- parameter. The procedure is called when processing formals, when + -- parameter. The procedure is called when processing formals, when -- the current scope is the subprogram. The Implicit type is attached -- to the Related_Nod put into the enclosing scope, so that the only -- entities defined in the spec are the formals themselves. @@ -100,15 +107,6 @@ package Sem_Ch3 is -- rather than on the declarations that require completion in the package -- declaration. - procedure Collect_Interfaces - (N : Node_Id; - Derived_Type : Entity_Id); - -- Ada 2005 (AI-251): Subsidiary procedure to Build_Derived_Record_Type - -- and Analyze_Formal_Interface_Type. - -- Collect the list of interfaces that are not already implemented by the - -- ancestors. This is the list of interfaces for which we must provide - -- additional tag components. - procedure Derive_Subprogram (New_Subp : in out Entity_Id; Parent_Subp : Entity_Id; @@ -125,8 +123,7 @@ package Sem_Ch3 is procedure Derive_Subprograms (Parent_Type : Entity_Id; Derived_Type : Entity_Id; - Generic_Actual : Entity_Id := Empty; - No_Predefined_Prims : Boolean := False); + Generic_Actual : Entity_Id := Empty); -- To complete type derivation, collect/retrieve the primitive operations -- of the parent type, and replace the subsidiary subtypes with the derived -- type, to build the specs of the inherited ops. For generic actuals, the @@ -183,10 +180,25 @@ package Sem_Ch3 is procedure Make_Class_Wide_Type (T : Entity_Id); -- A Class_Wide_Type is created for each tagged type definition. The - -- attributes of a class wide type are inherited from those of the type - -- T. If T is introduced by a private declaration, the corresponding - -- class wide type is created at the same time, and therefore there is - -- a private and a full declaration for the class wide type type as well. + -- attributes of a class wide type are inherited from those of the type T. + -- If T is introduced by a private declaration, the corresponding class + -- wide type is created at the same time, and therefore there is a private + -- and a full declaration for the class wide type type as well. + + function OK_For_Limited_Init_In_05 (Exp : Node_Id) return Boolean; + -- Presuming Exp is an expression of an inherently limited type, returns + -- True if the expression is allowed in an initialization context by the + -- rules of Ada 2005. We use the rule in RM-7.5(2.1/2), "...it is an + -- aggregate, a function_call, or a parenthesized expression or + -- qualified_expression whose operand is permitted...". Note that in Ada + -- 95 mode, we sometimes wish to give warnings based on whether the + -- program _would_ be legal in Ada 2005. Note that Exp must already have + -- been resolved, so we can know whether it's a function call (as opposed + -- to an indexed component, for example). + + function OK_For_Limited_Init (Exp : Node_Id) return Boolean; + -- Always False in Ada 95 mode. Equivalent to OK_For_Limited_Init_In_05 in + -- Ada 2005 mode. procedure Process_Full_View (N : Node_Id; Full_T, Priv_T : Entity_Id); -- Process some semantic actions when the full view of a private type is @@ -213,8 +225,8 @@ package Sem_Ch3 is -- pointer of R so that the types get properly frozen. The Check_List -- parameter is used when the subprogram is called from -- Build_Record_Init_Proc and is used to return a set of constraint - -- checking statements generated by the Checks package. R_Check_Off is - -- set to True when the call to Range_Check is to be skipped. + -- checking statements generated by the Checks package. R_Check_Off is set + -- to True when the call to Range_Check is to be skipped. function Process_Subtype (S : Node_Id; |