aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2019-08-12 08:59:58 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-08-12 08:59:58 +0000
commit651c9c1e4b1bd2369ced718599ad1ac370aa37cd (patch)
tree2f0b427dca7000c4abffd359d1f8ebedc874f15f
parent9dfc6c55085848a60d19825bdc0b7d345bdf8603 (diff)
downloadgcc-651c9c1e4b1bd2369ced718599ad1ac370aa37cd.zip
gcc-651c9c1e4b1bd2369ced718599ad1ac370aa37cd.tar.gz
gcc-651c9c1e4b1bd2369ced718599ad1ac370aa37cd.tar.bz2
[Ada] Suppress_Initialization not respected for private subtypes
The compiler fails to suppress initialization on a variable of a subtype of a private type (such as System.Address) even though the subtype has aspect Suppress_Initialization. This can lead to errors on object declarations specified with Thread_Local_Storage when Initialize_Scalars is applied (as well as leading to default initialization when it shouldn't). 2019-08-12 Gary Dismukes <dismukes@adacore.com> gcc/ada/ * sem_prag.adb (Analyze_Pragma, Pragma_Suppress_Initialization): For private types, set the Suppress_Initialization flag on the Full_View of the entity rather than the entity's base type. gcc/testsuite/ * gnat.dg/suppress_initialization2.adb, gnat.dg/suppress_initialization2.ads: New testcase. From-SVN: r274293
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/sem_prag.adb2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gnat.dg/suppress_initialization2.adb5
-rw-r--r--gcc/testsuite/gnat.dg/suppress_initialization2.ads13
5 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 78d78cc..4e76edf 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2019-08-12 Gary Dismukes <dismukes@adacore.com>
+
+ * sem_prag.adb (Analyze_Pragma, Pragma_Suppress_Initialization):
+ For private types, set the Suppress_Initialization flag on the
+ Full_View of the entity rather than the entity's base type.
+
2019-08-12 Yannick Moy <moy@adacore.com>
* aspects.adb, aspects.ads (Aspect_No_Caching): New aspect.
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 599ac4c..30b6088 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -24169,7 +24169,7 @@ package body Sem_Prag is
Error_Pragma_Arg
("argument of pragma% cannot be an incomplete type", Arg1);
else
- Set_Suppress_Initialization (Full_View (Base_Type (E)));
+ Set_Suppress_Initialization (Full_View (E));
end if;
-- For first subtype, set flag on base type
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c7ee9971..2918943 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-08-12 Gary Dismukes <dismukes@adacore.com>
+
+ * gnat.dg/suppress_initialization2.adb,
+ gnat.dg/suppress_initialization2.ads: New testcase.
+
2019-08-12 Yannick Moy <moy@adacore.com>
* gnat.dg/no_caching.adb, gnat.dg/no_caching.ads: New testcase.
diff --git a/gcc/testsuite/gnat.dg/suppress_initialization2.adb b/gcc/testsuite/gnat.dg/suppress_initialization2.adb
new file mode 100644
index 0000000..a54272e
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/suppress_initialization2.adb
@@ -0,0 +1,5 @@
+package body Suppress_Initialization2 is
+
+ procedure Dummy is null;
+
+end Suppress_Initialization2;
diff --git a/gcc/testsuite/gnat.dg/suppress_initialization2.ads b/gcc/testsuite/gnat.dg/suppress_initialization2.ads
new file mode 100644
index 0000000..2594ab1
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/suppress_initialization2.ads
@@ -0,0 +1,13 @@
+pragma Initialize_Scalars;
+
+with System;
+
+package Suppress_Initialization2 is
+
+ subtype Sub_Addr is System.Address with Suppress_Initialization;
+
+ O : Sub_Addr with Thread_Local_Storage; -- OK: no error should be reported
+
+ procedure Dummy;
+
+end Suppress_Initialization2;