diff options
author | Hristian Kirtchev <kirtchev@adacore.com> | 2016-04-18 10:27:19 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2016-04-18 12:27:19 +0200 |
commit | 070d862dde98557eab8c9ecb0adb4ca504503777 (patch) | |
tree | 2967e9cd16a2787a48b40745c952d20453470d19 /gcc/ada | |
parent | 933aa0ac81ee62b104969294ce6ab117e1602968 (diff) | |
download | gcc-070d862dde98557eab8c9ecb0adb4ca504503777.zip gcc-070d862dde98557eab8c9ecb0adb4ca504503777.tar.gz gcc-070d862dde98557eab8c9ecb0adb4ca504503777.tar.bz2 |
sem_ch3.adb (Analyze_Object_Declaration): Do not consider internally generated expressions when...
2016-04-18 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch3.adb (Analyze_Object_Declaration): Do not consider
internally generated expressions when trying to determine whether
a formal parameter of a tagged type subject to Extensions_Visible
False is used to initialize an object.
* sem_ch4.adb (Analyze_Type_Conversion): Do not consider
internally generated expressions when trying to determine whether
a formal parameter of a tagged type subject to Extensions_Visible
False is used in a type conversion.
From-SVN: r235117
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.adb | 8 | ||||
-rw-r--r-- | gcc/ada/sem_ch4.adb | 10 |
3 files changed, 24 insertions, 5 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index fd8d79a..1183396 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,16 @@ 2016-04-18 Hristian Kirtchev <kirtchev@adacore.com> + * sem_ch3.adb (Analyze_Object_Declaration): Do not consider + internally generated expressions when trying to determine whether + a formal parameter of a tagged type subject to Extensions_Visible + False is used to initialize an object. + * sem_ch4.adb (Analyze_Type_Conversion): Do not consider + internally generated expressions when trying to determine whether + a formal parameter of a tagged type subject to Extensions_Visible + False is used in a type conversion. + +2016-04-18 Hristian Kirtchev <kirtchev@adacore.com> + * sem_res.adb (Is_Protected_Operation_Call): Add guards to account for a non-decorated selected component. diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index d401bd1..56e8a74 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -3776,9 +3776,13 @@ package body Sem_Ch3 is -- A formal parameter of a specific tagged type whose related -- subprogram is subject to pragma Extensions_Visible with value -- "False" cannot be implicitly converted to a class-wide type by - -- means of an initialization expression (SPARK RM 6.1.7(3)). + -- means of an initialization expression (SPARK RM 6.1.7(3)). Do + -- not consider internally generated expressions. - if Is_Class_Wide_Type (T) and then Is_EVF_Expression (E) then + if Is_Class_Wide_Type (T) + and then Comes_From_Source (E) + and then Is_EVF_Expression (E) + then Error_Msg_N ("formal parameter with Extensions_Visible False cannot be " & "implicitly converted to class-wide type", E); diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index d84ef66..bdcf0e1 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -5158,9 +5158,13 @@ package body Sem_Ch4 is -- A formal parameter of a specific tagged type whose related subprogram -- is subject to pragma Extensions_Visible with value "False" cannot - -- appear in a class-wide conversion (SPARK RM 6.1.7(3)). + -- appear in a class-wide conversion (SPARK RM 6.1.7(3)). Do not check + -- internally generated expressions. - if Is_Class_Wide_Type (Typ) and then Is_EVF_Expression (Expr) then + if Is_Class_Wide_Type (Typ) + and then Comes_From_Source (Expr) + and then Is_EVF_Expression (Expr) + then Error_Msg_N ("formal parameter with Extensions_Visible False cannot be " & "converted to class-wide type", Expr); @@ -6602,7 +6606,7 @@ package body Sem_Ch4 is -- Boolean, then we know that the other operand cannot resolve to -- Boolean (since we got no interpretations), but in that case we -- pretty much know that the other operand should be Boolean, so - -- resolve it that way (generating an error) + -- resolve it that way (generating an error). elsif Nkind_In (N, N_Op_And, N_Op_Or, N_Op_Xor) then if Etype (L) = Standard_Boolean then |