aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorHristian Kirtchev <kirtchev@adacore.com>2016-04-18 10:27:19 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2016-04-18 12:27:19 +0200
commit070d862dde98557eab8c9ecb0adb4ca504503777 (patch)
tree2967e9cd16a2787a48b40745c952d20453470d19 /gcc/ada
parent933aa0ac81ee62b104969294ce6ab117e1602968 (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--gcc/ada/sem_ch3.adb8
-rw-r--r--gcc/ada/sem_ch4.adb10
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