exp_util.adb (Remove_Side_Effects): No action done for functions returning class...
authorJavier Miranda <miranda@adacore.com>
Thu, 11 Jan 2018 08:52:47 +0000 (08:52 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 11 Jan 2018 08:52:47 +0000 (08:52 +0000)
2018-01-11  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_util.adb (Remove_Side_Effects): No action done for functions
returning class-wide types since it requires generating code using
'reference and the CCG target has no secondary stack.
* gnat1drv.adb: Disable building static dispatch tables when generating
C code.

From-SVN: r256503

gcc/ada/ChangeLog
gcc/ada/exp_util.adb
gcc/ada/gnat1drv.adb

index 9c104eceabd6abd996bfcff590e37dcb6fadda87..01239868b12c3f64929f2ac8df9106204dbd6e56 100644 (file)
@@ -1,3 +1,11 @@
+2018-01-11  Javier Miranda  <miranda@adacore.com>
+
+       * exp_util.adb (Remove_Side_Effects): No action done for functions
+       returning class-wide types since it requires generating code using
+       'reference and the CCG target has no secondary stack.
+       * gnat1drv.adb: Disable building static dispatch tables when generating
+       C code.
+
 2018-01-11  Piotr Trojanek  <trojanek@adacore.com>
 
        * libgnat/a-direio.ads, libgnat/a-sequio.ads, libgnat/a-ststio.ads,
index 86b57dc0feb2de92ecaa6687998745a712b030e7..000dc1dd2dcbbd510bbfb51b4d8cd051cffbda23 100644 (file)
@@ -11174,6 +11174,16 @@ package body Exp_Util is
         and then Side_Effect_Free (Exp, Name_Req, Variable_Ref)
       then
          return;
+
+      --  Generating C code we cannot remove side effect of function returning
+      --  class-wide types since there is no secondary stack (required to use
+      --  'reference).
+
+      elsif Modify_Tree_For_C
+        and then Nkind (Exp) = N_Function_Call
+        and then Is_Class_Wide_Type (Etype (Exp))
+      then
+         return;
       end if;
 
       --  The remaining processing is done with all checks suppressed
index eda994d51ae234708dffb07a5966d290c0e4c9df..12ff49c7ab6f95dbdc0a26a00bccecb3b04d9038 100644 (file)
@@ -166,6 +166,7 @@ procedure Gnat1drv is
       if Generate_C_Code then
          Modify_Tree_For_C := True;
          Unnest_Subprogram_Mode := True;
+         Building_Static_Dispatch_Tables := False;
          Minimize_Expression_With_Actions := True;
          Expand_Nonbinary_Modular_Ops := True;