On MinGW, tcl.h typedefs Tcl_StatBuf to be struct stat, which contains a 32-bit st_size. A 64-bit st_size is assumed by tclWinFile.c. This results in incorrect [file size], etc., for 2+ gigabyte files. struct _stati64 should be used instead. I made this change in my local Tcl source tree and recompiled, and [file size] now works correctly.
See /mingw/include/sys/stat.h for the family of stat structs and the circumstances under which each is available.
This is on a 32-bit Windows XP machine.