diff options
author | Samuel Tardieu <sam@rfc1149.net> | 2008-04-14 12:10:16 +0000 |
---|---|---|
committer | Samuel Tardieu <sam@gcc.gnu.org> | 2008-04-14 12:10:16 +0000 |
commit | cb572b755dcc64f8e5581f8734e5b1034381d41b (patch) | |
tree | d178755975cb10ade9ad878bce1b7c7f83670aac /gcc | |
parent | 17972da719db3ced8d90b01beed66b597f07f806 (diff) | |
download | gcc-cb572b755dcc64f8e5581f8734e5b1034381d41b.zip gcc-cb572b755dcc64f8e5581f8734e5b1034381d41b.tar.gz gcc-cb572b755dcc64f8e5581f8734e5b1034381d41b.tar.bz2 |
re PR ada/15915 (Illegal program not detected, RM 13.11(15))
gcc/ada/
PR ada/15915
* sem_util.ads, sem_util.adb (Denotes_Variable): New function.
* sem_ch12.adb (Instantiate_Object): Use it.
* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Ensure that
storage pool denotes a variable as per RM 13.11(15).
gcc/testsuite/
PR ada/15915
* gnat.dg/specs/storage.ads: New.
From-SVN: r134261
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/ada/sem_ch12.adb | 2 | ||||
-rw-r--r-- | gcc/ada/sem_ch13.adb | 5 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 9 | ||||
-rw-r--r-- | gcc/ada/sem_util.ads | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/specs/storage.ads | 10 |
7 files changed, 41 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 848beee..9905b15 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,13 @@ 2008-04-14 Samuel Tardieu <sam@rfc1149.net> + PR ada/15915 + * sem_util.ads, sem_util.adb (Denotes_Variable): New function. + * sem_ch12.adb (Instantiate_Object): Use it. + * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Ensure that + storage pool denotes a variable as per RM 13.11(15). + +2008-04-14 Samuel Tardieu <sam@rfc1149.net> + * sem_util.ads, sem_util.adb (In_Subprogram): New function. * sem_attr.adb (Analyze_Attribute, Attribute_Old case): Use it. diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 8728bfe..e7755c4 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -8213,7 +8213,7 @@ package body Sem_Ch12 is Resolve (Actual, Ftyp); - if not Is_Variable (Actual) or else Paren_Count (Actual) > 0 then + if not Denotes_Variable (Actual) then Error_Msg_NE ("actual for& must be a variable", Actual, Formal_Id); diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 93d6627..f72ffff 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -1481,6 +1481,11 @@ package body Sem_Ch13 is Analyze_And_Resolve (Expr, Class_Wide_Type (RTE (RE_Root_Storage_Pool))); + if not Denotes_Variable (Expr) then + Error_Msg_N ("storage pool must be a variable", Expr); + return; + end if; + if Nkind (Expr) = N_Type_Conversion then T := Etype (Expression (Expr)); else diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 3d5aa77..e7a6658 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -2143,6 +2143,15 @@ package body Sem_Util is end Denotes_Discriminant; + ---------------------- + -- Denotes_Variable -- + ---------------------- + + function Denotes_Variable (N : Node_Id) return Boolean is + begin + return Is_Variable (N) and then Paren_Count (N) = 0; + end Denotes_Variable; + ----------------------------- -- Depends_On_Discriminant -- ----------------------------- diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index d8c0b17..291e230 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -245,6 +245,9 @@ package Sem_Util is -- components of protected types, and constraint checks on entry -- families constrained by discriminants. + function Denotes_Variable (N : Node_Id) return Boolean; + -- Returns True if node N denotes a single variable without parentheses. + function Depends_On_Discriminant (N : Node_Id) return Boolean; -- Returns True if N denotes a discriminant or if N is a range, a subtype -- indication or a scalar subtype where one of the bounds is a diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 97d0dc7..a129d15 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2008-04-14 Samuel Tardieu <sam@rfc1149.net> + PR ada/15915 + * gnat.dg/specs/storage.ads: New. + +2008-04-14 Samuel Tardieu <sam@rfc1149.net> + * gnat.dg/deep_old.adb: New. 2008-04-14 Eric Botcazou <ebotcazou@adacore.com> diff --git a/gcc/testsuite/gnat.dg/specs/storage.ads b/gcc/testsuite/gnat.dg/specs/storage.ads new file mode 100644 index 0000000..85a91d0 --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/storage.ads @@ -0,0 +1,10 @@ +-- { dg-do compile } +with System.Pool_Global; +package Storage is + x1: System.Pool_Global.Unbounded_No_Reclaim_Pool; + type T1 is access integer; + for T1'Storage_Pool use (x1); -- { dg-error "denote a variable" } + type T2 is access Integer; + for T2'Storage_Pool use x1; +end Storage; + |