http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55548
Bug #: 55548 Summary: SYSTEM_CLOCK with integer(8) provides nanosecond resolution, but only microsecond precision (without -lrt) Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: ja...@gcc.gnu.org Simple test case: integer(8) :: t, rate, cmax call system_clock(t, rate, cmax) print *, t, rate, cmax end When compiling this without any special flags (and in particular without -lrt), this gives a rate of 1000000000 (corresponding to 1 nanosecond), but the values of t are only precise to 1 microsecond (the last three digits are always zero). This is on x86_64-unknown-linux-gnu (Linux 3.4.11, glibc 2.15). I am aware that linking with -lrt (which is mentioned in the docu) solves this problem and makes SYSTEM_CLOCK yield values which indeed have nanosecond precision. However, the precision claimed by the COUNT_RATE argument should better match the actual precision (also with default flags!). Possible solutions: 1) Use a nanosecond COUNT_RATE only when -lrt is given, and microsecond otherwise. 2) Always use microsecond with integer(8), and nanosecond with integer(16). Using SYSTEM_CLOCK with integer(16) arguments currently results in: sysclock.f90:(.text+0x455): undefined reference to `_gfortran_system_clock_16'