Bug 22700 - typedef logic for _Float128 in bits/floatn.h only supports gcc
Summary: typedef logic for _Float128 in bits/floatn.h only supports gcc
Status: UNCONFIRMED
Alias: None
Product: glibc
Classification: Unclassified
Component: math (show other bugs)
Version: 2.27
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-01-11 11:22 UTC by Szabolcs Nagy
Modified: 2018-02-02 11:55 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
fweimer: security-


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Szabolcs Nagy 2018-01-11 11:22:22 UTC
on targets where long double has the right semantics the
public math header may typedef _Float128 even if the
compiler has its own _Float128 definition.

use

#if !defined __FLT128_MANT_DIG__ || defined __cplusplus

instead of

#if !__GNUC_PREREQ (7, 0) || defined __cplusplus

to check if compiler lacks _Float128 support since it
works for both gcc and clang.

clang trunk supports _Float128 since

https://reviews.llvm.org/D40673

but they don't seem to support the f128 constant suffix
(only q) nor the __builtin_inff128 etc builtins so a bit
more change is required to make the headers work with it,
and it's not clear how to check for those features
(other than ifdef __clang__), however changing the headers
to be able to work with other compilers is useful anyway.
Comment 1 Stan Shebs 2018-01-11 18:14:37 UTC
FYI, f128 intrinsics were added a few days ago:

https://reviews.llvm.org/rL321948

(Conversions are still lacking though.)

At some point it might make sense to have a prereq macro that checks __clang_major__ and __clang_minor__.
Comment 2 Szabolcs Nagy 2018-01-17 17:23:19 UTC
clang reverted the _Float128 definition for now:
https://github.com/llvm-mirror/clang/commit/2b1d36bee69eaf8897af89d53630804f9f66badd