[tz] proposed changes for Win32 and a improved mktime() algorithm
Paul Eggert
eggert at cs.ucla.edu
Thu May 18 15:45:26 UTC 2017
On 05/10/2017 08:35 AM, Paul.Koning at dell.com wrote:
> In GCC at least, you can suppress the warning with an extension: "int foo = foo;" which means "don't initialize but don't bug me".
Thanks, I didn't know about this extension. However, it has undefined
behavior in standard C, so we can't use it in code intended to be
portable everywhere. And it'd be error-prone even to use it in
conditionally-compiled code. Suppose we added this macro:
#ifdef __GNUC__
# define INITIALIZED(x) x = x
#else
# define INITIALIZED(x) x
#endif
And suppose we remove -Winit-self from GCC_DEBUG_FLAGS, and replace
existing code "int local; INITIALIZE(local);" with "int
INITIALIZED(local);" to pacify GCC when we know that "local" cannot be
used uninitialized but GCC doesn't deduce this. The problem with this
approach is that if there is buggy code somewhere else that says "int
local2 = local2;", GCC won't warn about it.
> because of the halting problem, it's not valid to say that a warning is a sign of an inferior compiler
It's a quality-of-implementation issue, and it's fair to say that some
compilers are better than others in this area. It's true that because of
the halting problem, no compiler can do a perfect job: for any compiler
X that you can build, someone else can build a compiler Y that is better
than X in this area. When I wrote "an inferior compiler", I meant "a
compiler inferior to recent GCC", not "a compiler inferior to a perfect
compiler".
More information about the tz
mailing list