OSDN Git Service

* gcc-interface/decl.c (gnat_to_gnu_entity): Even when they
authorhainque <hainque@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Sep 2008 10:29:29 +0000 (10:29 +0000)
committerhainque <hainque@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Sep 2008 10:29:29 +0000 (10:29 +0000)
        are never assigned, volatile entities are not constant for code
        generation purposes.

        * gnat.dg/volatile3.adb: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@140545 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/volatile3.adb [new file with mode: 0644]

index fe89a54..e808ca4 100644 (file)
@@ -1,3 +1,9 @@
+2008-09-22  Olivier Hainque  <hainque@adacore.com>
+
+       * gcc-interface/decl.c (gnat_to_gnu_entity): Even when they
+       are never assigned, volatile entities are not constant for code
+       generation purposes.
+
 2008-09-21  Laurent Guerby  <laurent@guerby.net>
 
         PR ada/5911
index a8fa1ba..d343b14 100644 (file)
@@ -548,6 +548,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
        bool const_flag
          = ((kind == E_Constant || kind == E_Variable)
             && Is_True_Constant (gnat_entity)
+            && !Treat_As_Volatile (gnat_entity)
             && (((Nkind (Declaration_Node (gnat_entity))
                   == N_Object_Declaration)
                  && Present (Expression (Declaration_Node (gnat_entity))))
index 2af0a0e..e9b7422 100644 (file)
@@ -1,3 +1,7 @@
+2008-09-22  Olivier Hainque  <hainque@adacore.com>
+
+       * gnat.dg/volatile3.adb: New test.
+
 2008-09-22  Ira Rosen  <irar@il.ibm.com>
 
        PR tree-optimization/37482
diff --git a/gcc/testsuite/gnat.dg/volatile3.adb b/gcc/testsuite/gnat.dg/volatile3.adb
new file mode 100644 (file)
index 0000000..bd0e96a
--- /dev/null
@@ -0,0 +1,16 @@
+-- { dg-do compile }
+-- { dg-options "-O2" }
+
+procedure volatile3 is
+
+   v1 : Integer := 0;
+   v2 : Integer := 0;
+   pragma Volatile (v1);
+   pragma Volatile (v2);
+begin
+   if v1 /= v2 then
+      raise Program_Error;
+   end if;
+end;
+
+-- { dg-final { scan-assembler "__gnat_rcheck" } }