diff options
author | serge-sans-paille <sguelton@redhat.com> | 2021-03-03 09:58:31 +0100 |
---|---|---|
committer | serge-sans-paille <sguelton@redhat.com> | 2021-03-15 18:28:26 +0100 |
commit | 4aa510be78a75a4da82657fe433016f00dad0784 (patch) | |
tree | 38bdb170bedc731d94d00b7c0568ffb1c9206093 /clang | |
parent | 9628cb1feef63d764c57fd0652016f9188000e2f (diff) | |
download | llvm-4aa510be78a75a4da82657fe433016f00dad0784.zip llvm-4aa510be78a75a4da82657fe433016f00dad0784.tar.gz llvm-4aa510be78a75a4da82657fe433016f00dad0784.tar.bz2 |
Allow __ieee128 as an alias to __float128 on ppc
This matches gcc behavior.
Differential Revision: https://reviews.llvm.org/D97846
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/LangOptions.def | 1 | ||||
-rw-r--r-- | clang/lib/Basic/IdentifierTable.cpp | 3 | ||||
-rw-r--r-- | clang/lib/Basic/Targets/PPC.cpp | 1 | ||||
-rw-r--r-- | clang/test/Sema/128bitfloat.cpp | 7 |
4 files changed, 12 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index 620b089..7efc661 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -109,6 +109,7 @@ LANGOPT(Bool , 1, 0, "bool, true, and false keywords") LANGOPT(Half , 1, 0, "half keyword") LANGOPT(WChar , 1, CPlusPlus, "wchar_t keyword") LANGOPT(Char8 , 1, 0, "char8_t keyword") +LANGOPT(IEEE128 , 1, 0, "__ieee128 keyword") LANGOPT(DeclSpecKeyword , 1, 0, "__declspec keyword") BENIGN_LANGOPT(DollarIdents , 1, 1, "'$' in identifiers") BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode") diff --git a/clang/lib/Basic/IdentifierTable.cpp b/clang/lib/Basic/IdentifierTable.cpp index 51c6e02..cedc94a 100644 --- a/clang/lib/Basic/IdentifierTable.cpp +++ b/clang/lib/Basic/IdentifierTable.cpp @@ -227,6 +227,9 @@ void IdentifierTable::AddKeywords(const LangOptions &LangOpts) { if (LangOpts.DeclSpecKeyword) AddKeyword("__declspec", tok::kw___declspec, KEYALL, LangOpts, *this); + if (LangOpts.IEEE128) + AddKeyword("__ieee128", tok::kw___float128, KEYALL, LangOpts, *this); + // Add the 'import' contextual keyword. get("import").setModulesImport(true); } diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp index 73ecc05..78397ab 100644 --- a/clang/lib/Basic/Targets/PPC.cpp +++ b/clang/lib/Basic/Targets/PPC.cpp @@ -566,6 +566,7 @@ void PPCTargetInfo::adjust(LangOptions &Opts) { LongDoubleFormat = Opts.PPCIEEELongDouble ? &llvm::APFloat::IEEEquad() : &llvm::APFloat::PPCDoubleDouble(); + Opts.IEEE128 = 1; } ArrayRef<Builtin::Info> PPCTargetInfo::getTargetBuiltins() const { diff --git a/clang/test/Sema/128bitfloat.cpp b/clang/test/Sema/128bitfloat.cpp index 4a826b4..6a9ae74 100644 --- a/clang/test/Sema/128bitfloat.cpp +++ b/clang/test/Sema/128bitfloat.cpp @@ -6,6 +6,13 @@ // RUN: %clang_cc1 -triple x86_64-windows-msvc -verify -std=c++11 %s #if defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__) + +#if defined(__ppc__) +template <typename> struct __is_float128 { static constexpr bool value = false; }; +template <> struct __is_float128<__float128> { static constexpr bool value = true; }; +static_assert(__is_float128<__ieee128>::value, "__ieee128 aliases to __float128"); +#endif + __float128 f; template<typename> struct __is_floating_point_helper {}; template<> struct __is_floating_point_helper<__float128> {}; |