Skip to content

New _Float32 type conflicts with libc Ubuntu GLIBC 2.27-3ubuntu1 #2170

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
smowton opened this issue May 9, 2018 · 3 comments
Closed

New _Float32 type conflicts with libc Ubuntu GLIBC 2.27-3ubuntu1 #2170

smowton opened this issue May 9, 2018 · 3 comments

Comments

@smowton
Copy link
Contributor

smowton commented May 9, 2018

Ubuntu glibc version 2.27-3ubuntu1, file bits/floatn-common.h contains:

#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
typedef float _Float32;
#  endif

As of the recent past, cbmc supports the _Float32 and similar types (an extension to C supported by gcc (https://www.iso.org/standard/65615.html / https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html))

Unfortunately cbmc only claims compatibility with GCC 4.2.1 (in c_preprocess.cpp), so libc tries to define _Float32 itself, and so anything that includes floatn-common.h fails to compile.

Simply altering c_preprocess.cpp to claim GCC 7 compatibility solves this particular problem, but exposes another: if GCC 4.4+ is detected, the same libc directs fpclassify to __builtin_fpclassify, which we don't support. No doubt there are other featurelets we don't have that GCC has gained between version 4.2 and 7.0.

Possible choices:

  1. Tolerate the redundant typedef
  2. Raise our support to GCC 7.0; provide __builtin_fpclassify and whatever else we need to
  3. Revert our support for _Float32; require anyone wanting those types to use a new enough libc that is defines them, or include their own support header that defines those types appropriately.
@tautschnig
Copy link
Collaborator

I think we should go for option 2. My rationale is that right now using goto-cc + cbmc vs. cbmc directly will yield different results. (May I actually ask you to confirm this on the example you are looking at?)

@smowton
Copy link
Contributor Author

smowton commented May 9, 2018

On my system goto-cc behaves just like cbmc modified to declare GCC version 7.0 (unsurprisingly, since GCC 7 is currently my default version, and goto-cc uses the real GCC for preprocessing). Thus goto-cc does not have this problem, but does have the fpclassify problem. That we hadn't noticed the fpclassify problem before presumably indicates a shortcoming of the goto-cc testsuite.

@TGWDB
Copy link
Contributor

TGWDB commented Jul 12, 2021

Closing as this appears to not longer be producible (using regression example from #2185 although the associated code seems to have moved or changed since then). If you believe this is erroneous of have a working example please reopen and post the example.

@TGWDB TGWDB closed this as completed Jul 12, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants