[Bug 1895358] Re: [Bug] A simple code including tgmath.h cannot be compiled with icc with Ubuntu 20.04 OS
James Grey
1895358 at bugs.launchpad.net
Tue Jan 4 23:21:45 UTC 2022
I am using the latest libc6-dev, 2.31-0ubuntu9.2. I guess it's possible
I ran into the same issue from a different angle, so to speak, and that
the fix does not cover my corner case, which is running clang-tidy and
clang-sa against clang compiled code. The initial compile works fine
but the analysis stage throws a clang-diagnostic-error when it tries to
analyze files that include tgmath.h, which is why I'm here. Even looking
at newer versions on http://ftp.gnu.org/gnu/libc/?C=M;O=D I don't seen
any change in the tgmath.h file from 2.31 to 2.34. I'm at a loss as to
when and how this was fixed, and where I can access the fix.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to glibc in Ubuntu.
https://bugs.launchpad.net/bugs/1895358
Title:
[Bug] A simple code including tgmath.h cannot be compiled with icc
with Ubuntu 20.04 OS
Status in glibc package in Ubuntu:
Fix Released
Status in glibc source package in Focal:
Fix Released
Status in glibc source package in Groovy:
Won't Fix
Bug description:
[Impact]
A simple code including tgmath.h cannot be compiled with icc with
Ubuntu 20.04 OS and later releases.
[Test Case]
icc:
Compile the following code with Intel compiler (icc) by running “icc -c test.c”
$ cat test.c
#include <tgmath.h>
There should not be any compilation error
[Where problems could occur]
The fix is dropping compile time check preventing using float128 with
icc. In case of a mistake using float128 becomes prevented in other
compilers as well, but this is highly unlikely, since the vanilla
upstream code is known to work.
Older icc compilers (for which the patch has been introduced) will
stop compiling code with the _fixed_ tgmath.h because of LP: #1717257.
Users can still install older icc compilers from 3rd party sources,
but there is no good way of avoiding that. They can still override the
packaged tgmath.h.
[Original Bug Text]
[Summary]: A simple code including tgmath.h cannot be compiled with
icc with Ubuntu 20.04 OS
[Ubuntu OS version]: 20.04
[Reproduce Steps]: Compile the following code with Intel compiler
(icc) by running “icc -c test.c”
$ cat test.c
#include <tgmath.h>
[Results]
Expected: There should not be any compilation error
Actual: The following error is produced:
$ icc -c test.c
In file included from /localdisk2/mkl/aakkas/20200721_rls/lnx/compiler/latest/linux/bin/intel64/../../compiler/include/icc/tgmath.h(25),
from test.c(1):
/usr/include/tgmath.h(54): error: #error directive: "Unsupported combination of types for <tgmath.h>."
# error "Unsupported combination of types for <tgmath.h>."
^
compilation aborted for test.c (code 2)
[Additional Information on Test setup]:
ICC compiler supports the __float128 type if the reference compiler is
more recent than GNU version 4.4. Therefore, __HAVE_FLOAT128 should be
set to 1 when ICC compiler is used with GNU version higher than 4.4.
Based on this, I believe that the red part below in floatn.h, which
comes with Ubuntu OS, should be updated/removed.
#if (defined __x86_64__ \
? __GNUC_PREREQ (4, 3) \
: (defined __GNU__ ? __GNUC_PREREQ (4, 5) : __GNUC_PREREQ (4, 4))) \
&& !defined(__CUDACC__) && !defined(__ICC)
# define __HAVE_FLOAT128 1
#else
# define __HAVE_FLOAT128 0
#endif
Currently, when the tgmath.h system header file is included on Ubuntu
20.04 OS system, __HAVE_FLOAT128 is set to zero and __HAVE_FLOAT64X
set to 1 for ICC. And this is not a supported combination as checked
in the new tgmath.h system header file:
# if ((__HAVE_FLOAT64X && !__HAVE_FLOAT128) \
|| (__HAVE_FLOAT128 && !__HAVE_FLOAT64X))
# error "Unsupported combination of types for <tgmath.h>."
# endif
Upstream bug: Not known
=========================================
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1895358/+subscriptions
More information about the foundations-bugs
mailing list