trans.c (node_has_volatile_full_access): Consider only entities for objects.
authorEric Botcazou <ebotcazou@adacore.com>
Sat, 10 Mar 2018 10:11:29 +0000 (10:11 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 10 Mar 2018 10:11:29 +0000 (10:11 +0000)
* gcc-interface/trans.c (node_has_volatile_full_access) <N_Identifier>:
Consider only entities for objects.

From-SVN: r258412

gcc/ada/ChangeLog
gcc/ada/gcc-interface/trans.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/prot3.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/prot3_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/prot3_pkg.ads [new file with mode: 0644]

index 56afab0..5dabc15 100644 (file)
@@ -1,3 +1,8 @@
+2018-03-10  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (node_has_volatile_full_access) <N_Identifier>:
+       Consider only entities for objects.
+
 2018-03-07  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
        * gcc-interface/Makefile.in (OSCONS_CPP): Remove redundant
index ac80a3e..fbdced5 100644 (file)
@@ -4082,6 +4082,8 @@ node_has_volatile_full_access (Node_Id gnat_node)
     case N_Identifier:
     case N_Expanded_Name:
       gnat_entity = Entity (gnat_node);
+      if (!Is_Object (gnat_entity))
+       break;
       return Is_Volatile_Full_Access (gnat_entity)
             || Is_Volatile_Full_Access (Etype (gnat_entity));
 
index 2c07f6a..bf028b8 100644 (file)
@@ -1,3 +1,8 @@
+2018-03-10  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/prot3.adb: New test.
+       * gnat.dg/prot3_pkg.ad[sb]: New helper.
+
 2018-03-09  Jason Merrill  <jason@redhat.com>
            Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/gcc/testsuite/gnat.dg/prot3.adb b/gcc/testsuite/gnat.dg/prot3.adb
new file mode 100644 (file)
index 0000000..2539065
--- /dev/null
@@ -0,0 +1,8 @@
+--  { dg-do run }
+
+with Prot3_Pkg; use Prot3_Pkg;
+
+procedure Prot3 is
+begin
+   P.Foo (4);
+end;
diff --git a/gcc/testsuite/gnat.dg/prot3_pkg.adb b/gcc/testsuite/gnat.dg/prot3_pkg.adb
new file mode 100644 (file)
index 0000000..07ae182
--- /dev/null
@@ -0,0 +1,17 @@
+package body Prot3_Pkg is
+   
+   protected body Prot is
+      function Fn (J : Short_Integer) return Rec
+      is
+      begin
+        return (V1 => J * J,
+                V2 => J);
+      end;
+      
+      procedure Foo (J : Short_Integer) is
+      begin
+        Val := Fn (J);
+      end;
+   end Prot;
+   
+end Prot3_Pkg;
diff --git a/gcc/testsuite/gnat.dg/prot3_pkg.ads b/gcc/testsuite/gnat.dg/prot3_pkg.ads
new file mode 100644 (file)
index 0000000..b4cce90
--- /dev/null
@@ -0,0 +1,16 @@
+package Prot3_Pkg is
+   
+   type Rec is record
+      V1 : Short_Integer;
+      V2 : Short_Integer;
+   end record with Volatile_Full_Access;
+   
+   protected type Prot is
+      procedure Foo (J : Short_Integer);
+   private
+      Val : Rec;
+   end Prot;
+   
+   P : Prot;
+   
+end Prot3_Pkg;