Although the size of time_t is 8, on a 64 bit platform there are implementation-defined limits hard-coded into the runtime that cannot be exceeded. When those limits are exceeded gmtime will return NULL with errno set to indicate the nature of the error. Your code fails to check for NULL return from gmtime, therefore asctime fails when it tries to dereference that null pointer. This is the hazard you risk when using idiomatic C and not checking return values from functions that can fail.
The Microsoft C gmtime on Windows 10 returns NULL with errno set to EINVAL when passed 32535291600. Even though one might think the theoretical maximum limit ought to be LLONG_MAX. Microsoft explicitly sets the limit to _MAX__TIME64_T + _MAX_LOCAL_TIME.
From ctime.h in Microsoft Visual Studio 2010 CRT sources:
#define _MAX__TIME64_T 0x793406fffi64 /* number of seconds from 00:00:00, 01/01/1970 UTC to 23:59:59. 12/31/3000 UTC */
Apple's gmtime function returns NULL and errno set to EOVERFLOW when it's passed 67768036191676800. The Apple implementation exhibits undefined behavior for all times where asctime() returns a string with more than 4 digits in the year because the C standard requires the function to return no more than 26 characters.