[Ada] Unnesting: fix handling of private types that are synchronized
authorEd Schonberg <schonberg@adacore.com>
Tue, 9 Oct 2018 15:06:05 +0000 (15:06 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 9 Oct 2018 15:06:05 +0000 (15:06 +0000)
2018-10-09  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_unst.adb (In_Synchronized_Call): Handle properly private
types whose full views are synchronized types, in order to
recognize generated subprograms whose bodies must be considered
reachable even if no direct calls to them are visible in the
source.

From-SVN: r264974

gcc/ada/ChangeLog
gcc/ada/exp_unst.adb

index bad846033564111a17d7d36f4b894e5cad747021..04b506e92a99f70d988538d1c87f5f4601bf4481 100644 (file)
@@ -1,3 +1,11 @@
+2018-10-09  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_unst.adb (In_Synchronized_Call): Handle properly private
+       types whose full views are synchronized types, in order to
+       recognize generated subprograms whose bodies must be considered
+       reachable even if no direct calls to them are visible in the
+       source.
+
 2018-10-09  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_ch4.adb (Expand_Modular_Op): When expanding an operation
index 8176fccfec2fb20d9e716fae35fbf0e3aad658b2..abcc6603c51da082d7122a6863a28e9fbd858df7 100644 (file)
@@ -227,6 +227,12 @@ package body Exp_Unst is
       while Present (S) and then S /= Standard_Standard loop
          if Is_Concurrent_Type (S) then
             return True;
+
+         elsif Is_Private_Type (S)
+           and then Present (Full_View (S))
+           and then Is_Concurrent_Type (Full_View (S))
+         then
+            return True;
          end if;
 
          S := Scope (S);