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

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