minor noises made by gcc and -std=iso9899:1999 with -Wall -pedantic -Wextra -pedantic-errors

Vincent Lefevre vincent at vinc17.net
Wed Jul 3 13:12:12 UTC 2019


On 2019-07-03 14:40:14 +0200, Torbjorn Granlund wrote:
> Cool, this might be a useful GNU extension!
> 
> But I shrudder to see that you Vincent of all people seem to suggest
> that we stray away from the Holy Standard!  :-D

Some GNU extensions, like __builtin_unreachable() are fine with
the ISO C standard. Other extensions, like empty translation units
(which isn't even a GNU extension, at least not currently, just
undefined behavior with GCC, which may appear to work by chance),
are not.

Example:

zira:~> cat foo.c
#ifndef D

int foo (int i)
{
  if (i)
    __builtin_unreachable();
  return i + 1;
}

#endif

zira:~> gcc -std=c11 -pedantic-errors -c foo.c
zira:~> gcc -std=c11 -pedantic-errors -c foo.c -DD
foo.c:10: error: ISO C forbids an empty translation unit [-Wpedantic]
 #endif
 
zira:~[1]>

In any case, any GNU extension should be optional.

> The disputed current GMP code does not get executed for values where
> undefined behaviour is triggered, and it gives consistently great code
> for old and new gcc as well as clang.

Even under MS windows? According to my tests with the sizes used on
WIN64, the cast yields a 64-bit multiplication by a 64-bit constant
with GCC, while one gets a 32-bit multiplication by a 32-bit constant
without the cast.

-- 
Vincent Lefèvre <vincent at vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


More information about the gmp-discuss mailing list