[gcc r11-4165] [Ada] Fix bootstrap with old GCC

Pierre-Marie de Rodat pmderodat@gcc.gnu.org
Wed Oct 21 07:25:07 GMT 2020


https://gcc.gnu.org/g:3c2d338129a5c77a95b1b6d165db0ec328fb1938

commit r11-4165-g3c2d338129a5c77a95b1b6d165db0ec328fb1938
Author: Dmitriy Anisimkov <anisimko@adacore.com>
Date:   Thu Aug 6 11:54:48 2020 +0600

    [Ada] Fix bootstrap with old GCC
    
    gcc/ada/
    
            * adaint.c (__gnat_file_time): Use regular arithmetic instead of
            __builtin_*_overflow routines if GCC version 4 or less and
            compiler is g++.

Diff:
---
 gcc/ada/adaint.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 9ef02438308..b7406a03c31 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -1503,6 +1503,9 @@ extern long long __gnat_file_time(char* name)
 
   t_write.ft_time = fad.ftLastWriteTime;
 
+#if defined(__GNUG__) && __GNUG__ <= 4
+  result = (t_write.ll_time - w32_epoch_offset) * 100;
+#else
   /* Next code similar to (t_write.ll_time - w32_epoch_offset) * 100
      but on overflow returns LLONG_MIN value. */
 
@@ -1513,6 +1516,7 @@ extern long long __gnat_file_time(char* name)
   if (__builtin_smulll_overflow(result, 100, &result)) {
     return LLONG_MIN;
   }
+#endif
 
 #else
 
@@ -1521,6 +1525,12 @@ extern long long __gnat_file_time(char* name)
     return LLONG_MIN;
   }
 
+#if defined(__GNUG__) && __GNUG__ <= 4
+    result = (sb.st_mtime - ada_epoch_offset) * 1E9;
+#if defined(st_mtime)
+    result += sb.st_mtim.tv_nsec;
+#endif
+#else
   /* Next code similar to
      (sb.st_mtime - ada_epoch_offset) * 1E9 + sb.st_mtim.tv_nsec
      but on overflow returns LLONG_MIN value. */
@@ -1538,7 +1548,7 @@ extern long long __gnat_file_time(char* name)
     return LLONG_MIN;
   }
 #endif
-
+#endif
 #endif
   return result;
 }


More information about the Gcc-cvs mailing list