summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2015-10-26 10:49:55 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2015-10-26 10:49:55 +0000
commitff9285665e5b7b7ee5c7a3be5425c7005684ed16 (patch)
treeca2a2a68b342c6db8cfee825611815cc8efaf51e
parent12b29cb8ce45abc2b858591ee5d0d46f2776be69 (diff)
downloadgcc-ff9285665e5b7b7ee5c7a3be5425c7005684ed16.tar.gz
2015-10-26 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (Find_Corresponding_Spec): Reject a subprogram body whose signature is type conformant with a previous expression function. 2015-10-26 Bob Duff <duff@adacore.com> * treepr.adb: Code clean up. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@229326 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ada/ChangeLog10
-rw-r--r--gcc/ada/sem_ch6.adb13
-rw-r--r--gcc/ada/treepr.adb8
3 files changed, 25 insertions, 6 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 5dff6de4fca..442dafe0853 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,13 @@
+2015-10-26 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch6.adb (Find_Corresponding_Spec): Reject a subprogram
+ body whose signature is type conformant with a previous expression
+ function.
+
+2015-10-26 Bob Duff <duff@adacore.com>
+
+ * treepr.adb: Code clean up.
+
2015-10-26 Eric Botcazou <ebotcazou@adacore.com>
* freeze.adb (Check_Component_Storage_Order): Skip a record
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 0f2615861f8..495df3d653e 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -7310,6 +7310,19 @@ package body Sem_Ch6 is
then
return E;
+ -- Expression functions can be completions, but cannot be
+ -- completed by an explicit body.
+
+ elsif Comes_From_Source (E)
+ and then Comes_From_Source (N)
+ and then Nkind (N) = N_Subprogram_Body
+ and then Nkind (Original_Node (Unit_Declaration_Node (E))) =
+ N_Expression_Function
+ then
+ Error_Msg_Sloc := Sloc (E);
+ Error_Msg_N ("body conflicts with expression function#", N);
+ return Empty;
+
elsif not Has_Completion (E) then
if Nkind (N) /= N_Subprogram_Body_Stub then
Set_Corresponding_Spec (N, E);
diff --git a/gcc/ada/treepr.adb b/gcc/ada/treepr.adb
index d11a12bbe9c..a032416587b 100644
--- a/gcc/ada/treepr.adb
+++ b/gcc/ada/treepr.adb
@@ -1565,13 +1565,9 @@ package body Treepr is
Print_Elist_Ref (E);
Print_Eol;
- M := First_Elmt (E);
-
- if No (M) then
- Print_Str ("<empty element list>");
- Print_Eol;
+ if Present (E) and then not Is_Empty_Elmt_List (E) then
+ M := First_Elmt (E);
- else
loop
Print_Char ('|');
Print_Eol;