Bug 1462498 - Update clang 6 pre to clang 6 final on windows. r=gps draft
authorMike Hommey <mh+mozilla@glandium.org>
Fri, 18 May 2018 08:03:31 +0900
changeset 805588 72794504aa864625446680f7f119bf81365f146f
parent 805587 295900f1ae690684391457c12a8b32c20458442a
push id112702
push userbmo:mh+mozilla@glandium.org
push dateFri, 08 Jun 2018 01:32:47 +0000
reviewersgps
bugs1462498
milestone62.0a1
Bug 1462498 - Update clang 6 pre to clang 6 final on windows. r=gps
build/build-clang/clang-win32-st-an.json
build/build-clang/clang-win64-st-an.json
build/build-clang/fflush-before-unlocking.patch
build/build-clang/r318309.patch
build/build-clang/r320462.patch
--- a/build/build-clang/clang-win32-st-an.json
+++ b/build/build-clang/clang-win32-st-an.json
@@ -1,21 +1,19 @@
 {
-    "llvm_revision": "317840",
+    "llvm_revision": "326563",
     "stages": "3",
     "build_libcxx": false,
     "build_type": "Release",
     "assertions": false,
-    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/trunk",
-    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/trunk",
-    "lld_repo": "https://llvm.org/svn/llvm-project/lld/trunk",
-    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/trunk",
-    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/trunk",
+    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_600/final",
+    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_600/final",
+    "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_600/final",
+    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_600/final",
+    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_600/final",
     "python_path": "c:/mozilla-build/python/python.exe",
     "cc": "cl.exe",
     "cxx": "cl.exe",
     "patches": [
-      "r318309.patch",
-      "r320462.patch",
       "msvc-host-x64.patch",
       "loosen-msvc-detection.patch"
     ]
 }
--- a/build/build-clang/clang-win64-st-an.json
+++ b/build/build-clang/clang-win64-st-an.json
@@ -1,23 +1,19 @@
 {
-    "llvm_revision": "317840",
+    "llvm_revision": "326563",
     "stages": "3",
     "build_libcxx": false,
     "build_type": "Release",
     "assertions": false,
-    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/trunk",
-    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/trunk",
-    "lld_repo": "https://llvm.org/svn/llvm-project/lld/trunk",
-    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/trunk",
-    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/trunk",
+    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_600/final",
+    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_600/final",
+    "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_600/final",
+    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_600/final",
+    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_600/final",
     "python_path": "c:/mozilla-build/python/python.exe",
     "cc": "cl.exe",
     "cxx": "cl.exe",
     "ml": "ml64.exe",
     "patches": [
-      "r318309.patch",
-      "r320462.patch",
-      "loosen-msvc-detection.patch",
-      "hide-gcda-profiling-symbols.patch",
-      "fflush-before-unlocking.patch"
+      "loosen-msvc-detection.patch"
     ]
 }
deleted file mode 100644
--- a/build/build-clang/fflush-before-unlocking.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/compiler-rt/lib/profile/GCDAProfiling.c b/compiler-rt/lib/profile/GCDAProfiling.c
-index f0c05075a..11b1c4557 100644
---- a/compiler-rt/lib/profile/GCDAProfiling.c
-+++ b/compiler-rt/lib/profile/GCDAProfiling.c
-@@ -468,6 +468,7 @@ void llvm_gcda_end_file() {
-       unmap_file();
-     }
- 
-+    fflush(output_file);
-     flock(fd, LOCK_UN);
-     fclose(output_file);
-     output_file = NULL;
deleted file mode 100644
--- a/build/build-clang/r318309.patch
+++ /dev/null
@@ -1,279 +0,0 @@
-From a53ee5453ba652fc640467847415dd44c24fed02 Mon Sep 17 00:00:00 2001
-From: Hans Wennborg <hans@hanshq.net>
-Date: Wed, 15 Nov 2017 17:11:53 +0000
-Subject: [PATCH] BuiltinOperatorOverloadBuilder: Don't consider types that are
- unavailable on the target (PR35174)
-
-In the PR, Clang ended up in a situation where it tried to mangle the
-__float128 type, which isn't supported when targetingt MSVC, because
-Clang instantiated a variable template with that type when searching for
-a conversion to use in an arithmetic expression.
-
-Differential revision: https://reviews.llvm.org/D39579
-
-git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@318309 91177308-0d34-0410-b5e6-96231b3b80d8
-
-diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
-index f4b8b4e34a8..fa6279800dc 100644
---- a/clang/lib/Sema/SemaOverload.cpp
-+++ b/clang/lib/Sema/SemaOverload.cpp
-@@ -7615,53 +7615,62 @@ class BuiltinOperatorOverloadBuilder {
-   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
-   OverloadCandidateSet &CandidateSet;
- 
--  // Define some constants used to index and iterate over the arithemetic types
--  // provided via the getArithmeticType() method below.
--  // The "promoted arithmetic types" are the arithmetic
-+  static constexpr int ArithmeticTypesCap = 24;
-+  SmallVector<CanQualType, ArithmeticTypesCap> ArithmeticTypes;
-+
-+  // Define some indices used to iterate over the arithemetic types in
-+  // ArithmeticTypes.  The "promoted arithmetic types" are the arithmetic
-   // types are that preserved by promotion (C++ [over.built]p2).
--  static const unsigned FirstIntegralType = 4;
--  static const unsigned LastIntegralType = 21;
--  static const unsigned FirstPromotedIntegralType = 4,
--                        LastPromotedIntegralType = 12;
--  static const unsigned FirstPromotedArithmeticType = 0,
--                        LastPromotedArithmeticType = 12;
--  static const unsigned NumArithmeticTypes = 21;
--
--  /// \brief Get the canonical type for a given arithmetic type index.
--  CanQualType getArithmeticType(unsigned index) {
--    assert(index < NumArithmeticTypes);
--    static CanQualType ASTContext::* const
--      ArithmeticTypes[NumArithmeticTypes] = {
--      // Start of promoted types.
--      &ASTContext::FloatTy,
--      &ASTContext::DoubleTy,
--      &ASTContext::LongDoubleTy,
--      &ASTContext::Float128Ty,
--
--      // Start of integral types.
--      &ASTContext::IntTy,
--      &ASTContext::LongTy,
--      &ASTContext::LongLongTy,
--      &ASTContext::Int128Ty,
--      &ASTContext::UnsignedIntTy,
--      &ASTContext::UnsignedLongTy,
--      &ASTContext::UnsignedLongLongTy,
--      &ASTContext::UnsignedInt128Ty,
--      // End of promoted types.
--
--      &ASTContext::BoolTy,
--      &ASTContext::CharTy,
--      &ASTContext::WCharTy,
--      &ASTContext::Char16Ty,
--      &ASTContext::Char32Ty,
--      &ASTContext::SignedCharTy,
--      &ASTContext::ShortTy,
--      &ASTContext::UnsignedCharTy,
--      &ASTContext::UnsignedShortTy,
--      // End of integral types.
--      // FIXME: What about complex? What about half?
--    };
--    return S.Context.*ArithmeticTypes[index];
-+  unsigned FirstIntegralType,
-+           LastIntegralType;
-+  unsigned FirstPromotedIntegralType,
-+           LastPromotedIntegralType;
-+  unsigned FirstPromotedArithmeticType,
-+           LastPromotedArithmeticType;
-+  unsigned NumArithmeticTypes;
-+
-+  void InitArithmeticTypes() {
-+    // Start of promoted types.
-+    FirstPromotedArithmeticType = 0;
-+    ArithmeticTypes.push_back(S.Context.FloatTy);
-+    ArithmeticTypes.push_back(S.Context.DoubleTy);
-+    ArithmeticTypes.push_back(S.Context.LongDoubleTy);
-+    if (S.Context.getTargetInfo().hasFloat128Type())
-+      ArithmeticTypes.push_back(S.Context.Float128Ty);
-+
-+    // Start of integral types.
-+    FirstIntegralType = ArithmeticTypes.size();
-+    FirstPromotedIntegralType = ArithmeticTypes.size();
-+    ArithmeticTypes.push_back(S.Context.IntTy);
-+    ArithmeticTypes.push_back(S.Context.LongTy);
-+    ArithmeticTypes.push_back(S.Context.LongLongTy);
-+    if (S.Context.getTargetInfo().hasInt128Type())
-+      ArithmeticTypes.push_back(S.Context.Int128Ty);
-+    ArithmeticTypes.push_back(S.Context.UnsignedIntTy);
-+    ArithmeticTypes.push_back(S.Context.UnsignedLongTy);
-+    ArithmeticTypes.push_back(S.Context.UnsignedLongLongTy);
-+    if (S.Context.getTargetInfo().hasInt128Type())
-+      ArithmeticTypes.push_back(S.Context.UnsignedInt128Ty);
-+    LastPromotedIntegralType = ArithmeticTypes.size();
-+    LastPromotedArithmeticType = ArithmeticTypes.size();
-+    // End of promoted types.
-+
-+    ArithmeticTypes.push_back(S.Context.BoolTy);
-+    ArithmeticTypes.push_back(S.Context.CharTy);
-+    ArithmeticTypes.push_back(S.Context.WCharTy);
-+    ArithmeticTypes.push_back(S.Context.Char16Ty);
-+    ArithmeticTypes.push_back(S.Context.Char32Ty);
-+    ArithmeticTypes.push_back(S.Context.SignedCharTy);
-+    ArithmeticTypes.push_back(S.Context.ShortTy);
-+    ArithmeticTypes.push_back(S.Context.UnsignedCharTy);
-+    ArithmeticTypes.push_back(S.Context.UnsignedShortTy);
-+    LastIntegralType = ArithmeticTypes.size();
-+    NumArithmeticTypes = ArithmeticTypes.size();
-+    // End of integral types.
-+    // FIXME: What about complex? What about half?
-+
-+    assert(ArithmeticTypes.size() <= ArithmeticTypesCap &&
-+           "Enough inline storage for all arithmetic types.");
-   }
- 
-   /// \brief Helper method to factor out the common pattern of adding overloads
-@@ -7720,18 +7729,8 @@ class BuiltinOperatorOverloadBuilder {
-         HasArithmeticOrEnumeralCandidateType),
-       CandidateTypes(CandidateTypes),
-       CandidateSet(CandidateSet) {
--    // Validate some of our static helper constants in debug builds.
--    assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
--           "Invalid first promoted integral type");
--    assert(getArithmeticType(LastPromotedIntegralType - 1)
--             == S.Context.UnsignedInt128Ty &&
--           "Invalid last promoted integral type");
--    assert(getArithmeticType(FirstPromotedArithmeticType)
--             == S.Context.FloatTy &&
--           "Invalid first promoted arithmetic type");
--    assert(getArithmeticType(LastPromotedArithmeticType - 1)
--             == S.Context.UnsignedInt128Ty &&
--           "Invalid last promoted arithmetic type");
-+
-+    InitArithmeticTypes();
-   }
- 
-   // C++ [over.built]p3:
-@@ -7758,7 +7757,7 @@ class BuiltinOperatorOverloadBuilder {
-     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
-          Arith < NumArithmeticTypes; ++Arith) {
-       addPlusPlusMinusMinusStyleOverloads(
--        getArithmeticType(Arith),
-+        ArithmeticTypes[Arith],
-         VisibleTypeConversionsQuals.hasVolatile(),
-         VisibleTypeConversionsQuals.hasRestrict());
-     }
-@@ -7831,7 +7830,7 @@ class BuiltinOperatorOverloadBuilder {
- 
-     for (unsigned Arith = FirstPromotedArithmeticType;
-          Arith < LastPromotedArithmeticType; ++Arith) {
--      QualType ArithTy = getArithmeticType(Arith);
-+      QualType ArithTy = ArithmeticTypes[Arith];
-       S.AddBuiltinCandidate(&ArithTy, Args, CandidateSet);
-     }
- 
-@@ -7871,7 +7870,7 @@ class BuiltinOperatorOverloadBuilder {
- 
-     for (unsigned Int = FirstPromotedIntegralType;
-          Int < LastPromotedIntegralType; ++Int) {
--      QualType IntTy = getArithmeticType(Int);
-+      QualType IntTy = ArithmeticTypes[Int];
-       S.AddBuiltinCandidate(&IntTy, Args, CandidateSet);
-     }
- 
-@@ -8099,8 +8098,8 @@ class BuiltinOperatorOverloadBuilder {
-          Left < LastPromotedArithmeticType; ++Left) {
-       for (unsigned Right = FirstPromotedArithmeticType;
-            Right < LastPromotedArithmeticType; ++Right) {
--        QualType LandR[2] = { getArithmeticType(Left),
--                              getArithmeticType(Right) };
-+        QualType LandR[2] = { ArithmeticTypes[Left],
-+                              ArithmeticTypes[Right] };
-         S.AddBuiltinCandidate(LandR, Args, CandidateSet);
-       }
-     }
-@@ -8143,8 +8142,8 @@ class BuiltinOperatorOverloadBuilder {
-          Left < LastPromotedIntegralType; ++Left) {
-       for (unsigned Right = FirstPromotedIntegralType;
-            Right < LastPromotedIntegralType; ++Right) {
--        QualType LandR[2] = { getArithmeticType(Left),
--                              getArithmeticType(Right) };
-+        QualType LandR[2] = { ArithmeticTypes[Left],
-+                              ArithmeticTypes[Right] };
-         S.AddBuiltinCandidate(LandR, Args, CandidateSet);
-       }
-     }
-@@ -8324,18 +8323,18 @@ class BuiltinOperatorOverloadBuilder {
-       for (unsigned Right = FirstPromotedArithmeticType;
-            Right < LastPromotedArithmeticType; ++Right) {
-         QualType ParamTypes[2];
--        ParamTypes[1] = getArithmeticType(Right);
-+        ParamTypes[1] = ArithmeticTypes[Right];
- 
-         // Add this built-in operator as a candidate (VQ is empty).
-         ParamTypes[0] =
--          S.Context.getLValueReferenceType(getArithmeticType(Left));
-+          S.Context.getLValueReferenceType(ArithmeticTypes[Left]);
-         S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet,
-                               /*IsAssigmentOperator=*/isEqualOp);
- 
-         // Add this built-in operator as a candidate (VQ is 'volatile').
-         if (VisibleTypeConversionsQuals.hasVolatile()) {
-           ParamTypes[0] =
--            S.Context.getVolatileType(getArithmeticType(Left));
-+            S.Context.getVolatileType(ArithmeticTypes[Left]);
-           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
-           S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet,
-                                 /*IsAssigmentOperator=*/isEqualOp);
-@@ -8390,15 +8389,15 @@ class BuiltinOperatorOverloadBuilder {
-       for (unsigned Right = FirstPromotedIntegralType;
-            Right < LastPromotedIntegralType; ++Right) {
-         QualType ParamTypes[2];
--        ParamTypes[1] = getArithmeticType(Right);
-+        ParamTypes[1] = ArithmeticTypes[Right];
- 
-         // Add this built-in operator as a candidate (VQ is empty).
-         ParamTypes[0] =
--          S.Context.getLValueReferenceType(getArithmeticType(Left));
-+          S.Context.getLValueReferenceType(ArithmeticTypes[Left]);
-         S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet);
-         if (VisibleTypeConversionsQuals.hasVolatile()) {
-           // Add this built-in operator as a candidate (VQ is 'volatile').
--          ParamTypes[0] = getArithmeticType(Left);
-+          ParamTypes[0] = ArithmeticTypes[Left];
-           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
-           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
-           S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet);
-diff --git a/test/SemaCXX/microsoft-vs-float128.cpp b/test/SemaCXX/microsoft-vs-float128.cpp
-new file mode 100644
-index 00000000000..d271e470032
---- /dev/null
-+++ b/test/SemaCXX/microsoft-vs-float128.cpp
-@@ -0,0 +1,34 @@
-+// RUN: %clang_cc1 -triple x86_64-linux-gnu -fms-compatibility -fms-extensions -fsyntax-only -verify -std=c++11 %s
-+// RUN: %clang_cc1 -triple i686-pc-win32 -fms-compatibility -fms-extensions -fsyntax-only -verify -std=c++11 -DMS %s
-+
-+template <bool> struct enable_if {};
-+template<> struct enable_if<true> { typedef void type; };
-+
-+template <typename, typename> struct is_same { static constexpr bool value = false; };
-+template <typename T> struct is_same<T, T> { static constexpr bool value = true; };
-+
-+
-+
-+
-+struct S {
-+  // The only numeric types S can be converted to is __int128 and __float128.
-+  template <typename T, typename = typename enable_if<
-+                            !((__is_integral(T) && sizeof(T) != 16) ||
-+                              is_same<T, float>::value ||
-+                              is_same<T, double>::value ||
-+                              is_same<T, long double>::value)>::type>
-+  operator T() { return T(); }
-+};
-+
-+void f() {
-+#ifdef MS
-+  // When targeting Win32, __float128 and __int128 do not exist, so the S
-+  // object cannot be converted to anything usable in the expression.
-+  // expected-error@+2{{invalid operands to binary expression ('S' and 'double')}}
-+#endif
-+  double d = S() + 1.0;
-+#ifndef MS
-+  // expected-error@-2{{use of overloaded operator '+' is ambiguous}}
-+  // expected-note@-3 36{{built-in candidate operator+}}
-+#endif
-+}
deleted file mode 100644
--- a/build/build-clang/r320462.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-https://reviews.llvm.org/D41089
-
-[COFF] Don't error out on undefined references to __enclave_config
-
-This is required for linking the CRT from MSVC 2017 15.5.
-
-diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
---- a/lld/COFF/Driver.cpp
-+++ b/lld/COFF/Driver.cpp
-@@ -1167,6 +1167,8 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
-   Symtab->addAbsolute(mangle("__guard_iat_table"), 0);
-   Symtab->addAbsolute(mangle("__guard_longjmp_count"), 0);
-   Symtab->addAbsolute(mangle("__guard_longjmp_table"), 0);
-+  // Needed for MSVC 2017 15.5 CRT.
-+  Symtab->addAbsolute(mangle("__enclave_config"), 0);
- 
-   // This code may add new undefined symbols to the link, which may enqueue more
-   // symbol resolution tasks, so we need to continue executing tasks until we