This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] AI-326


Tested on i686-linux, committed on mainline.

Ada 2005 (AI-50217, AI-326): Check wrong dereference of incomplete.
In addition, in case of explicit dereference of incomplete types,
use the non-limited view if available.
--
The whole description of this new feature is available
at http://www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00326.TXT
--
Examples of the catched error:
--
  limited with P;
  package Pkg is
    type Acc is access P.T;
    A : Acc;
  end Pkg;
  with Pkg; use Pkg;
  procedure Example is
  begin
     A.all := ... ;  -- ERROR
  end Example;
--
  limited with Pkg;
  package P is
     type Acc is access Pkg.T;
     X : Acc;
     S : Integer := X.all'Size;                    -- ERROR
  end P;
--
   type T is tagged;
   type Acc is access all T;
   X : Acc;
   S : constant Integer := X.all'Size;             -- ERROR
   procedure Q (Obj : Integer := X.all'Alignment); -- ERROR
--
  type T1 (<>) is tagged;
  procedure P (X : access T1); -- ERROR
  procedure P (X : T1);        -- ERROR
  type T2 is tagged;
  function F (X : Boolean) return T2; -- ERROR
  type Acc_1 is access function (X : T2) return T2; -- ERROR
  type Acc_2 is access
    protected function (X : Float) return T2;       -- ERROR

2005-07-07  Javier Miranda  <miranda@adacore.com>

	* freeze.adb (Freeze_Entity): Check wrong uses of tag incomplete types.

	* par-ch3.adb (P_Type_Declaration): Give support to tagged incomplete
	types:
	--
	  type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED];
	--

	* sem_attr.adb (Check_Not_Incomplete_Type): Additional checks for wrong
	use of tag incomplete types.

	* sem_ch3.adb (Analyze_Incomplete_Type): Add mininum decoration to
	give support to tagged incomplete types.

	* sem_ch5.adb (Analyze_Case_Statement): In generated code, if the
	expression is a discriminant reference and its type is private, as can
	happen within a stream operation for a mutable record, use the full
	view of the type to resolve the case alternatives.
	(Analyze_Assignment): Check wrong dereference of incomplete types.

	* sem_ch6.adb (Process_Formals): Allow the use of tagged incomplete
	types.

	* sem_res.adb (Resolve_Explicit_Dereference): Allow the use of tagged
	incomplete types.

	* sinfo.adb (Taggged_Present/Set_Taggged_Present): Applicable to
	N_Incomplete_Type_Declaration nodes.

	* sinfo.ads (N_Incomplete_Type_Declaration): Addition of attribute
	Tag_Present to give support to tagged incomplete types:
	--
	  type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED];
	--

Attachment: difs.5
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]