Blame 0006-PATCH-clang-Allow-__ieee128-as-an-alias-to-__float12.patch

79d4b91
From 1ef1e91142ac48ecb826f33e1e7072c7402d9fe7 Mon Sep 17 00:00:00 2001
79d4b91
From: serge-sans-paille <sguelton@redhat.com>
79d4b91
Date: Wed, 3 Mar 2021 09:58:31 +0100
79d4b91
Subject: [PATCH 6/6] [PATCH][clang] Allow __ieee128 as an alias to __float128
79d4b91
 on ppc
79d4b91
79d4b91
This matches gcc behavior.
79d4b91
79d4b91
Differential Revision: https://reviews.llvm.org/D97846
79d4b91
79d4b91
(cherry picked from commit 4aa510be78a75a4da82657fe433016f00dad0784)
79d4b91
---
79d4b91
 clang/include/clang/Basic/LangOptions.def | 1 +
79d4b91
 clang/lib/Basic/IdentifierTable.cpp       | 3 +++
79d4b91
 clang/lib/Basic/Targets/PPC.cpp           | 1 +
79d4b91
 clang/test/Sema/128bitfloat.cpp           | 7 +++++++
79d4b91
 4 files changed, 12 insertions(+)
79d4b91
79d4b91
diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def
79d4b91
index c01f0cc..3c22393e 100644
79d4b91
--- a/clang/include/clang/Basic/LangOptions.def
79d4b91
+++ b/clang/include/clang/Basic/LangOptions.def
79d4b91
@@ -107,6 +107,7 @@ LANGOPT(Bool              , 1, 0, "bool, true, and false keywords")
79d4b91
 LANGOPT(Half              , 1, 0, "half keyword")
79d4b91
 LANGOPT(WChar             , 1, CPlusPlus, "wchar_t keyword")
79d4b91
 LANGOPT(Char8             , 1, 0, "char8_t keyword")
79d4b91
+LANGOPT(IEEE128           , 1, 0, "__ieee128 keyword")
79d4b91
 LANGOPT(DeclSpecKeyword   , 1, 0, "__declspec keyword")
79d4b91
 BENIGN_LANGOPT(DollarIdents   , 1, 1, "'$' in identifiers")
79d4b91
 BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode")
79d4b91
diff --git a/clang/lib/Basic/IdentifierTable.cpp b/clang/lib/Basic/IdentifierTable.cpp
79d4b91
index 51c6e02..cedc94a 100644
79d4b91
--- a/clang/lib/Basic/IdentifierTable.cpp
79d4b91
+++ b/clang/lib/Basic/IdentifierTable.cpp
79d4b91
@@ -227,6 +227,9 @@ void IdentifierTable::AddKeywords(const LangOptions &LangOpts) {
79d4b91
   if (LangOpts.DeclSpecKeyword)
79d4b91
     AddKeyword("__declspec", tok::kw___declspec, KEYALL, LangOpts, *this);
79d4b91
 
79d4b91
+  if (LangOpts.IEEE128)
79d4b91
+    AddKeyword("__ieee128", tok::kw___float128, KEYALL, LangOpts, *this);
79d4b91
+
79d4b91
   // Add the 'import' contextual keyword.
79d4b91
   get("import").setModulesImport(true);
79d4b91
 }
79d4b91
diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp
79d4b91
index ff09c0f..38f286c 100644
79d4b91
--- a/clang/lib/Basic/Targets/PPC.cpp
79d4b91
+++ b/clang/lib/Basic/Targets/PPC.cpp
79d4b91
@@ -551,6 +551,7 @@ void PPCTargetInfo::adjust(LangOptions &Opts) {
79d4b91
     LongDoubleFormat = Opts.PPCIEEELongDouble
79d4b91
                            ? &llvm::APFloat::IEEEquad()
79d4b91
                            : &llvm::APFloat::PPCDoubleDouble();
79d4b91
+  Opts.IEEE128 = 1;
79d4b91
 }
79d4b91
 
79d4b91
 ArrayRef<Builtin::Info> PPCTargetInfo::getTargetBuiltins() const {
79d4b91
diff --git a/clang/test/Sema/128bitfloat.cpp b/clang/test/Sema/128bitfloat.cpp
79d4b91
index 4a826b4..6a9ae74 100644
79d4b91
--- a/clang/test/Sema/128bitfloat.cpp
79d4b91
+++ b/clang/test/Sema/128bitfloat.cpp
79d4b91
@@ -6,6 +6,13 @@
79d4b91
 // RUN: %clang_cc1 -triple x86_64-windows-msvc -verify -std=c++11 %s
79d4b91
 
79d4b91
 #if defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
79d4b91
+
79d4b91
+#if defined(__ppc__)
79d4b91
+template <typename> struct __is_float128 { static constexpr bool value = false; };
79d4b91
+template <> struct __is_float128<__float128> { static constexpr bool value = true; };
79d4b91
+static_assert(__is_float128<__ieee128>::value, "__ieee128 aliases to __float128");
79d4b91
+#endif
79d4b91
+
79d4b91
 __float128 f;
79d4b91
 template<typename> struct __is_floating_point_helper {};
79d4b91
 template<> struct __is_floating_point_helper<__float128> {};
79d4b91
-- 
79d4b91
1.8.3.1
79d4b91