From 3c2d338129a5c77a95b1b6d165db0ec328fb1938 Mon Sep 17 00:00:00 2001 From: Dmitriy Anisimkov Date: Thu, 6 Aug 2020 11:54:48 +0600 Subject: [PATCH] [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++. --- 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 9ef0243..b7406a0 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; } -- 2.7.4