<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div>Good time of day.</div>
<div><br>
</div>
<div>This commit breaks compilation at least on GCC 4.8.3:</div>
<div class="elementToProof"><br>
</div>
<div><span style="font-family: Consolas, Courier, monospace;">    commit e5b2ee634c7151484c06740ea2c8a4d4a75409b6</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">    Author: Paul Eggert <eggert@cs.ucla.edu></span></div>
<div><span style="font-family: Consolas, Courier, monospace;">    Date:   Thu Oct 20 11:41:27 2022 -0700</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">        Use C23 __has_include if available</span></div>
<div class="elementToProof"><br>
</div>
<div class="elementToProof">It causes this compilation error:</div>
<div class="elementToProof"><br>
</div>
<div><span style="font-family: Consolas, Courier, monospace;">    zic.c: In function ‘main’:</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">    zic.c:813:16: error: ‘optarg’ undeclared (first use in this function)</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">        if (strcmp(optarg, "slim") == 0) {</span></div>
<div class="elementToProof"><span style="font-family: Consolas, Courier, monospace;">                    ^</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">    zic.c:906:6: error: ‘optind’ undeclared (first use in this function)</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">    if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)</span></div>
<div class="elementToProof"><span style="font-family: Consolas, Courier, monospace;">        ^</span></div>
<div><br>
</div>
<div>Specifically hunks like this are problematic:</div>
<div class="elementToProof"><br>
</div>
<div><span style="font-family: Consolas, Courier, monospace;">    @@ -55,8 +63,8 @@</span></div>
<div class="elementToProof"><span style="font-family: Consolas, Courier, monospace;">     #endif</span></div>
<div class="elementToProof"><span style="font-family: Consolas, Courier, monospace;">    
<br>
</span></div>
<div class="elementToProof"><span style="font-family: Consolas, Courier, monospace;">     #ifndef HAVE_GETTEXT</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">    -# define HAVE_GETTEXT 0</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">    -#endif /* !defined HAVE_GETTEXT */</span></div>
<div class="elementToProof"><span style="font-family: Consolas, Courier, monospace;">    +# define HAVE_GETTEXT HAS_INCLUDE(<libintl.h>, false)</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">    +#endif</span></div>
<div class="elementToProof"><span style="font-family: Consolas, Courier, monospace;">    
<br>
</span></div>
<div class="elementToProof"><span style="font-family: Consolas, Courier, monospace;">     #ifndef HAVE_INCOMPATIBLE_CTIME_R</span></div>
<div><span style="font-family: Consolas, Courier, monospace;">     # define HAVE_INCOMPATIBLE_CTIME_R 0</span></div>
<div><br>
</div>
<div class="elementToProof">The culprit is the replacement 0 -> false and 1 -> true. Apparently it breaks #if preprocessor logic in older compilers somewhere downstream - what was #if 1 becomes #if true, which GCC treats as "false" and falls into #else branch.</div>
<div><br>
</div>
<div class="elementToProof">"Restoring" false and true back to 0 and 1 seems to fix the issue.</div>
<div><br>
</div>
<div>Best regards,</div>
<div>Igor Ivanov,</div>
<div class="elementToProof">Software engineer at DSSL</div>
</body>
</html>