aboutsummaryrefslogtreecommitdiff
path: root/development/qt-creator-llvm
diff options
context:
space:
mode:
authorMatteo Bernardini <ponce@slackbuilds.org>2022-02-26 11:37:27 +0100
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2022-02-27 01:09:56 +0700
commitbe118be5fd05006130bad238aa9bc28764142ee0 (patch)
tree66c1f55a86b56be4f9625db0432c42d8b61d78fc /development/qt-creator-llvm
parent550ceacf61d07290192db0f34c821feaee09c775 (diff)
development/qt-creator-llvm: Updated for version 13.0.0_d7b669b.
Signed-off-by: Matteo Bernardini <ponce@slackbuilds.org> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'development/qt-creator-llvm')
-rw-r--r--development/qt-creator-llvm/patches/010_D35355_Fix-templated-type-alias-completion-when-using-global-completion-cache.patch71
-rw-r--r--development/qt-creator-llvm/patches/020_D37435_Dont-show-deleted-function-constructor-candidates-for-code-completion.patch50
-rw-r--r--development/qt-creator-llvm/patches/030_D38615_Only-mark-CXCursors-for-explicit-attributes-with-a-type.patch34
-rw-r--r--development/qt-creator-llvm/patches/040_D39957_Honor-TerseOutput-for-constructors.patch266
-rw-r--r--development/qt-creator-llvm/patches/050_D40027_Fix-cursors-for-in-class-initializer-of-field-declarations.patch33
-rw-r--r--development/qt-creator-llvm/patches/060_D40072_Support-querying-whether-a-declaration-is-invalid.patch154
-rw-r--r--development/qt-creator-llvm/patches/070_D40561_Fix-cursors-for-functions-with-trailing-return-type.patch79
-rw-r--r--development/qt-creator-llvm/patches/080_D40643_Add-function-to-get-the-buffer-for-a-file.patch78
-rw-r--r--development/qt-creator-llvm/patches/090_D40746_Correctly-handle-line-table-entries-without-filenames-during-AST-serialization.patch47
-rw-r--r--development/qt-creator-llvm/patches/100_D40841_Fix-a-crash-on-C++17-AST-for-non-trivial-construction-into-a-trivial-brace-initialize.patch117
-rw-r--r--development/qt-creator-llvm/patches/110_D41016_Fix-crash-in-unused-lambda-capture-warning-for-VLAs.patch37
-rw-r--r--development/qt-creator-llvm/patches/120_D41688_Fix-crash-on-code-completion-in-comment-in-included-file.patch47
-rw-r--r--development/qt-creator-llvm/patches/130_QTCREATORBUG-15157_Link-with-clazy_clang.patch25
-rw-r--r--development/qt-creator-llvm/patches/140_QTCREATORBUG-15157_Link-with-clazy_extra.patch13
-rw-r--r--development/qt-creator-llvm/patches/150_QTCREATORBUG-15157_Link-with-clazy_llvm.patch23
-rw-r--r--development/qt-creator-llvm/patches/160_QTCREATORBUG-15449_Fix-files-lock-on-Windows.patch16
-rw-r--r--development/qt-creator-llvm/patches/170_D40013_DeclPrinter-Allow-printing-fully-qualified-name.patch144
-rw-r--r--development/qt-creator-llvm/patches/180_D39903_libclang-Allow-pretty-printing-declarations.patch546
-rw-r--r--development/qt-creator-llvm/patches/200_D36390_Fix-overloaded-static-functions-in-SemaCodeComplete.patch148
-rw-r--r--development/qt-creator-llvm/patches/210_D43453_Fix-overloaded-static-functions-for-templates.patch165
-rw-r--r--development/qt-creator-llvm/patches/220_Support-std-has_unique_object_represesentations.patch739
-rw-r--r--development/qt-creator-llvm/patches/230_D40673_Add-Float128-as-alias-to-__float128.patch122
-rw-r--r--development/qt-creator-llvm/patches/README.md149
-rw-r--r--development/qt-creator-llvm/qt-creator-llvm.SlackBuild71
-rw-r--r--development/qt-creator-llvm/qt-creator-llvm.info8
25 files changed, 7 insertions, 3175 deletions
diff --git a/development/qt-creator-llvm/patches/010_D35355_Fix-templated-type-alias-completion-when-using-global-completion-cache.patch b/development/qt-creator-llvm/patches/010_D35355_Fix-templated-type-alias-completion-when-using-global-completion-cache.patch
deleted file mode 100644
index df57bedff836..000000000000
--- a/development/qt-creator-llvm/patches/010_D35355_Fix-templated-type-alias-completion-when-using-global-completion-cache.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-diff --git a/tools/clang/lib/Frontend/ASTUnit.cpp b/tools/clang/lib/Frontend/ASTUnit.cpp
-index 1094e6d089..5a4cddbebe 100644
---- a/tools/clang/lib/Frontend/ASTUnit.cpp
-+++ b/tools/clang/lib/Frontend/ASTUnit.cpp
-@@ -243,7 +243,8 @@ static unsigned getDeclShowContexts(const NamedDecl *ND,
-
- uint64_t Contexts = 0;
- if (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND) ||
-- isa<ClassTemplateDecl>(ND) || isa<TemplateTemplateParmDecl>(ND)) {
-+ isa<ClassTemplateDecl>(ND) || isa<TemplateTemplateParmDecl>(ND) ||
-+ isa<TypeAliasTemplateDecl>(ND)) {
- // Types can appear in these contexts.
- if (LangOpts.CPlusPlus || !isa<TagDecl>(ND))
- Contexts |= (1LL << CodeCompletionContext::CCC_TopLevel)
-diff --git a/tools/clang/lib/Parse/ParseTemplate.cpp b/tools/clang/lib/Parse/ParseTemplate.cpp
-index 944cd775d5..6aba10e5c7 100644
---- a/tools/clang/lib/Parse/ParseTemplate.cpp
-+++ b/tools/clang/lib/Parse/ParseTemplate.cpp
-@@ -198,9 +198,11 @@ Parser::ParseSingleDeclarationAfterTemplate(
-
- if (Tok.is(tok::kw_using)) {
- // FIXME: We should return the DeclGroup to the caller.
-- ParseUsingDirectiveOrDeclaration(Context, TemplateInfo, DeclEnd,
-- prefixAttrs);
-- return nullptr;
-+ auto usingDeclPtr = ParseUsingDirectiveOrDeclaration(Context, TemplateInfo, DeclEnd,
-+ prefixAttrs);
-+ if (!usingDeclPtr || !usingDeclPtr.get().isSingleDecl())
-+ return nullptr;
-+ return usingDeclPtr.get().getSingleDecl();
- }
-
- // Parse the declaration specifiers, stealing any diagnostics from
-@@ -1023,8 +1025,8 @@ bool Parser::AnnotateTemplateIdToken(TemplateTy Template, TemplateNameKind TNK,
- ? OO_None
- : TemplateName.OperatorFunctionId.Operator;
-
-- TemplateIdAnnotation *TemplateId = TemplateIdAnnotation::Create(
-- SS, TemplateKWLoc, TemplateNameLoc, TemplateII, OpKind, Template, TNK,
-+ TemplateIdAnnotation *TemplateId = TemplateIdAnnotation::Create(
-+ SS, TemplateKWLoc, TemplateNameLoc, TemplateII, OpKind, Template, TNK,
- LAngleLoc, RAngleLoc, TemplateArgs, TemplateIds);
-
- Tok.setAnnotationValue(TemplateId);
-diff --git a/tools/clang/test/Index/code-completion.cpp b/tools/clang/test/Index/code-completion.cpp
-index f52bb10a35..00f158f3d0 100644
---- a/tools/clang/test/Index/code-completion.cpp
-+++ b/tools/clang/test/Index/code-completion.cpp
-@@ -37,6 +37,16 @@ Z::operator int() const {
- return 0;
- }
-
-+template <typename T>
-+struct Foo { T member; };
-+
-+template<typename T> using Bar = Foo<T>;
-+
-+void test_template_alias() {
-+ // RUN: env CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:47:1 %s | FileCheck -check-prefix=CHECK-TEMPLATE-ALIAS %s
-+
-+}
-+
- // CHECK-MEMBER: FieldDecl:{ResultType double}{TypedText member}
- // CHECK-MEMBER: FieldDecl:{ResultType int}{Text X::}{TypedText member}
- // CHECK-MEMBER: FieldDecl:{ResultType float}{Text Y::}{TypedText member}
-@@ -88,3 +98,5 @@ Z::operator int() const {
- // CHECK-EXPR-NEXT: Class name
- // CHECK-EXPR-NEXT: Nested name specifier
- // CHECK-EXPR-NEXT: Objective-C interface
-+
-+// CHECK-TEMPLATE-ALIAS: AliasTemplateDecl:{TypedText Bar}{LeftAngle <}{Placeholder typename T}{RightAngle >} (50)
diff --git a/development/qt-creator-llvm/patches/020_D37435_Dont-show-deleted-function-constructor-candidates-for-code-completion.patch b/development/qt-creator-llvm/patches/020_D37435_Dont-show-deleted-function-constructor-candidates-for-code-completion.patch
deleted file mode 100644
index 01a79b27dbfe..000000000000
--- a/development/qt-creator-llvm/patches/020_D37435_Dont-show-deleted-function-constructor-candidates-for-code-completion.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-diff --git a/tools/clang/lib/Sema/SemaCodeComplete.cpp b/tools/clang/lib/Sema/SemaCodeComplete.cpp
-index 4de7d42207..7001849426 100644
---- a/tools/clang/lib/Sema/SemaCodeComplete.cpp
-+++ b/tools/clang/lib/Sema/SemaCodeComplete.cpp
-@@ -4286,9 +4286,12 @@ static void mergeCandidatesWithResults(Sema &SemaRef,
- });
-
- // Add the remaining viable overload candidates as code-completion results.
-- for (auto &Candidate : CandidateSet)
-+ for (auto &Candidate : CandidateSet) {
-+ if (Candidate.Function && Candidate.Function->isDeleted())
-+ continue;
- if (Candidate.Viable)
- Results.push_back(ResultCandidate(Candidate.Function));
-+ }
- }
- }
-
-diff --git a/tools/clang/test/Index/complete-constructor-params.cpp b/tools/clang/test/Index/complete-constructor-params.cpp
-index 6685626a58..949077a214 100644
---- a/tools/clang/test/Index/complete-constructor-params.cpp
-+++ b/tools/clang/test/Index/complete-constructor-params.cpp
-@@ -18,6 +18,20 @@ int main() {
- int(42);
- }
-
-+struct Foo {
-+ Foo() = default;
-+ Foo(const Foo&) = delete;
-+};
-+
-+struct Bar {
-+ Foo f;
-+};
-+
-+void function() {
-+ Bar b1;
-+ Bar b2(b1);
-+}
-+
- // RUN: c-index-test -code-completion-at=%s:11:10 %s | FileCheck -check-prefix=CHECK-CC1 %s
- // CHECK-CC1: OverloadCandidate:{Text S}{LeftParen (}{CurrentParameter const S<int> &}{RightParen )} (1)
- // CHECK-CC1: OverloadCandidate:{Text S}{LeftParen (}{CurrentParameter int}{Comma , }{Placeholder U}{Comma , }{Placeholder U}{RightParen )} (1)
-@@ -138,3 +152,6 @@ int main() {
- // CHECK-CC10-NEXT: Class name
- // CHECK-CC10-NEXT: Nested name specifier
- // CHECK-CC10-NEXT: Objective-C interface
-+
-+// RUN: c-index-test -code-completion-at=%s:32:12 -std=c++11 %s | FileCheck -check-prefix=CHECK-CC11 %s
-+// CHECK-CC11-NOT: OverloadCandidate:{Text Bar}{LeftParen (}{CurrentParameter const Bar &}{RightParen )} (1)
diff --git a/development/qt-creator-llvm/patches/030_D38615_Only-mark-CXCursors-for-explicit-attributes-with-a-type.patch b/development/qt-creator-llvm/patches/030_D38615_Only-mark-CXCursors-for-explicit-attributes-with-a-type.patch
deleted file mode 100644
index 3357f874aa77..000000000000
--- a/development/qt-creator-llvm/patches/030_D38615_Only-mark-CXCursors-for-explicit-attributes-with-a-type.patch
+++ /dev/null
@@ -1,34 +0,0 @@
---- /dev/null
-+++ b/tools/clang/test/Index/annotate-tokens-unexposed.cpp
-@@ -0,0 +1,20 @@
-+// RUN: c-index-test -test-annotate-tokens=%s:1:1:16:1 %s -target x86_64-pc-windows-msvc | FileCheck %s
-+class Foo
-+{
-+public:
-+ void step(int v);
-+ Foo();
-+};
-+
-+void bar()
-+{
-+ // Introduce a MSInheritanceAttr node on the CXXRecordDecl for Foo. The
-+ // existence of this attribute should not mark all cursors for tokens in
-+ // Foo as UnexposedAttr.
-+ &Foo::step;
-+}
-+
-+Foo::Foo()
-+{}
-+
-+// CHECK-NOT: UnexposedAttr=
---- a/tools/clang/tools/libclang/CIndex.cpp
-+++ b/tools/clang/tools/libclang/CIndex.cpp
-@@ -1772,7 +1772,7 @@
-
- bool CursorVisitor::VisitAttributes(Decl *D) {
- for (const auto *I : D->attrs())
-- if (Visit(MakeCXCursor(I, D, TU)))
-+ if (!I->isImplicit() && Visit(MakeCXCursor(I, D, TU)))
- return true;
-
- return false;
diff --git a/development/qt-creator-llvm/patches/040_D39957_Honor-TerseOutput-for-constructors.patch b/development/qt-creator-llvm/patches/040_D39957_Honor-TerseOutput-for-constructors.patch
deleted file mode 100644
index a2d096cf16ef..000000000000
--- a/development/qt-creator-llvm/patches/040_D39957_Honor-TerseOutput-for-constructors.patch
+++ /dev/null
@@ -1,266 +0,0 @@
---- a/tools/clang/lib/AST/DeclPrinter.cpp
-+++ b/tools/clang/lib/AST/DeclPrinter.cpp
-@@ -608,66 +608,69 @@
- }
-
- if (CDecl) {
-- bool HasInitializerList = false;
-- for (const auto *BMInitializer : CDecl->inits()) {
-- if (BMInitializer->isInClassMemberInitializer())
-- continue;
--
-- if (!HasInitializerList) {
-- Proto += " : ";
-- Out << Proto;
-- Proto.clear();
-- HasInitializerList = true;
-- } else
-- Out << ", ";
-+ if (!Policy.TerseOutput) {
-+ bool HasInitializerList = false;
-+ for (const auto *BMInitializer : CDecl->inits()) {
-+ if (BMInitializer->isInClassMemberInitializer())
-+ continue;
-
-- if (BMInitializer->isAnyMemberInitializer()) {
-- FieldDecl *FD = BMInitializer->getAnyMember();
-- Out << *FD;
-- } else {
-- Out << QualType(BMInitializer->getBaseClass(), 0).getAsString(Policy);
-- }
--
-- Out << "(";
-- if (!BMInitializer->getInit()) {
-- // Nothing to print
-- } else {
-- Expr *Init = BMInitializer->getInit();
-- if (ExprWithCleanups *Tmp = dyn_cast<ExprWithCleanups>(Init))
-- Init = Tmp->getSubExpr();
--
-- Init = Init->IgnoreParens();
--
-- Expr *SimpleInit = nullptr;
-- Expr **Args = nullptr;
-- unsigned NumArgs = 0;
-- if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
-- Args = ParenList->getExprs();
-- NumArgs = ParenList->getNumExprs();
-- } else if (CXXConstructExpr *Construct
-- = dyn_cast<CXXConstructExpr>(Init)) {
-- Args = Construct->getArgs();
-- NumArgs = Construct->getNumArgs();
-+ if (!HasInitializerList) {
-+ Proto += " : ";
-+ Out << Proto;
-+ Proto.clear();
-+ HasInitializerList = true;
- } else
-- SimpleInit = Init;
--
-- if (SimpleInit)
-- SimpleInit->printPretty(Out, nullptr, Policy, Indentation);
-- else {
-- for (unsigned I = 0; I != NumArgs; ++I) {
-- assert(Args[I] != nullptr && "Expected non-null Expr");
-- if (isa<CXXDefaultArgExpr>(Args[I]))
-- break;
--
-- if (I)
-- Out << ", ";
-- Args[I]->printPretty(Out, nullptr, Policy, Indentation);
-+ Out << ", ";
-+
-+ if (BMInitializer->isAnyMemberInitializer()) {
-+ FieldDecl *FD = BMInitializer->getAnyMember();
-+ Out << *FD;
-+ } else {
-+ Out << QualType(BMInitializer->getBaseClass(), 0)
-+ .getAsString(Policy);
-+ }
-+
-+ Out << "(";
-+ if (!BMInitializer->getInit()) {
-+ // Nothing to print
-+ } else {
-+ Expr *Init = BMInitializer->getInit();
-+ if (ExprWithCleanups *Tmp = dyn_cast<ExprWithCleanups>(Init))
-+ Init = Tmp->getSubExpr();
-+
-+ Init = Init->IgnoreParens();
-+
-+ Expr *SimpleInit = nullptr;
-+ Expr **Args = nullptr;
-+ unsigned NumArgs = 0;
-+ if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
-+ Args = ParenList->getExprs();
-+ NumArgs = ParenList->getNumExprs();
-+ } else if (CXXConstructExpr *Construct =
-+ dyn_cast<CXXConstructExpr>(Init)) {
-+ Args = Construct->getArgs();
-+ NumArgs = Construct->getNumArgs();
-+ } else
-+ SimpleInit = Init;
-+
-+ if (SimpleInit)
-+ SimpleInit->printPretty(Out, nullptr, Policy, Indentation);
-+ else {
-+ for (unsigned I = 0; I != NumArgs; ++I) {
-+ assert(Args[I] != nullptr && "Expected non-null Expr");
-+ if (isa<CXXDefaultArgExpr>(Args[I]))
-+ break;
-+
-+ if (I)
-+ Out << ", ";
-+ Args[I]->printPretty(Out, nullptr, Policy, Indentation);
-+ }
- }
- }
-+ Out << ")";
-+ if (BMInitializer->isPackExpansion())
-+ Out << "...";
- }
-- Out << ")";
-- if (BMInitializer->isPackExpansion())
-- Out << "...";
- }
- } else if (!ConversionDecl && !isa<CXXDestructorDecl>(D)) {
- if (FT && FT->hasTrailingReturn()) {
-@@ -712,7 +715,7 @@
- if (D->getBody())
- D->getBody()->printPretty(Out, nullptr, SubPolicy, Indentation);
- } else {
-- if (isa<CXXConstructorDecl>(*D))
-+ if (!Policy.TerseOutput && isa<CXXConstructorDecl>(*D))
- Out << " {}";
- }
- }
---- a/tools/clang/test/Index/comment-cplus-decls.cpp
-+++ b/tools/clang/test/Index/comment-cplus-decls.cpp
-@@ -46,7 +46,7 @@
- data* reserved;
- };
- // CHECK: <Declaration>class Test {}</Declaration>
--// CHECK: <Declaration>Test() : reserved(new Test::data()) {}</Declaration>
-+// CHECK: <Declaration>Test()</Declaration>
- // CHECK: <Declaration>unsigned int getID() const</Declaration>
- // CHECK: <Declaration>~Test(){{( noexcept)?}}</Declaration>
- // CHECK: <Declaration>Test::data *reserved</Declaration>
---- a/tools/clang/unittests/AST/DeclPrinterTest.cpp
-+++ b/tools/clang/unittests/AST/DeclPrinterTest.cpp
-@@ -31,18 +31,25 @@
-
- namespace {
-
--void PrintDecl(raw_ostream &Out, const ASTContext *Context, const Decl *D) {
-+using PrintingPolicyModifier = void (*)(PrintingPolicy &policy);
-+
-+void PrintDecl(raw_ostream &Out, const ASTContext *Context, const Decl *D,
-+ PrintingPolicyModifier PolicyModifier) {
- PrintingPolicy Policy = Context->getPrintingPolicy();
- Policy.TerseOutput = true;
-+ if (PolicyModifier)
-+ PolicyModifier(Policy);
- D->print(Out, Policy, /*Indentation*/ 0, /*PrintInstantiation*/ false);
- }
-
- class PrintMatch : public MatchFinder::MatchCallback {
- SmallString<1024> Printed;
- unsigned NumFoundDecls;
-+ PrintingPolicyModifier PolicyModifier;
-
- public:
-- PrintMatch() : NumFoundDecls(0) {}
-+ PrintMatch(PrintingPolicyModifier PolicyModifier)
-+ : NumFoundDecls(0), PolicyModifier(PolicyModifier) {}
-
- void run(const MatchFinder::MatchResult &Result) override {
- const Decl *D = Result.Nodes.getNodeAs<Decl>("id");
-@@ -53,7 +60,7 @@
- return;
-
- llvm::raw_svector_ostream Out(Printed);
-- PrintDecl(Out, Result.Context, D);
-+ PrintDecl(Out, Result.Context, D, PolicyModifier);
- }
-
- StringRef getPrinted() const {
-@@ -65,13 +72,12 @@
- }
- };
-
--::testing::AssertionResult PrintedDeclMatches(
-- StringRef Code,
-- const std::vector<std::string> &Args,
-- const DeclarationMatcher &NodeMatch,
-- StringRef ExpectedPrinted,
-- StringRef FileName) {
-- PrintMatch Printer;
-+::testing::AssertionResult
-+PrintedDeclMatches(StringRef Code, const std::vector<std::string> &Args,
-+ const DeclarationMatcher &NodeMatch,
-+ StringRef ExpectedPrinted, StringRef FileName,
-+ PrintingPolicyModifier PolicyModifier = nullptr) {
-+ PrintMatch Printer(PolicyModifier);
- MatchFinder Finder;
- Finder.addMatcher(NodeMatch, &Printer);
- std::unique_ptr<FrontendActionFactory> Factory(
-@@ -109,16 +115,17 @@
- "input.cc");
- }
-
--::testing::AssertionResult PrintedDeclCXX98Matches(
-- StringRef Code,
-- const DeclarationMatcher &NodeMatch,
-- StringRef ExpectedPrinted) {
-+::testing::AssertionResult
-+PrintedDeclCXX98Matches(StringRef Code, const DeclarationMatcher &NodeMatch,
-+ StringRef ExpectedPrinted,
-+ PrintingPolicyModifier PolicyModifier = nullptr) {
- std::vector<std::string> Args(1, "-std=c++98");
- return PrintedDeclMatches(Code,
- Args,
- NodeMatch,
- ExpectedPrinted,
-- "input.cc");
-+ "input.cc",
-+ PolicyModifier);
- }
-
- ::testing::AssertionResult PrintedDeclCXX11Matches(StringRef Code,
-@@ -478,6 +485,27 @@
- "A(const A &a, int = 0)"));
- }
-
-+TEST(DeclPrinter, TestCXXConstructorDeclWithMemberInitializer) {
-+ ASSERT_TRUE(PrintedDeclCXX98Matches(
-+ "struct A {"
-+ " int m;"
-+ " A() : m(2) {}"
-+ "};",
-+ cxxConstructorDecl(ofClass(hasName("A"))).bind("id"),
-+ "A()"));
-+}
-+
-+TEST(DeclPrinter, TestCXXConstructorDeclWithMemberInitializer_NoTerseOutput) {
-+ ASSERT_TRUE(PrintedDeclCXX98Matches(
-+ "struct A {"
-+ " int m;"
-+ " A() : m(2) {}"
-+ "};",
-+ cxxConstructorDecl(ofClass(hasName("A"))).bind("id"),
-+ "A() : m(2) {\n}\n",
-+ [](PrintingPolicy &Policy){ Policy.TerseOutput = false; }));
-+}
-+
- TEST(DeclPrinter, TestCXXConstructorDecl5) {
- ASSERT_TRUE(PrintedDeclCXX11Matches(
- "struct A {"
-@@ -540,7 +568,7 @@
- " A(T&&... ts) : T(ts)... {}"
- "};",
- cxxConstructorDecl(ofClass(hasName("A"))).bind("id"),
-- "A<T...>(T &&...ts) : T(ts)... {}"));
-+ "A<T...>(T &&...ts)"));
- }
-
- TEST(DeclPrinter, TestCXXDestructorDecl1) {
diff --git a/development/qt-creator-llvm/patches/050_D40027_Fix-cursors-for-in-class-initializer-of-field-declarations.patch b/development/qt-creator-llvm/patches/050_D40027_Fix-cursors-for-in-class-initializer-of-field-declarations.patch
deleted file mode 100644
index 0e11237a5d85..000000000000
--- a/development/qt-creator-llvm/patches/050_D40027_Fix-cursors-for-in-class-initializer-of-field-declarations.patch
+++ /dev/null
@@ -1,33 +0,0 @@
---- a/tools/clang/test/Index/get-cursor.cpp
-+++ b/tools/clang/test/Index/get-cursor.cpp
-@@ -152,6 +152,11 @@
- void f_dynamic_noexcept() throw(int);
- void f_dynamic_noexcept_any() throw(...);
-
-+enum EnumType { Enumerator };
-+struct Z {
-+ EnumType e = Enumerator;
-+};
-+
- // RUN: c-index-test -cursor-at=%s:6:4 %s | FileCheck -check-prefix=CHECK-COMPLETION-1 %s
- // CHECK-COMPLETION-1: CXXConstructor=X:6:3
- // CHECK-COMPLETION-1-NEXT: Completion string: {TypedText X}{LeftParen (}{Placeholder int}{Comma , }{Placeholder int}{RightParen )}
-@@ -275,3 +280,6 @@
- // CHECK-FORRANGE: 141:18 DeclRefExpr=coll:140:20 Extent=[141:18 - 141:22] Spelling=coll ([141:18 - 141:22])
- // CHECK-FORRANGE: 142:11 DeclRefExpr=lv:141:13 Extent=[142:11 - 142:13] Spelling=lv ([142:11 - 142:13])
-
-+// RUN: c-index-test -cursor-at=%s:157:18 -std=c++11 %s | FileCheck -check-prefix=CHECK-INCLASSINITIALIZER %s
-+// CHECK-INCLASSINITIALIZER: 157:18 DeclRefExpr=Enumerator:155:17 Extent=[157:18 - 157:28] Spelling=Enumerator ([157:18 - 157:28])
-+
---- a/tools/clang/tools/libclang/CIndex.cpp
-+++ b/tools/clang/tools/libclang/CIndex.cpp
-@@ -877,6 +877,9 @@
- if (Expr *BitWidth = D->getBitWidth())
- return Visit(MakeCXCursor(BitWidth, StmtParent, TU, RegionOfInterest));
-
-+ if (Expr *Init = D->getInClassInitializer())
-+ return Visit(MakeCXCursor(Init, StmtParent, TU, RegionOfInterest));
-+
- return false;
- }
-
diff --git a/development/qt-creator-llvm/patches/060_D40072_Support-querying-whether-a-declaration-is-invalid.patch b/development/qt-creator-llvm/patches/060_D40072_Support-querying-whether-a-declaration-is-invalid.patch
deleted file mode 100644
index 992e1c88f4dd..000000000000
--- a/development/qt-creator-llvm/patches/060_D40072_Support-querying-whether-a-declaration-is-invalid.patch
+++ /dev/null
@@ -1,154 +0,0 @@
-diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
-index 3b5ea9fa53..f2397d1b63 100644
---- a/tools/clang/include/clang-c/Index.h
-+++ b/tools/clang/include/clang-c/Index.h
-@@ -33,6 +33,7 @@
- */
- #define CINDEX_VERSION_MAJOR 0
- #define CINDEX_VERSION_MINOR 43
-+#define CINDEX_VERSION_HAS_ISINVALIDECL_BACKPORTED
-
- #define CINDEX_VERSION_ENCODE(major, minor) ( \
- ((major) * 10000) \
-@@ -2616,6 +2617,16 @@ CINDEX_LINKAGE enum CXCursorKind clang_getCursorKind(CXCursor);
- */
- CINDEX_LINKAGE unsigned clang_isDeclaration(enum CXCursorKind);
-
-+/**
-+ * \brief Determine whether the given declaration is invalid.
-+ *
-+ * A declaration is invalid if it could not be parsed successfully.
-+ *
-+ * \returns non-zero if the cursor represents a declaration and it is
-+ * invalid, otherwise NULL.
-+ */
-+CINDEX_LINKAGE unsigned clang_isInvalidDeclaration(CXCursor);
-+
- /**
- * \brief Determine whether the given cursor kind represents a simple
- * reference.
-diff --git a/test/Index/opencl-types.cl b/test/Index/opencl-types.cl
-index fe0042aa20..d71893a220 100644
---- a/tools/clang/test/Index/opencl-types.cl
-+++ b/tools/clang/test/Index/opencl-types.cl
-@@ -16,11 +16,11 @@ void kernel testFloatTypes() {
- double4 vectorDouble;
- }
-
--// CHECK: VarDecl=scalarHalf:11:8 (Definition) [type=half] [typekind=Half] [isPOD=1]
-+// CHECK: VarDecl=scalarHalf:11:8 (Definition){{( \(invalid\))?}} [type=half] [typekind=Half] [isPOD=1]
- // CHECK: VarDecl=vectorHalf:12:9 (Definition) [type=half4] [typekind=Typedef] [canonicaltype=half __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1]
- // CHECK: VarDecl=scalarFloat:13:9 (Definition) [type=float] [typekind=Float] [isPOD=1]
- // CHECK: VarDecl=vectorFloat:14:10 (Definition) [type=float4] [typekind=Typedef] [canonicaltype=float __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1]
--// CHECK: VarDecl=scalarDouble:15:10 (Definition) [type=double] [typekind=Double] [isPOD=1]
-+// CHECK: VarDecl=scalarDouble:15:10 (Definition){{( \(invalid\))?}} [type=double] [typekind=Double] [isPOD=1]
- // CHECK: VarDecl=vectorDouble:16:11 (Definition) [type=double4] [typekind=Typedef] [canonicaltype=double __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1]
-
- #pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing : enable
-@@ -45,10 +45,10 @@ void kernel OCLImage3dROTest(read_only image3d_t scalarOCLImage3dRO);
- // CHECK: ParmDecl=scalarOCLImage2dArrayRO:32:61 (Definition) [type=__read_only image2d_array_t] [typekind=OCLImage2dArrayRO] [isPOD=1]
- // CHECK: ParmDecl=scalarOCLImage2dDepthRO:33:61 (Definition) [type=__read_only image2d_depth_t] [typekind=OCLImage2dDepthRO] [isPOD=1]
- // CHECK: ParmDecl=scalarOCLImage2dArrayDepthRO:34:72 (Definition) [type=__read_only image2d_array_depth_t] [typekind=OCLImage2dArrayDepthRO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dMSAARO:35:59 (Definition) [type=__read_only image2d_msaa_t] [typekind=OCLImage2dMSAARO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dArrayMSAARO:36:70 (Definition) [type=__read_only image2d_array_msaa_t] [typekind=OCLImage2dArrayMSAARO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dMSAADepthRO:37:70 (Definition) [type=__read_only image2d_msaa_depth_t] [typekind=OCLImage2dMSAADepthRO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dArrayMSAADepthRO:38:81 (Definition) [type=__read_only image2d_array_msaa_depth_t] [typekind=OCLImage2dArrayMSAADepthRO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dMSAARO:35:59 (Definition){{( \(invalid\))?}} [type=__read_only image2d_msaa_t] [typekind=OCLImage2dMSAARO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dArrayMSAARO:36:70 (Definition){{( \(invalid\))?}} [type=__read_only image2d_array_msaa_t] [typekind=OCLImage2dArrayMSAARO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dMSAADepthRO:37:70 (Definition){{( \(invalid\))?}} [type=__read_only image2d_msaa_depth_t] [typekind=OCLImage2dMSAADepthRO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dArrayMSAADepthRO:38:81 (Definition){{( \(invalid\))?}} [type=__read_only image2d_array_msaa_depth_t] [typekind=OCLImage2dArrayMSAADepthRO] [isPOD=1]
- // CHECK: ParmDecl=scalarOCLImage3dRO:39:50 (Definition) [type=__read_only image3d_t] [typekind=OCLImage3dRO] [isPOD=1]
-
- void kernel OCLImage1dWOTest(write_only image1d_t scalarOCLImage1dWO);
-@@ -71,11 +71,11 @@ void kernel OCLImage3dWOTest(write_only image3d_t scalarOCLImage3dWO);
- // CHECK: ParmDecl=scalarOCLImage2dArrayWO:58:62 (Definition) [type=__write_only image2d_array_t] [typekind=OCLImage2dArrayWO] [isPOD=1]
- // CHECK: ParmDecl=scalarOCLImage2dDepthWO:59:62 (Definition) [type=__write_only image2d_depth_t] [typekind=OCLImage2dDepthWO] [isPOD=1]
- // CHECK: ParmDecl=scalarOCLImage2dArrayDepthWO:60:73 (Definition) [type=__write_only image2d_array_depth_t] [typekind=OCLImage2dArrayDepthWO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dMSAAWO:61:60 (Definition) [type=__write_only image2d_msaa_t] [typekind=OCLImage2dMSAAWO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dArrayMSAAWO:62:71 (Definition) [type=__write_only image2d_array_msaa_t] [typekind=OCLImage2dArrayMSAAWO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dMSAADepthWO:63:71 (Definition) [type=__write_only image2d_msaa_depth_t] [typekind=OCLImage2dMSAADepthWO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dArrayMSAADepthWO:64:82 (Definition) [type=__write_only image2d_array_msaa_depth_t] [typekind=OCLImage2dArrayMSAADepthWO] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage3dWO:65:51 (Definition) [type=__write_only image3d_t] [typekind=OCLImage3dWO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dMSAAWO:61:60 (Definition){{( \(invalid\))?}} [type=__write_only image2d_msaa_t] [typekind=OCLImage2dMSAAWO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dArrayMSAAWO:62:71 (Definition){{( \(invalid\))?}} [type=__write_only image2d_array_msaa_t] [typekind=OCLImage2dArrayMSAAWO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dMSAADepthWO:63:71 (Definition){{( \(invalid\))?}} [type=__write_only image2d_msaa_depth_t] [typekind=OCLImage2dMSAADepthWO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dArrayMSAADepthWO:64:82 (Definition){{( \(invalid\))?}} [type=__write_only image2d_array_msaa_depth_t] [typekind=OCLImage2dArrayMSAADepthWO] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage3dWO:65:51 (Definition){{( \(invalid\))?}} [type=__write_only image3d_t] [typekind=OCLImage3dWO] [isPOD=1]
-
- void kernel OCLImage1dRWTest(read_write image1d_t scalarOCLImage1dRW);
- void kernel OCLImage1dArrayRWTest(read_write image1d_array_t scalarOCLImage1dArrayRW);
-@@ -97,10 +97,10 @@ void kernel OCLImage3dRWTest(read_write image3d_t scalarOCLImage3dRW);
- // CHECK: ParmDecl=scalarOCLImage2dArrayRW:84:62 (Definition) [type=__read_write image2d_array_t] [typekind=OCLImage2dArrayRW] [isPOD=1]
- // CHECK: ParmDecl=scalarOCLImage2dDepthRW:85:62 (Definition) [type=__read_write image2d_depth_t] [typekind=OCLImage2dDepthRW] [isPOD=1]
- // CHECK: ParmDecl=scalarOCLImage2dArrayDepthRW:86:73 (Definition) [type=__read_write image2d_array_depth_t] [typekind=OCLImage2dArrayDepthRW] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dMSAARW:87:60 (Definition) [type=__read_write image2d_msaa_t] [typekind=OCLImage2dMSAARW] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dArrayMSAARW:88:71 (Definition) [type=__read_write image2d_array_msaa_t] [typekind=OCLImage2dArrayMSAARW] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dMSAADepthRW:89:71 (Definition) [type=__read_write image2d_msaa_depth_t] [typekind=OCLImage2dMSAADepthRW] [isPOD=1]
--// CHECK: ParmDecl=scalarOCLImage2dArrayMSAADepthRW:90:82 (Definition) [type=__read_write image2d_array_msaa_depth_t] [typekind=OCLImage2dArrayMSAADepthRW] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dMSAARW:87:60 (Definition){{( \(invalid\))?}} [type=__read_write image2d_msaa_t] [typekind=OCLImage2dMSAARW] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dArrayMSAARW:88:71 (Definition){{( \(invalid\))?}} [type=__read_write image2d_array_msaa_t] [typekind=OCLImage2dArrayMSAARW] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dMSAADepthRW:89:71 (Definition){{( \(invalid\))?}} [type=__read_write image2d_msaa_depth_t] [typekind=OCLImage2dMSAADepthRW] [isPOD=1]
-+// CHECK: ParmDecl=scalarOCLImage2dArrayMSAADepthRW:90:82 (Definition){{( \(invalid\))?}} [type=__read_write image2d_array_msaa_depth_t] [typekind=OCLImage2dArrayMSAADepthRW] [isPOD=1]
- // CHECK: ParmDecl=scalarOCLImage3dRW:91:51 (Definition) [type=__read_write image3d_t] [typekind=OCLImage3dRW] [isPOD=1]
-
- void kernel intPipeTestRO(read_only pipe int scalarPipe);
-diff --git a/test/Index/print-type-size.cpp b/test/Index/print-type-size.cpp
-index 45de93f308..1ea5346273 100644
---- a/tools/clang/test/Index/print-type-size.cpp
-+++ b/tools/clang/test/Index/print-type-size.cpp
-@@ -4,8 +4,8 @@
-
- namespace basic {
-
--// CHECK64: VarDecl=v:[[@LINE+2]]:6 (Definition) [type=void] [typekind=Void]
--// CHECK32: VarDecl=v:[[@LINE+1]]:6 (Definition) [type=void] [typekind=Void]
-+// CHECK64: VarDecl=v:[[@LINE+2]]:6 (Definition) (invalid) [type=void] [typekind=Void]
-+// CHECK32: VarDecl=v:[[@LINE+1]]:6 (Definition) (invalid) [type=void] [typekind=Void]
- void v;
-
- // CHECK64: VarDecl=v1:[[@LINE+2]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=8] [alignof=8]
-diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
-index cf3581e259..759ed449a4 100644
---- a/tools/clang/tools/c-index-test/c-index-test.c
-+++ b/tools/clang/tools/c-index-test/c-index-test.c
-@@ -810,6 +810,8 @@ static void PrintCursor(CXCursor Cursor, const char *CommentSchemaFile) {
- printf(" (variadic)");
- if (clang_Cursor_isObjCOptional(Cursor))
- printf(" (@optional)");
-+ if (clang_isInvalidDeclaration(Cursor))
-+ printf(" (invalid)");
-
- switch (clang_getCursorExceptionSpecificationType(Cursor))
- {
-diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
-index 9ba4d5bf30..584de42e7c 100644
---- a/tools/clang/tools/libclang/CIndex.cpp
-+++ b/tools/clang/tools/libclang/CIndex.cpp
-@@ -5346,6 +5346,15 @@ unsigned clang_isDeclaration(enum CXCursorKind K) {
- (K >= CXCursor_FirstExtraDecl && K <= CXCursor_LastExtraDecl);
- }
-
-+unsigned clang_isInvalidDeclaration(CXCursor C) {
-+ if (clang_isDeclaration(C.kind)) {
-+ if (const Decl *D = getCursorDecl(C))
-+ return D->isInvalidDecl();
-+ }
-+
-+ return 0;
-+}
-+
- unsigned clang_isReference(enum CXCursorKind K) {
- return K >= CXCursor_FirstRef && K <= CXCursor_LastRef;
- }
-diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports
-index e0d178a529..7192baab6a 100644
---- a/tools/clang/tools/libclang/libclang.exports
-+++ b/tools/clang/tools/libclang/libclang.exports
-@@ -286,6 +286,7 @@ clang_isAttribute
- clang_isConstQualifiedType
- clang_isCursorDefinition
- clang_isDeclaration
-+clang_isInvalidDeclaration
- clang_isExpression
- clang_isFileMultipleIncludeGuarded
- clang_isFunctionTypeVariadic
diff --git a/development/qt-creator-llvm/patches/070_D40561_Fix-cursors-for-functions-with-trailing-return-type.patch b/development/qt-creator-llvm/patches/070_D40561_Fix-cursors-for-functions-with-trailing-return-type.patch
deleted file mode 100644
index 22084c5729a3..000000000000
--- a/development/qt-creator-llvm/patches/070_D40561_Fix-cursors-for-functions-with-trailing-return-type.patch
+++ /dev/null
@@ -1,79 +0,0 @@
---- a/tools/clang/test/Index/annotate-tokens.cpp
-+++ b/tools/clang/test/Index/annotate-tokens.cpp
-@@ -37,7 +37,9 @@ class C {
- ~C();
- };
-
--// RUN: c-index-test -test-annotate-tokens=%s:1:1:38:1 %s -fno-delayed-template-parsing | FileCheck %s
-+auto test5(X) -> X;
-+
-+// RUN: c-index-test -test-annotate-tokens=%s:1:1:41:1 %s -std=c++14 -fno-delayed-template-parsing | FileCheck %s
- // CHECK: Keyword: "struct" [1:1 - 1:7] StructDecl=bonk:1:8 (Definition)
- // CHECK: Identifier: "bonk" [1:8 - 1:12] StructDecl=bonk:1:8 (Definition)
- // CHECK: Punctuation: "{" [1:13 - 1:14] StructDecl=bonk:1:8 (Definition)
-@@ -184,6 +186,14 @@ class C {
- // CHECK: Punctuation: "}" [29:22 - 29:23] CompoundStmt=
- // CHECK: Punctuation: "~" [37:3 - 37:4] CXXDestructor=~C:37:3
- // CHECK: Identifier: "C" [37:4 - 37:5] CXXDestructor=~C:37:3
-+// CHECK: Keyword: "auto" [40:1 - 40:5] FunctionDecl=test5:40:6
-+// CHECK: Identifier: "test5" [40:6 - 40:11] FunctionDecl=test5:40:6
-+// CHECK: Punctuation: "(" [40:11 - 40:12] FunctionDecl=test5:40:6
-+// CHECK: Identifier: "X" [40:12 - 40:13] TypeRef=struct X:7:8
-+// CHECK: Punctuation: ")" [40:13 - 40:14] FunctionDecl=test5:40:6
-+// CHECK: Punctuation: "->" [40:15 - 40:17] FunctionDecl=test5:40:6
-+// CHECK: Identifier: "X" [40:18 - 40:19] TypeRef=struct X:7:8
-+// CHECK: Punctuation: ";" [40:19 - 40:20]
-
- // RUN: env LIBCLANG_DISABLE_CRASH_RECOVERY=1 c-index-test -test-annotate-tokens=%s:32:1:32:13 %s | FileCheck %s -check-prefix=CHECK2
- // CHECK2: Keyword: "if" [32:3 - 32:5] IfStmt=
---- a/tools/clang/tools/libclang/CIndex.cpp
-+++ b/tools/clang/tools/libclang/CIndex.cpp
-@@ -783,6 +783,16 @@ bool CursorVisitor::VisitDeclaratorDecl(DeclaratorDecl *DD) {
- return false;
- }
-
-+static bool HasTrailingReturnType(FunctionDecl *ND) {
-+ const QualType Ty = ND->getType();
-+ if (const FunctionType *AFT = Ty->getAs<FunctionType>()) {
-+ if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(AFT))
-+ return FT->hasTrailingReturn();
-+ }
-+
-+ return false;
-+}
-+
- /// \brief Compare two base or member initializers based on their source order.
- static int CompareCXXCtorInitializers(CXXCtorInitializer *const *X,
- CXXCtorInitializer *const *Y) {
-@@ -802,14 +812,16 @@ bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) {
- // written. This requires a bit of work.
- TypeLoc TL = TSInfo->getTypeLoc().IgnoreParens();
- FunctionTypeLoc FTL = TL.getAs<FunctionTypeLoc>();
-+ const bool HasTrailingRT = HasTrailingReturnType(ND);
-
- // If we have a function declared directly (without the use of a typedef),
- // visit just the return type. Otherwise, just visit the function's type
- // now.
-- if ((FTL && !isa<CXXConversionDecl>(ND) && Visit(FTL.getReturnLoc())) ||
-+ if ((FTL && !isa<CXXConversionDecl>(ND) && !HasTrailingRT &&
-+ Visit(FTL.getReturnLoc())) ||
- (!FTL && Visit(TL)))
- return true;
--
-+
- // Visit the nested-name-specifier, if present.
- if (NestedNameSpecifierLoc QualifierLoc = ND->getQualifierLoc())
- if (VisitNestedNameSpecifierLoc(QualifierLoc))
-@@ -825,7 +837,11 @@ bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) {
- // Visit the function parameters, if we have a function type.
- if (FTL && VisitFunctionTypeLoc(FTL, true))
- return true;
--
-+
-+ // Visit the function's trailing return type.
-+ if (FTL && HasTrailingRT && Visit(FTL.getReturnLoc()))
-+ return true;
-+
- // FIXME: Attributes?
- }
-
diff --git a/development/qt-creator-llvm/patches/080_D40643_Add-function-to-get-the-buffer-for-a-file.patch b/development/qt-creator-llvm/patches/080_D40643_Add-function-to-get-the-buffer-for-a-file.patch
deleted file mode 100644
index 998288dfe951..000000000000
--- a/development/qt-creator-llvm/patches/080_D40643_Add-function-to-get-the-buffer-for-a-file.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
-index f2397d1b63..0f4ade266c 100644
---- a/tools/clang/include/clang-c/Index.h
-+++ b/tools/clang/include/clang-c/Index.h
-@@ -34,6 +34,7 @@
- #define CINDEX_VERSION_MAJOR 0
- #define CINDEX_VERSION_MINOR 43
- #define CINDEX_VERSION_HAS_ISINVALIDECL_BACKPORTED
-+#define CINDEX_VERSION_HAS_GETFILECONTENTS_BACKPORTED
-
- #define CINDEX_VERSION_ENCODE(major, minor) ( \
- ((major) * 10000) \
-@@ -394,6 +395,21 @@ clang_isFileMultipleIncludeGuarded(CXTranslationUnit tu, CXFile file);
- CINDEX_LINKAGE CXFile clang_getFile(CXTranslationUnit tu,
- const char *file_name);
-
-+/**
-+ * \brief Retrieve the buffer associated with the given file.
-+ *
-+ * \param tu the translation unit
-+ *
-+ * \param file the file for which to retrieve the buffer.
-+ *
-+ * \param size [out] if non-NULL, will be set to the size of the buffer.
-+ *
-+ * \returns a pointer to the buffer in memory that holds the contents of
-+ * \p file, or a NULL pointer when the file is not loaded.
-+ */
-+CINDEX_LINKAGE const char *clang_getFileContents(CXTranslationUnit tu,
-+ CXFile file, size_t *size);
-+
- /**
- * \brief Returns non-zero if the \c file1 and \c file2 point to the same file,
- * or they are both NULL.
-diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
-index 13599e1910..7902e8a030 100644
---- a/tools/clang/tools/libclang/CIndex.cpp
-+++ b/tools/clang/tools/libclang/CIndex.cpp
-@@ -4148,6 +4148,27 @@ CXFile clang_getFile(CXTranslationUnit TU, const char *file_name) {
- return const_cast<FileEntry *>(FMgr.getFile(file_name));
- }
-
-+const char *clang_getFileContents(CXTranslationUnit TU, CXFile file,
-+ size_t *size) {
-+ if (isNotUsableTU(TU)) {
-+ LOG_BAD_TU(TU);
-+ return nullptr;
-+ }
-+
-+ const SourceManager &SM = cxtu::getASTUnit(TU)->getSourceManager();
-+ FileID fid = SM.translateFile(static_cast<FileEntry *>(file));
-+ bool Invalid = true;
-+ llvm::MemoryBuffer *buf = SM.getBuffer(fid, &Invalid);
-+ if (Invalid) {
-+ if (size)
-+ *size = 0;
-+ return nullptr;
-+ }
-+ if (size)
-+ *size = buf->getBufferSize();
-+ return buf->getBufferStart();
-+}
-+
- unsigned clang_isFileMultipleIncludeGuarded(CXTranslationUnit TU,
- CXFile file) {
- if (isNotUsableTU(TU)) {
-diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports
-index 7192baab6a..c788abb881 100644
---- a/tools/clang/tools/libclang/libclang.exports
-+++ b/tools/clang/tools/libclang/libclang.exports
-@@ -216,6 +216,7 @@ clang_getExceptionSpecificationType
- clang_getFieldDeclBitWidth
- clang_getExpansionLocation
- clang_getFile
-+clang_getFileContents
- clang_getFileLocation
- clang_getFileName
- clang_getFileTime
diff --git a/development/qt-creator-llvm/patches/090_D40746_Correctly-handle-line-table-entries-without-filenames-during-AST-serialization.patch b/development/qt-creator-llvm/patches/090_D40746_Correctly-handle-line-table-entries-without-filenames-during-AST-serialization.patch
deleted file mode 100644
index c165c69fe526..000000000000
--- a/development/qt-creator-llvm/patches/090_D40746_Correctly-handle-line-table-entries-without-filenames-during-AST-serialization.patch
+++ /dev/null
@@ -1,47 +0,0 @@
---- a/tools/clang/lib/Serialization/ASTReader.cpp
-+++ b/tools/clang/lib/Serialization/ASTReader.cpp
-@@ -1220,6 +1220,7 @@
-
- // Parse the file names
- std::map<int, int> FileIDs;
-+ FileIDs[-1] = -1; // For unspecified filenames.
- for (unsigned I = 0; Record[Idx]; ++I) {
- // Extract the file name
- auto Filename = ReadPath(F, Record, Idx);
---- a/tools/clang/lib/Serialization/ASTWriter.cpp
-+++ b/tools/clang/lib/Serialization/ASTWriter.cpp
-@@ -2363,12 +2363,13 @@
-
- // Emit the needed file names.
- llvm::DenseMap<int, int> FilenameMap;
-+ FilenameMap[-1] = -1; // For unspecified filenames.
- for (const auto &L : LineTable) {
- if (L.first.ID < 0)
- continue;
- for (auto &LE : L.second) {
- if (FilenameMap.insert(std::make_pair(LE.FilenameID,
-- FilenameMap.size())).second)
-+ FilenameMap.size() - 1)).second)
- AddPath(LineTable.getFilename(LE.FilenameID), Record);
- }
- }
---- a/tools/clang/test/PCH/line-directive-nofilename.h
-+++ b/tools/clang/test/PCH/line-directive-nofilename.h
-@@ -0,0 +1,5 @@
-+#line 42
-+int foo; // This should appear as at line-directive-nofilename.h:42
-+
-+#line 100 "foobar.h"
-+int bar; // This should appear as at foobar.h:100
---- a/tools/clang/test/PCH/line-directive-nofilename.c
-+++ b/tools/clang/test/PCH/line-directive-nofilename.c
-@@ -0,0 +1,9 @@
-+// RUN: %clang_cc1 -emit-pch -o %t %S/line-directive-nofilename.h
-+// RUN: not %clang_cc1 -include-pch %t -fsyntax-only %s 2>&1 | FileCheck %s
-+
-+// This causes an "error: redefinition" diagnostic. The notes will have the
-+// locations of the declarations from the PCH file.
-+double foo, bar;
-+
-+// CHECK: line-directive-nofilename.h:42:5: note: previous definition is here
-+// CHECK: foobar.h:100:5: note: previous definition is here
diff --git a/development/qt-creator-llvm/patches/100_D40841_Fix-a-crash-on-C++17-AST-for-non-trivial-construction-into-a-trivial-brace-initialize.patch b/development/qt-creator-llvm/patches/100_D40841_Fix-a-crash-on-C++17-AST-for-non-trivial-construction-into-a-trivial-brace-initialize.patch
deleted file mode 100644
index e759e4a9f538..000000000000
--- a/development/qt-creator-llvm/patches/100_D40841_Fix-a-crash-on-C++17-AST-for-non-trivial-construction-into-a-trivial-brace-initialize.patch
+++ /dev/null
@@ -1,117 +0,0 @@
---- a/tools/clang/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp
-+++ b/tools/clang/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp
-@@ -22,6 +22,7 @@
- //===----------------------------------------------------------------------===//
-
- #include "ClangSACheckers.h"
-+#include "clang/AST/ParentMap.h"
- #include "clang/AST/RecursiveASTVisitor.h"
- #include "clang/Basic/Builtins.h"
- #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
-@@ -262,8 +263,19 @@
- if (const MemRegion *Target = Ctor->getCXXThisVal().getAsRegion()) {
- // We just finished a base constructor. Now we can use the subclass's
- // type when resolving virtual calls.
-- const Decl *D = C.getLocationContext()->getDecl();
-- recordFixedType(Target, cast<CXXConstructorDecl>(D), C);
-+ const LocationContext *LCtx = C.getLocationContext();
-+
-+ // FIXME: In C++17 classes with non-virtual bases may be treated as
-+ // aggregates, and in such case no top-frame constructor will be called.
-+ // Figure out if we need to do anything in this case.
-+ // FIXME: Instead of relying on the ParentMap, we should have the
-+ // trigger-statement (InitListExpr in this case) available in this
-+ // callback, ideally as part of CallEvent.
-+ if (dyn_cast_or_null<InitListExpr>(
-+ LCtx->getParentMap().getParent(Ctor->getOriginExpr())))
-+ return;
-+
-+ recordFixedType(Target, cast<CXXConstructorDecl>(LCtx->getDecl()), C);
- }
- return;
- }
---- a/tools/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
-+++ b/tools/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
-@@ -14,6 +14,7 @@
- #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
- #include "clang/AST/DeclCXX.h"
- #include "clang/AST/StmtCXX.h"
-+#include "clang/AST/ParentMap.h"
- #include "clang/Basic/PrettyStackTrace.h"
- #include "clang/StaticAnalyzer/Core/CheckerManager.h"
- #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
-@@ -267,6 +268,23 @@
- }
- // FALLTHROUGH
- case CXXConstructExpr::CK_NonVirtualBase:
-+ // In C++17, classes with non-virtual bases may be aggregates, so they would
-+ // be initialized as aggregates without a constructor call, so we may have
-+ // a base class constructed directly into an initializer list without
-+ // having the derived-class constructor call on the previous stack frame.
-+ // Initializer lists may be nested into more initializer lists that
-+ // correspond to surrounding aggregate initializations.
-+ // FIXME: For now this code essentially bails out. We need to find the
-+ // correct target region and set it.
-+ // FIXME: Instead of relying on the ParentMap, we should have the
-+ // trigger-statement (InitListExpr in this case) passed down from CFG or
-+ // otherwise always available during construction.
-+ if (dyn_cast_or_null<InitListExpr>(LCtx->getParentMap().getParent(CE))) {
-+ MemRegionManager &MRMgr = getSValBuilder().getRegionManager();
-+ Target = MRMgr.getCXXTempObjectRegion(CE, LCtx);
-+ break;
-+ }
-+ // FALLTHROUGH
- case CXXConstructExpr::CK_Delegating: {
- const CXXMethodDecl *CurCtor = cast<CXXMethodDecl>(LCtx->getDecl());
- Loc ThisPtr = getSValBuilder().getCXXThis(CurCtor,
---- a/tools/clang/test/Analysis/initializer.cpp
-+++ a/tools/clang/test/Analysis/initializer.cpp
-@@ -1,4 +1,5 @@
- // RUN: %clang_analyze_cc1 -analyzer-checker=core,unix.Malloc,debug.ExprInspection -analyzer-config c++-inlining=constructors -std=c++11 -verify %s
-+// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix.Malloc,cplusplus.NewDeleteLeaks,debug.ExprInspection -analyzer-config c++-inlining=constructors -std=c++17 -DCPLUSPLUS17 -verify %s
-
- void clang_analyzer_eval(bool);
-
-@@ -224,3 +225,42 @@
- const char(&f)[2];
- };
- }
-+
-+namespace CXX17_aggregate_construction {
-+struct A {
-+ A();
-+};
-+
-+struct B: public A {
-+};
-+
-+struct C: public B {
-+};
-+
-+struct D: public virtual A {
-+};
-+
-+// In C++17, classes B and C are aggregates, so they will be constructed
-+// without actually calling their trivial constructor. Used to crash.
-+void foo() {
-+ B b = {}; // no-crash
-+ const B &bl = {}; // no-crash
-+ B &&br = {}; // no-crash
-+
-+ C c = {}; // no-crash
-+ const C &cl = {}; // no-crash
-+ C &&cr = {}; // no-crash
-+
-+ D d = {}; // no-crash
-+
-+#ifdef CPLUSPLUS17
-+ C cd = {{}}; // no-crash
-+ const C &cdl = {{}}; // no-crash
-+ C &&cdr = {{}}; // no-crash
-+
-+ const B &bll = {{}}; // no-crash
-+ const B &bcl = C({{}}); // no-crash
-+ B &&bcr = C({{}}); // no-crash
-+#endif
-+}
-+}
diff --git a/development/qt-creator-llvm/patches/110_D41016_Fix-crash-in-unused-lambda-capture-warning-for-VLAs.patch b/development/qt-creator-llvm/patches/110_D41016_Fix-crash-in-unused-lambda-capture-warning-for-VLAs.patch
deleted file mode 100644
index f9743162ec4d..000000000000
--- a/development/qt-creator-llvm/patches/110_D41016_Fix-crash-in-unused-lambda-capture-warning-for-VLAs.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- a/tools/clang/include/clang/Sema/ScopeInfo.h
-+++ b/tools/clang/include/clang/Sema/ScopeInfo.h
-@@ -560,6 +560,7 @@
- void markUsed(bool IsODRUse) { (IsODRUse ? ODRUsed : NonODRUsed) = true; }
-
- VarDecl *getVariable() const {
-+ assert(isVariableCapture());
- return VarAndNestedAndThis.getPointer();
- }
-
---- a/tools/clang/lib/Sema/SemaLambda.cpp
-+++ b/tools/clang/lib/Sema/SemaLambda.cpp
-@@ -1481,6 +1481,9 @@
- if (CaptureHasSideEffects(From))
- return;
-
-+ if (From.isVLATypeCapture())
-+ return;
-+
- auto diag = Diag(From.getLocation(), diag::warn_unused_lambda_capture);
- if (From.isThisCapture())
- diag << "'this'";
---- a/tools/clang/test/SemaCXX/warn-unused-lambda-capture.cpp
-+++ b/tools/clang/test/SemaCXX/warn-unused-lambda-capture.cpp
-@@ -191,3 +191,12 @@
- void test_use_template() {
- test_templated<int>(); // expected-note{{in instantiation of function template specialization 'test_templated<int>' requested here}}
- }
-+
-+namespace pr35555 {
-+int a;
-+void b() {
-+ int c[a];
-+ auto vla_used = [&c] { return c[0]; };
-+ auto vla_unused = [&c] {}; // expected-warning{{lambda capture 'c' is not used}}
-+}
-+} // namespace pr35555
diff --git a/development/qt-creator-llvm/patches/120_D41688_Fix-crash-on-code-completion-in-comment-in-included-file.patch b/development/qt-creator-llvm/patches/120_D41688_Fix-crash-on-code-completion-in-comment-in-included-file.patch
deleted file mode 100644
index 14fe74479825..000000000000
--- a/development/qt-creator-llvm/patches/120_D41688_Fix-crash-on-code-completion-in-comment-in-included-file.patch
+++ /dev/null
@@ -1,47 +0,0 @@
---- a/tools/clang/lib/Lex/PPCaching.cpp
-+++ b/tools/clang/lib/Lex/PPCaching.cpp
-@@ -105,8 +105,10 @@
- }
-
- void Preprocessor::EnterCachingLexMode() {
-- if (InCachingLexMode())
-+ if (InCachingLexMode()) {
-+ assert(CurLexerKind == CLK_CachingLexer && "Unexpected lexer kind");
- return;
-+ }
-
- PushIncludeMacroStack();
- CurLexerKind = CLK_CachingLexer;
---- a/tools/clang/lib/Lex/PPLexerChange.cpp
-+++ b/tools/clang/lib/Lex/PPLexerChange.cpp
-@@ -444,6 +444,7 @@
- }
-
- CurPPLexer = nullptr;
-+ recomputeCurLexerKind();
- return true;
- }
-
---- /dev/null
-+++ b/tools/clang/test/CodeCompletion/Inputs/comments.h
-@@ -0,0 +1,4 @@
-+// PR32732
-+struct B {
-+ // <- code completion
-+};
---- /dev/null
-+++ b/tools/clang/test/CodeCompletion/comments.cpp
-@@ -0,0 +1,13 @@
-+// Note: the run lines follow their respective tests, since line/column
-+// matter in this test.
-+
-+#include "comments.h"
-+
-+struct A {
-+ // <- code completion
-+ /* <- code completion */
-+};
-+
-+// RUN: %clang_cc1 -I %S/Inputs -fsyntax-only -code-completion-at=%s:7:6 %s
-+// RUN: %clang_cc1 -I %S/Inputs -fsyntax-only -code-completion-at=%s:8:6 %s
-+// RUN: %clang_cc1 -I %S/Inputs -fsyntax-only -code-completion-at=%S/Inputs/comments.h:3:6 %s
diff --git a/development/qt-creator-llvm/patches/130_QTCREATORBUG-15157_Link-with-clazy_clang.patch b/development/qt-creator-llvm/patches/130_QTCREATORBUG-15157_Link-with-clazy_clang.patch
deleted file mode 100644
index 60acd6d9fa66..000000000000
--- a/development/qt-creator-llvm/patches/130_QTCREATORBUG-15157_Link-with-clazy_clang.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff --git a/tools/clang/tools/libclang/CIndex.cpp b/tools/clang/tools/libclang/CIndex.cpp
-index 66b6edc8b1..281ab77c23 100644
---- a/tools/clang/tools/libclang/CIndex.cpp
-+++ b/tools/clang/tools/libclang/CIndex.cpp
-@@ -8479,4 +8479,8 @@ static int LLVM_ATTRIBUTE_UNUSED ClangTidyPluginAnchorDestination =
- extern volatile int ClangIncludeFixerPluginAnchorSource;
- static int LLVM_ATTRIBUTE_UNUSED ClangIncludeFixerPluginAnchorDestination =
- ClangIncludeFixerPluginAnchorSource;
-+
-+// This anchor is used to force the linker to link the clazy plugin.
-+extern volatile int ClazyPluginAnchorSource;
-+static int LLVM_ATTRIBUTE_UNUSED ClazyPluginAnchorDestination = ClazyPluginAnchorSource;
- #endif
-diff --git a/tools/clang/tools/libclang/CMakeLists.txt b/tools/clang/tools/libclang/CMakeLists.txt
-index 4440637820..6798d2ee8b 100644
---- a/tools/clang/tools/libclang/CMakeLists.txt
-+++ b/tools/clang/tools/libclang/CMakeLists.txt
-@@ -51,6 +51,7 @@ if (TARGET clangTidyPlugin)
- add_definitions(-DCLANG_TOOL_EXTRA_BUILD)
- list(APPEND LIBS clangTidyPlugin)
- list(APPEND LIBS clangIncludeFixerPlugin)
-+ list(APPEND LIBS clazyPlugin)
- endif ()
-
- find_library(DL_LIBRARY_PATH dl)
diff --git a/development/qt-creator-llvm/patches/140_QTCREATORBUG-15157_Link-with-clazy_extra.patch b/development/qt-creator-llvm/patches/140_QTCREATORBUG-15157_Link-with-clazy_extra.patch
deleted file mode 100644
index f481376fbcff..000000000000
--- a/development/qt-creator-llvm/patches/140_QTCREATORBUG-15157_Link-with-clazy_extra.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/tools/clang/tools/extra/CMakeLists.txt b/tools/clang/tools/extra/CMakeLists.txt
-index 760340a6..53f720c4 100644
---- a/tools/clang/tools/extra/CMakeLists.txt
-+++ b/tools/clang/tools/extra/CMakeLists.txt
-@@ -5,6 +5,8 @@ if(CLANG_ENABLE_STATIC_ANALYZER)
- add_subdirectory(clang-tidy)
- add_subdirectory(clang-tidy-vs)
- endif()
-+set(CLAZY_BUILD_WITH_CLANG 1)
-+add_subdirectory(clazy)
-
- add_subdirectory(change-namespace)
- add_subdirectory(clang-query)
diff --git a/development/qt-creator-llvm/patches/150_QTCREATORBUG-15157_Link-with-clazy_llvm.patch b/development/qt-creator-llvm/patches/150_QTCREATORBUG-15157_Link-with-clazy_llvm.patch
deleted file mode 100644
index 8862c35f5cae..000000000000
--- a/development/qt-creator-llvm/patches/150_QTCREATORBUG-15157_Link-with-clazy_llvm.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git a/lib/Transforms/CMakeLists.txt b/lib/Transforms/CMakeLists.txt
-index 67bdeb27212..7fcddb15904 100644
---- a/lib/Transforms/CMakeLists.txt
-+++ b/lib/Transforms/CMakeLists.txt
-@@ -4,6 +4,5 @@ add_subdirectory(InstCombine)
- add_subdirectory(Scalar)
- add_subdirectory(IPO)
- add_subdirectory(Vectorize)
--add_subdirectory(Hello)
- add_subdirectory(ObjCARC)
- add_subdirectory(Coroutines)
-diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
-index 6cf5103bf44..0b9608a2e52 100644
---- a/test/CMakeLists.txt
-+++ b/test/CMakeLists.txt
-@@ -35,7 +35,6 @@ endif()
- set(LLVM_TEST_DEPENDS
- BugpointPasses
- FileCheck
-- LLVMHello
- UnitTests
- bugpoint
- count
diff --git a/development/qt-creator-llvm/patches/160_QTCREATORBUG-15449_Fix-files-lock-on-Windows.patch b/development/qt-creator-llvm/patches/160_QTCREATORBUG-15449_Fix-files-lock-on-Windows.patch
deleted file mode 100644
index 9a8c6028fd9e..000000000000
--- a/development/qt-creator-llvm/patches/160_QTCREATORBUG-15449_Fix-files-lock-on-Windows.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/lib/Support/MemoryBuffer.cpp b/lib/Support/MemoryBuffer.cpp
-index 85e782b2c04..95f10753d96 100644
---- a/lib/Support/MemoryBuffer.cpp
-+++ b/lib/Support/MemoryBuffer.cpp
-@@ -284,6 +284,11 @@ static bool shouldUseMmap(int FD,
- bool RequiresNullTerminator,
- int PageSize,
- bool IsVolatile) {
-+#ifdef _WIN32
-+ // Do not use mmap on Windows in order to avoid file locking
-+ return false;
-+#endif
-+
- // mmap may leave the buffer without null terminator if the file size changed
- // by the time the last page is mapped in, so avoid it if the file size is
- // likely to change.
diff --git a/development/qt-creator-llvm/patches/170_D40013_DeclPrinter-Allow-printing-fully-qualified-name.patch b/development/qt-creator-llvm/patches/170_D40013_DeclPrinter-Allow-printing-fully-qualified-name.patch
deleted file mode 100644
index 304e80a2ff92..000000000000
--- a/development/qt-creator-llvm/patches/170_D40013_DeclPrinter-Allow-printing-fully-qualified-name.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From 363747b90f66f097fd45a6cd665adbaf7612188a Mon Sep 17 00:00:00 2001
-From: Nikolai Kosjar <nikolai.kosjar@qt.io>
-Date: Mon, 15 Jan 2018 12:51:18 +0100
-Subject: [PATCH 2/3] Backport: [DeclPrinter] Allow printing fully qualified
- name of function declaration
-
-https://reviews.llvm.org/D40013
----
- include/clang/AST/PrettyPrinter.h | 7 +++++-
- lib/AST/DeclPrinter.cpp | 16 ++++++++----
- unittests/AST/DeclPrinterTest.cpp | 51 ++++++++++++++++++++++++++++++++++++---
- 3 files changed, 64 insertions(+), 10 deletions(-)
-
-diff --git a/include/clang/AST/PrettyPrinter.h b/include/clang/AST/PrettyPrinter.h
-index 274df220e1..edcef0ae24 100644
---- a/tools/clang/include/clang/AST/PrettyPrinter.h
-+++ b/tools/clang/include/clang/AST/PrettyPrinter.h
-@@ -50,7 +50,8 @@ struct PrintingPolicy {
- UseVoidForZeroParams(!LO.CPlusPlus),
- TerseOutput(false), PolishForDeclaration(false),
- Half(LO.Half), MSWChar(LO.MicrosoftExt && !LO.WChar),
-- IncludeNewlines(true), MSVCFormatting(false) { }
-+ IncludeNewlines(true), MSVCFormatting(false),
-+ FullyQualifiedName(false) { }
-
- /// \brief Adjust this printing policy for cases where it's known that
- /// we're printing C++ code (for instance, if AST dumping reaches a
-@@ -200,6 +201,10 @@ struct PrintingPolicy {
- /// prints anonymous namespaces as `anonymous namespace' and does not insert
- /// spaces after template arguments.
- bool MSVCFormatting : 1;
-+
-+ /// When true, print the fully qualified name of function declarations.
-+ /// This is the opposite of SuppressScope and thus overrules it.
-+ bool FullyQualifiedName : 1;
- };
-
- } // end namespace clang
-diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp
-index 37f08a4985..ea37abe8f6 100644
---- a/tools/clang/lib/AST/DeclPrinter.cpp
-+++ b/tools/clang/lib/AST/DeclPrinter.cpp
-@@ -510,13 +510,19 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
- PrintingPolicy SubPolicy(Policy);
- SubPolicy.SuppressSpecifiers = false;
- std::string Proto;
-- if (!Policy.SuppressScope) {
-- if (const NestedNameSpecifier *NS = D->getQualifier()) {
-- llvm::raw_string_ostream OS(Proto);
-- NS->print(OS, Policy);
-+
-+ if (Policy.FullyQualifiedName) {
-+ Proto += D->getQualifiedNameAsString();
-+ } else {
-+ if (!Policy.SuppressScope) {
-+ if (const NestedNameSpecifier *NS = D->getQualifier()) {
-+ llvm::raw_string_ostream OS(Proto);
-+ NS->print(OS, Policy);
-+ }
- }
-+ Proto += D->getNameInfo().getAsString();
- }
-- Proto += D->getNameInfo().getAsString();
-+
- if (GuideDecl)
- Proto = GuideDecl->getDeducedTemplate()->getDeclName().getAsString();
- if (const TemplateArgumentList *TArgs = D->getTemplateSpecializationArgs()) {
-diff --git a/unittests/AST/DeclPrinterTest.cpp b/unittests/AST/DeclPrinterTest.cpp
-index dc1977d876..4cf8bce20e 100644
---- a/tools/clang/unittests/AST/DeclPrinterTest.cpp
-+++ b/tools/clang/unittests/AST/DeclPrinterTest.cpp
-@@ -104,15 +104,17 @@ PrintedDeclMatches(StringRef Code, const std::vector<std::string> &Args,
- return ::testing::AssertionSuccess();
- }
-
--::testing::AssertionResult PrintedDeclCXX98Matches(StringRef Code,
-- StringRef DeclName,
-- StringRef ExpectedPrinted) {
-+::testing::AssertionResult
-+PrintedDeclCXX98Matches(StringRef Code, StringRef DeclName,
-+ StringRef ExpectedPrinted,
-+ PrintingPolicyModifier PolicyModifier = nullptr) {
- std::vector<std::string> Args(1, "-std=c++98");
- return PrintedDeclMatches(Code,
- Args,
- namedDecl(hasName(DeclName)).bind("id"),
- ExpectedPrinted,
-- "input.cc");
-+ "input.cc",
-+ PolicyModifier);
- }
-
- ::testing::AssertionResult
-@@ -350,6 +352,47 @@ TEST(DeclPrinter, TestFunctionDecl1) {
- "void A()"));
- }
-
-+TEST(DeclPrinter, TestFreeFunctionDecl_FullyQualifiedName) {
-+ ASSERT_TRUE(PrintedDeclCXX98Matches(
-+ "void A();",
-+ "A",
-+ "void A()",
-+ [](PrintingPolicy &Policy){ Policy.FullyQualifiedName = true; }));
-+}
-+
-+TEST(DeclPrinter, TestFreeFunctionDeclInNamespace_FullyQualifiedName) {
-+ ASSERT_TRUE(PrintedDeclCXX98Matches(
-+ "namespace X { void A(); };",
-+ "A",
-+ "void X::A()",
-+ [](PrintingPolicy &Policy){ Policy.FullyQualifiedName = true; }));
-+}
-+
-+TEST(DeclPrinter, TestMemberFunction_FullyQualifiedName) {
-+ ASSERT_TRUE(PrintedDeclCXX98Matches(
-+ "struct X { void A(); };",
-+ "A",
-+ "void X::A()",
-+ [](PrintingPolicy &Policy){ Policy.FullyQualifiedName = true; }));
-+}
-+
-+TEST(DeclPrinter, TestMemberFunctionInNamespace_FullyQualifiedName) {
-+ ASSERT_TRUE(PrintedDeclCXX98Matches(
-+ "namespace Z { struct X { void A(); }; }",
-+ "A",
-+ "void Z::X::A()",
-+ [](PrintingPolicy &Policy){ Policy.FullyQualifiedName = true; }));
-+}
-+
-+TEST(DeclPrinter, TestMemberFunctionOutside_FullyQualifiedName) {
-+ ASSERT_TRUE(PrintedDeclCXX98Matches(
-+ "struct X { void A(); };"
-+ "void X::A() {}",
-+ functionDecl(hasName("A"), isDefinition()).bind("id"),
-+ "void X::A()",
-+ [](PrintingPolicy &Policy){ Policy.FullyQualifiedName = true; }));
-+}
-+
- TEST(DeclPrinter, TestFunctionDecl2) {
- ASSERT_TRUE(PrintedDeclCXX98Matches(
- "void A() {}",
---
-2.15.1
-
diff --git a/development/qt-creator-llvm/patches/180_D39903_libclang-Allow-pretty-printing-declarations.patch b/development/qt-creator-llvm/patches/180_D39903_libclang-Allow-pretty-printing-declarations.patch
deleted file mode 100644
index 27b2e2a01e4e..000000000000
--- a/development/qt-creator-llvm/patches/180_D39903_libclang-Allow-pretty-printing-declarations.patch
+++ /dev/null
@@ -1,546 +0,0 @@
-diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
-index 0f4ade266c..f188ec9d8c 100644
---- a/tools/clang/include/clang-c/Index.h
-+++ b/tools/clang/include/clang-c/Index.h
-@@ -35,6 +35,7 @@
- #define CINDEX_VERSION_MINOR 43
- #define CINDEX_VERSION_HAS_ISINVALIDECL_BACKPORTED
- #define CINDEX_VERSION_HAS_GETFILECONTENTS_BACKPORTED
-+#define CINDEX_VERSION_HAS_PRETTYDECL_BACKPORTED
-
- #define CINDEX_VERSION_ENCODE(major, minor) ( \
- ((major) * 10000) \
-@@ -4066,6 +4067,90 @@ CINDEX_LINKAGE CXSourceRange clang_Cursor_getSpellingNameRange(CXCursor,
- unsigned pieceIndex,
- unsigned options);
-
-+/**
-+ * \brief Opaque pointer representing a policy that controls pretty printing
-+ * for \c clang_getCursorPrettyPrinted.
-+ */
-+typedef void *CXPrintingPolicy;
-+
-+/**
-+ * \brief Properties for the printing policy.
-+ *
-+ * See \c clang::PrintingPolicy for more information.
-+ */
-+enum CXPrintingPolicyProperty {
-+ CXPrintingPolicy_Indentation,
-+ CXPrintingPolicy_SuppressSpecifiers,
-+ CXPrintingPolicy_SuppressTagKeyword,
-+ CXPrintingPolicy_IncludeTagDefinition,
-+ CXPrintingPolicy_SuppressScope,
-+ CXPrintingPolicy_SuppressUnwrittenScope,
-+ CXPrintingPolicy_SuppressInitializers,
-+ CXPrintingPolicy_ConstantArraySizeAsWritten,
-+ CXPrintingPolicy_AnonymousTagLocations,
-+ CXPrintingPolicy_SuppressStrongLifetime,
-+ CXPrintingPolicy_SuppressLifetimeQualifiers,
-+ CXPrintingPolicy_SuppressTemplateArgsInCXXConstructors,
-+ CXPrintingPolicy_Bool,
-+ CXPrintingPolicy_Restrict,
-+ CXPrintingPolicy_Alignof,
-+ CXPrintingPolicy_UnderscoreAlignof,
-+ CXPrintingPolicy_UseVoidForZeroParams,
-+ CXPrintingPolicy_TerseOutput,
-+ CXPrintingPolicy_PolishForDeclaration,
-+ CXPrintingPolicy_Half,
-+ CXPrintingPolicy_MSWChar,
-+ CXPrintingPolicy_IncludeNewlines,
-+ CXPrintingPolicy_MSVCFormatting,
-+ CXPrintingPolicy_ConstantsAsWritten, /* Ops, not yet there in clang 5.0 and we do not need it. */
-+ CXPrintingPolicy_SuppressImplicitBase, /* Ops, not yet there in clang 5.0 and we do not need it. */
-+ CXPrintingPolicy_FullyQualifiedName,
-+
-+ CXPrintingPolicy_LastProperty = CXPrintingPolicy_FullyQualifiedName
-+};
-+
-+/**
-+ * \brief Get a property value for the given printing policy.
-+ */
-+CINDEX_LINKAGE unsigned
-+clang_PrintingPolicy_getProperty(CXPrintingPolicy Policy,
-+ enum CXPrintingPolicyProperty Property);
-+
-+/**
-+ * \brief Set a property value for the given printing policy.
-+ */
-+CINDEX_LINKAGE void
-+clang_PrintingPolicy_setProperty(CXPrintingPolicy Policy,
-+ enum CXPrintingPolicyProperty Property,
-+ unsigned Value);
-+
-+/**
-+ * \brief Retrieve the default policy for the cursor.
-+ *
-+ * The policy should be released after use with \c
-+ * clang_PrintingPolicy_dispose.
-+ */
-+CINDEX_LINKAGE CXPrintingPolicy clang_getCursorPrintingPolicy(CXCursor);
-+
-+/**
-+ * \brief Release a printing policy.
-+ */
-+CINDEX_LINKAGE void clang_PrintingPolicy_dispose(CXPrintingPolicy Policy);
-+
-+/**
-+ * \brief Pretty print declarations.
-+ *
-+ * \param Cursor The cursor representing a declaration.
-+ *
-+ * \param Policy The policy to control the entities being printed. If
-+ * NULL, a default policy is used.
-+ *
-+ * \returns The pretty printed declaration or the empty string for
-+ * other cursors.
-+ */
-+CINDEX_LINKAGE CXString clang_getCursorPrettyPrinted(CXCursor Cursor,
-+ CXPrintingPolicy Policy);
-+
- /**
- * \brief Retrieve the display name for the entity referenced by this cursor.
- *
-diff --git a/test/Index/print-display-names.cpp b/test/Index/print-display-names.cpp
-index 94fe4665e6..5ba10e43bc 100644
---- a/tools/clang/test/Index/print-display-names.cpp
-+++ b/tools/clang/test/Index/print-display-names.cpp
-@@ -12,9 +12,20 @@ void g(ClassTmpl<T, T>);
-
- template<> void g<int>(ClassTmpl<int, int>);
-
--// RUN: c-index-test -test-load-source all-display %s | FileCheck %s
--// CHECK: print-display-names.cpp:2:7: ClassTemplate=ClassTmpl<T, typename>:2:7
--// CHECK: print-display-names.cpp:6:16: ClassDecl=ClassTmpl<Integer, Integer>:6:16 (Definition)
--// CHECK: print-display-names.cpp:8:6: FunctionDecl=f(ClassTmpl<float, Integer>):8:6
--// CHECK: print-display-names.cpp:11:6: FunctionTemplate=g(ClassTmpl<T, T>):11:6
--// CHECK: print-display-names.cpp:13:17: FunctionDecl=g<>(ClassTmpl<int, int>):13:17 [Specialization of g:11:6]
-+// RUN: c-index-test -test-load-source all-display %s | FileCheck %s --check-prefix=DISPLAY_NAME
-+// DISPLAY_NAME: print-display-names.cpp:2:7: ClassTemplate=ClassTmpl<T, typename>:2:7
-+// DISPLAY_NAME: print-display-names.cpp:6:16: ClassDecl=ClassTmpl<Integer, Integer>:6:16 (Definition)
-+// DISPLAY_NAME: print-display-names.cpp:8:6: FunctionDecl=f(ClassTmpl<float, Integer>):8:6
-+// DISPLAY_NAME: print-display-names.cpp:11:6: FunctionTemplate=g(ClassTmpl<T, T>):11:6
-+// DISPLAY_NAME: print-display-names.cpp:13:17: FunctionDecl=g<>(ClassTmpl<int, int>):13:17 [Specialization of g:11:6]
-+
-+// RUN: env CINDEXTEST_PRINTINGPOLICY_TERSEOUTPUT=1 c-index-test -test-load-source all-pretty %s | FileCheck %s --check-prefix=PRETTY
-+// PRETTY: print-display-names.cpp:2:7: ClassTemplate=template <typename T, typename > class ClassTmpl {}:2:7 (Definition) Extent=[1:1 - 2:20]
-+// PRETTY: print-display-names.cpp:4:13: TypedefDecl=typedef int Integer:4:13 (Definition) Extent=[4:1 - 4:20]
-+// PRETTY: print-display-names.cpp:6:16: ClassDecl=template<> class ClassTmpl<int, int> {}:6:16 (Definition) [Specialization of ClassTmpl:2:7] Extent=[6:1 - 6:43]
-+// PRETTY: print-display-names.cpp:8:6: FunctionDecl=void f(ClassTmpl<float, Integer> p):8:6 Extent=[8:1 - 8:36]
-+// PRETTY: print-display-names.cpp:8:34: ParmDecl=ClassTmpl<float, Integer> p:8:34 (Definition) Extent=[8:8 - 8:35]
-+// PRETTY: print-display-names.cpp:11:6: FunctionTemplate=template <typename T> void g(ClassTmpl<T, T>):11:6 Extent=[10:1 - 11:24]
-+// PRETTY: print-display-names.cpp:11:23: ParmDecl=ClassTmpl<T, T>:11:23 (Definition) Extent=[11:8 - 11:23]
-+// PRETTY: print-display-names.cpp:13:17: FunctionDecl=template<> void g<int>(ClassTmpl<int, int>):13:17 [Specialization of g:11:6] [Template arg 0: kind: 1, type: int] Extent=[13:1 - 13:44]
-+// PRETTY: print-display-names.cpp:13:43: ParmDecl=ClassTmpl<int, int>:13:43 (Definition) Extent=[13:24 - 13:43]
-diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
-index 759ed449a4..ce2f549234 100644
---- a/tools/clang/tools/c-index-test/c-index-test.c
-+++ b/tools/clang/tools/c-index-test/c-index-test.c
-@@ -86,6 +86,69 @@ static unsigned getDefaultParsingOptions() {
- return options;
- }
-
-+static void ModifyPrintingPolicyAccordingToEnv(CXPrintingPolicy Policy) {
-+ struct Mapping {
-+ const char *name;
-+ enum CXPrintingPolicyProperty property;
-+ };
-+ struct Mapping mappings[] = {
-+ {"CINDEXTEST_PRINTINGPOLICY_INDENTATION", CXPrintingPolicy_Indentation},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSSPECIFIERS",
-+ CXPrintingPolicy_SuppressSpecifiers},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSTAGKEYWORD",
-+ CXPrintingPolicy_SuppressTagKeyword},
-+ {"CINDEXTEST_PRINTINGPOLICY_INCLUDETAGDEFINITION",
-+ CXPrintingPolicy_IncludeTagDefinition},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSSCOPE",
-+ CXPrintingPolicy_SuppressScope},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSUNWRITTENSCOPE",
-+ CXPrintingPolicy_SuppressUnwrittenScope},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSINITIALIZERS",
-+ CXPrintingPolicy_SuppressInitializers},
-+ {"CINDEXTEST_PRINTINGPOLICY_CONSTANTARRAYSIZEASWRITTEN",
-+ CXPrintingPolicy_ConstantArraySizeAsWritten},
-+ {"CINDEXTEST_PRINTINGPOLICY_ANONYMOUSTAGLOCATIONS",
-+ CXPrintingPolicy_AnonymousTagLocations},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSSTRONGLIFETIME",
-+ CXPrintingPolicy_SuppressStrongLifetime},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSLIFETIMEQUALIFIERS",
-+ CXPrintingPolicy_SuppressLifetimeQualifiers},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSTEMPLATEARGSINCXXCONSTRUCTORS",
-+ CXPrintingPolicy_SuppressTemplateArgsInCXXConstructors},
-+ {"CINDEXTEST_PRINTINGPOLICY_BOOL", CXPrintingPolicy_Bool},
-+ {"CINDEXTEST_PRINTINGPOLICY_RESTRICT", CXPrintingPolicy_Restrict},
-+ {"CINDEXTEST_PRINTINGPOLICY_ALIGNOF", CXPrintingPolicy_Alignof},
-+ {"CINDEXTEST_PRINTINGPOLICY_UNDERSCOREALIGNOF",
-+ CXPrintingPolicy_UnderscoreAlignof},
-+ {"CINDEXTEST_PRINTINGPOLICY_USEVOIDFORZEROPARAMS",
-+ CXPrintingPolicy_UseVoidForZeroParams},
-+ {"CINDEXTEST_PRINTINGPOLICY_TERSEOUTPUT", CXPrintingPolicy_TerseOutput},
-+ {"CINDEXTEST_PRINTINGPOLICY_POLISHFORDECLARATION",
-+ CXPrintingPolicy_PolishForDeclaration},
-+ {"CINDEXTEST_PRINTINGPOLICY_HALF", CXPrintingPolicy_Half},
-+ {"CINDEXTEST_PRINTINGPOLICY_MSWCHAR", CXPrintingPolicy_MSWChar},
-+ {"CINDEXTEST_PRINTINGPOLICY_INCLUDENEWLINES",
-+ CXPrintingPolicy_IncludeNewlines},
-+ {"CINDEXTEST_PRINTINGPOLICY_MSVCFORMATTING",
-+ CXPrintingPolicy_MSVCFormatting},
-+ {"CINDEXTEST_PRINTINGPOLICY_CONSTANTSASWRITTEN",
-+ CXPrintingPolicy_ConstantsAsWritten},
-+ {"CINDEXTEST_PRINTINGPOLICY_SUPPRESSIMPLICITBASE",
-+ CXPrintingPolicy_SuppressImplicitBase},
-+ {"CINDEXTEST_PRINTINGPOLICY_FULLYQUALIFIEDNAME",
-+ CXPrintingPolicy_FullyQualifiedName},
-+ };
-+
-+ unsigned i;
-+ for (i = 0; i < sizeof(mappings) / sizeof(struct Mapping); i++) {
-+ char *value = getenv(mappings[i].name);
-+ if (value) {
-+ clang_PrintingPolicy_setProperty(Policy, mappings[i].property,
-+ (unsigned)strtoul(value, 0L, 10));
-+ }
-+ }
-+}
-+
- /** \brief Returns 0 in case of success, non-zero in case of a failure. */
- static int checkForErrors(CXTranslationUnit TU);
-
-@@ -356,7 +419,11 @@ static void PrintRange(CXSourceRange R, const char *str) {
- PrintExtent(stdout, begin_line, begin_column, end_line, end_column);
- }
-
--int want_display_name = 0;
-+static enum DisplayType {
-+ DisplayType_Spelling,
-+ DisplayType_DisplayName,
-+ DisplayType_Pretty
-+} wanted_display_type = DisplayType_Spelling;
-
- static void printVersion(const char *Prefix, CXVersion Version) {
- if (Version.Major < 0)
-@@ -656,6 +723,24 @@ static int lineCol_cmp(const void *p1, const void *p2) {
- return (int)lhs->col - (int)rhs->col;
- }
-
-+static CXString CursorToText(CXCursor Cursor) {
-+ switch (wanted_display_type) {
-+ case DisplayType_Spelling:
-+ return clang_getCursorSpelling(Cursor);
-+ case DisplayType_DisplayName:
-+ return clang_getCursorDisplayName(Cursor);
-+ case DisplayType_Pretty:
-+ default: {
-+ CXString text;
-+ CXPrintingPolicy Policy = clang_getCursorPrintingPolicy(Cursor);
-+ ModifyPrintingPolicyAccordingToEnv(Policy);
-+ text = clang_getCursorPrettyPrinted(Cursor, Policy);
-+ clang_PrintingPolicy_dispose(Policy);
-+ return text;
-+ }
-+ }
-+}
-+
- static void PrintCursor(CXCursor Cursor, const char *CommentSchemaFile) {
- CXTranslationUnit TU = clang_Cursor_getTranslationUnit(Cursor);
- if (clang_isInvalid(Cursor.kind)) {
-@@ -682,8 +767,7 @@ static void PrintCursor(CXCursor Cursor, const char *CommentSchemaFile) {
- int I;
-
- ks = clang_getCursorKindSpelling(Cursor.kind);
-- string = want_display_name? clang_getCursorDisplayName(Cursor)
-- : clang_getCursorSpelling(Cursor);
-+ string = CursorToText(Cursor);
- printf("%s=%s", clang_getCString(ks),
- clang_getCString(string));
- clang_disposeString(ks);
-@@ -1675,7 +1759,12 @@ static int perform_test_load(CXIndex Idx, CXTranslationUnit TU,
- else if (!strcmp(filter, "all-display") ||
- !strcmp(filter, "local-display")) {
- ck = NULL;
-- want_display_name = 1;
-+ wanted_display_type = DisplayType_DisplayName;
-+ }
-+ else if (!strcmp(filter, "all-pretty") ||
-+ !strcmp(filter, "local-pretty")) {
-+ ck = NULL;
-+ wanted_display_type = DisplayType_Pretty;
- }
- else if (!strcmp(filter, "none")) K = (enum CXCursorKind) ~0;
- else if (!strcmp(filter, "category")) K = CXCursor_ObjCCategoryDecl;
-@@ -1742,8 +1831,11 @@ int perform_test_load_source(int argc, const char **argv,
- unsigned I;
-
- Idx = clang_createIndex(/* excludeDeclsFromPCH */
-- (!strcmp(filter, "local") ||
-- !strcmp(filter, "local-display"))? 1 : 0,
-+ (!strcmp(filter, "local") ||
-+ !strcmp(filter, "local-display") ||
-+ !strcmp(filter, "local-pretty"))
-+ ? 1
-+ : 0,
- /* displayDiagnostics=*/1);
-
- if ((CommentSchemaFile = parse_comments_schema(argc, argv))) {
-diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
-index 45ee9803f2..72b14fdb53 100644
---- a/tools/clang/tools/libclang/CIndex.cpp
-+++ b/tools/clang/tools/libclang/CIndex.cpp
-@@ -4652,6 +4652,197 @@ CXStringSet *clang_Cursor_getCXXManglings(CXCursor C) {
- return cxstring::createSet(Manglings);
- }
-
-+CXPrintingPolicy clang_getCursorPrintingPolicy(CXCursor C) {
-+ if (clang_Cursor_isNull(C))
-+ return 0;
-+ return new PrintingPolicy(getCursorContext(C).getPrintingPolicy());
-+}
-+
-+void clang_PrintingPolicy_dispose(CXPrintingPolicy Policy) {
-+ if (Policy)
-+ delete static_cast<PrintingPolicy *>(Policy);
-+}
-+
-+unsigned
-+clang_PrintingPolicy_getProperty(CXPrintingPolicy Policy,
-+ enum CXPrintingPolicyProperty Property) {
-+ if (!Policy)
-+ return 0;
-+
-+ PrintingPolicy *P = static_cast<PrintingPolicy *>(Policy);
-+ switch (Property) {
-+ case CXPrintingPolicy_Indentation:
-+ return P->Indentation;
-+ case CXPrintingPolicy_SuppressSpecifiers:
-+ return P->SuppressSpecifiers;
-+ case CXPrintingPolicy_SuppressTagKeyword:
-+ return P->SuppressTagKeyword;
-+ case CXPrintingPolicy_IncludeTagDefinition:
-+ return P->IncludeTagDefinition;
-+ case CXPrintingPolicy_SuppressScope:
-+ return P->SuppressScope;
-+ case CXPrintingPolicy_SuppressUnwrittenScope:
-+ return P->SuppressUnwrittenScope;
-+ case CXPrintingPolicy_SuppressInitializers:
-+ return P->SuppressInitializers;
-+ case CXPrintingPolicy_ConstantArraySizeAsWritten:
-+ return P->ConstantArraySizeAsWritten;
-+ case CXPrintingPolicy_AnonymousTagLocations:
-+ return P->AnonymousTagLocations;
-+ case CXPrintingPolicy_SuppressStrongLifetime:
-+ return P->SuppressStrongLifetime;
-+ case CXPrintingPolicy_SuppressLifetimeQualifiers:
-+ return P->SuppressLifetimeQualifiers;
-+ case CXPrintingPolicy_SuppressTemplateArgsInCXXConstructors:
-+ return P->SuppressTemplateArgsInCXXConstructors;
-+ case CXPrintingPolicy_Bool:
-+ return P->Bool;
-+ case CXPrintingPolicy_Restrict:
-+ return P->Restrict;
-+ case CXPrintingPolicy_Alignof:
-+ return P->Alignof;
-+ case CXPrintingPolicy_UnderscoreAlignof:
-+ return P->UnderscoreAlignof;
-+ case CXPrintingPolicy_UseVoidForZeroParams:
-+ return P->UseVoidForZeroParams;
-+ case CXPrintingPolicy_TerseOutput:
-+ return P->TerseOutput;
-+ case CXPrintingPolicy_PolishForDeclaration:
-+ return P->PolishForDeclaration;
-+ case CXPrintingPolicy_Half:
-+ return P->Half;
-+ case CXPrintingPolicy_MSWChar:
-+ return P->MSWChar;
-+ case CXPrintingPolicy_IncludeNewlines:
-+ return P->IncludeNewlines;
-+ case CXPrintingPolicy_MSVCFormatting:
-+ return P->MSVCFormatting;
-+ case CXPrintingPolicy_ConstantsAsWritten:
-+ // Ops, not yet there in clang 5.0 and we do not need it.
-+ return 0;
-+ case CXPrintingPolicy_SuppressImplicitBase:
-+ // Ops, not yet there in clang 5.0 and we do not need it.
-+ return 0;
-+ case CXPrintingPolicy_FullyQualifiedName:
-+ return P->FullyQualifiedName;
-+ }
-+
-+ assert(false && "Invalid CXPrintingPolicyProperty");
-+ return 0;
-+}
-+
-+void clang_PrintingPolicy_setProperty(CXPrintingPolicy Policy,
-+ enum CXPrintingPolicyProperty Property,
-+ unsigned Value) {
-+ if (!Policy)
-+ return;
-+
-+ PrintingPolicy *P = static_cast<PrintingPolicy *>(Policy);
-+ switch (Property) {
-+ case CXPrintingPolicy_Indentation:
-+ P->Indentation = Value;
-+ return;
-+ case CXPrintingPolicy_SuppressSpecifiers:
-+ P->SuppressSpecifiers = Value;
-+ return;
-+ case CXPrintingPolicy_SuppressTagKeyword:
-+ P->SuppressTagKeyword = Value;
-+ return;
-+ case CXPrintingPolicy_IncludeTagDefinition:
-+ P->IncludeTagDefinition = Value;
-+ return;
-+ case CXPrintingPolicy_SuppressScope:
-+ P->SuppressScope = Value;
-+ return;
-+ case CXPrintingPolicy_SuppressUnwrittenScope:
-+ P->SuppressUnwrittenScope = Value;
-+ return;
-+ case CXPrintingPolicy_SuppressInitializers:
-+ P->SuppressInitializers = Value;
-+ return;
-+ case CXPrintingPolicy_ConstantArraySizeAsWritten:
-+ P->ConstantArraySizeAsWritten = Value;
-+ return;
-+ case CXPrintingPolicy_AnonymousTagLocations:
-+ P->AnonymousTagLocations = Value;
-+ return;
-+ case CXPrintingPolicy_SuppressStrongLifetime:
-+ P->SuppressStrongLifetime = Value;
-+ return;
-+ case CXPrintingPolicy_SuppressLifetimeQualifiers:
-+ P->SuppressLifetimeQualifiers = Value;
-+ return;
-+ case CXPrintingPolicy_SuppressTemplateArgsInCXXConstructors:
-+ P->SuppressTemplateArgsInCXXConstructors = Value;
-+ return;
-+ case CXPrintingPolicy_Bool:
-+ P->Bool = Value;
-+ return;
-+ case CXPrintingPolicy_Restrict:
-+ P->Restrict = Value;
-+ return;
-+ case CXPrintingPolicy_Alignof:
-+ P->Alignof = Value;
-+ return;
-+ case CXPrintingPolicy_UnderscoreAlignof:
-+ P->UnderscoreAlignof = Value;
-+ return;
-+ case CXPrintingPolicy_UseVoidForZeroParams:
-+ P->UseVoidForZeroParams = Value;
-+ return;
-+ case CXPrintingPolicy_TerseOutput:
-+ P->TerseOutput = Value;
-+ return;
-+ case CXPrintingPolicy_PolishForDeclaration:
-+ P->PolishForDeclaration = Value;
-+ return;
-+ case CXPrintingPolicy_Half:
-+ P->Half = Value;
-+ return;
-+ case CXPrintingPolicy_MSWChar:
-+ P->MSWChar = Value;
-+ return;
-+ case CXPrintingPolicy_IncludeNewlines:
-+ P->IncludeNewlines = Value;
-+ return;
-+ case CXPrintingPolicy_MSVCFormatting:
-+ P->MSVCFormatting = Value;
-+ return;
-+ case CXPrintingPolicy_ConstantsAsWritten:
-+ // Ops, not yet there in clang 5.0 and we do not need it.
-+ return;
-+ case CXPrintingPolicy_SuppressImplicitBase:
-+ // Ops, not yet there in clang 5.0 and we do not need it.
-+ return;
-+ case CXPrintingPolicy_FullyQualifiedName:
-+ P->FullyQualifiedName = Value;
-+ return;
-+ }
-+
-+ assert(false && "Invalid CXPrintingPolicyProperty");
-+}
-+
-+CXString clang_getCursorPrettyPrinted(CXCursor C, CXPrintingPolicy cxPolicy) {
-+ if (clang_Cursor_isNull(C))
-+ return cxstring::createEmpty();
-+
-+ if (clang_isDeclaration(C.kind)) {
-+ const Decl *D = getCursorDecl(C);
-+ if (!D)
-+ return cxstring::createEmpty();
-+
-+ SmallString<128> Str;
-+ llvm::raw_svector_ostream OS(Str);
-+ PrintingPolicy *UserPolicy = static_cast<PrintingPolicy *>(cxPolicy);
-+ D->print(OS, UserPolicy ? *UserPolicy
-+ : getCursorContext(C).getPrintingPolicy());
-+
-+ return cxstring::createDup(OS.str());
-+ }
-+
-+ return cxstring::createEmpty();
-+}
-+
- CXString clang_getCursorDisplayName(CXCursor C) {
- if (!clang_isDeclaration(C.kind))
- return clang_getCursorSpelling(C);
-diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports
-index c788abb881..ed4773b132 100644
---- a/tools/clang/tools/libclang/libclang.exports
-+++ b/tools/clang/tools/libclang/libclang.exports
-@@ -175,6 +175,8 @@ clang_getCursorAvailability
- clang_getCursorCompletionString
- clang_getCursorDefinition
- clang_getCursorDisplayName
-+clang_getCursorPrintingPolicy
-+clang_getCursorPrettyPrinted
- clang_getCursorExtent
- clang_getCursorExceptionSpecificationType
- clang_getCursorKind
-@@ -355,3 +357,6 @@ clang_EvalResult_isUnsignedInt
- clang_EvalResult_getAsDouble
- clang_EvalResult_getAsStr
- clang_EvalResult_dispose
-+clang_PrintingPolicy_getProperty
-+clang_PrintingPolicy_setProperty
-+clang_PrintingPolicy_dispose
-diff --git a/unittests/libclang/LibclangTest.cpp b/unittests/libclang/LibclangTest.cpp
-index f2a96d6be6..342fbd5279 100644
---- a/tools/clang/unittests/libclang/LibclangTest.cpp
-+++ b/tools/clang/unittests/libclang/LibclangTest.cpp
-@@ -572,3 +572,35 @@ TEST_F(LibclangReparseTest, clang_parseTranslationUnit2FullArgv) {
- EXPECT_EQ(0U, clang_getNumDiagnostics(ClangTU));
- DisplayDiagnostics();
- }
-+
-+class LibclangPrintingPolicyTest : public LibclangParseTest {
-+public:
-+ CXPrintingPolicy Policy = nullptr;
-+
-+ void SetUp() override {
-+ LibclangParseTest::SetUp();
-+ std::string File = "file.cpp";
-+ WriteFile(File, "int i;\n");
-+ ClangTU = clang_parseTranslationUnit(Index, File.c_str(), nullptr, 0,
-+ nullptr, 0, TUFlags);
-+ CXCursor TUCursor = clang_getTranslationUnitCursor(ClangTU);
-+ Policy = clang_getCursorPrintingPolicy(TUCursor);
-+ }
-+ void TearDown() override {
-+ clang_PrintingPolicy_dispose(Policy);
-+ LibclangParseTest::TearDown();
-+ }
-+};
-+
-+TEST_F(LibclangPrintingPolicyTest, SetAndGetProperties) {
-+ for (unsigned Value = 0; Value < 2; ++Value) {
-+ for (int I = 0; I < CXPrintingPolicy_LastProperty; ++I) {
-+ auto Property = static_cast<enum CXPrintingPolicyProperty>(I);
-+ if (Property == CXPrintingPolicy_ConstantsAsWritten || Property == CXPrintingPolicy_SuppressImplicitBase)
-+ continue; // These are not yet in clang 5.0.
-+
-+ clang_PrintingPolicy_setProperty(Policy, Property, Value);
-+ EXPECT_EQ(Value, clang_PrintingPolicy_getProperty(Policy, Property));
-+ }
-+ }
-+}
diff --git a/development/qt-creator-llvm/patches/200_D36390_Fix-overloaded-static-functions-in-SemaCodeComplete.patch b/development/qt-creator-llvm/patches/200_D36390_Fix-overloaded-static-functions-in-SemaCodeComplete.patch
deleted file mode 100644
index 316f3afd178d..000000000000
--- a/development/qt-creator-llvm/patches/200_D36390_Fix-overloaded-static-functions-in-SemaCodeComplete.patch
+++ /dev/null
@@ -1,148 +0,0 @@
---- a/tools/clang/include/clang/Sema/Sema.h
-+++ b/tools/clang/include/clang/Sema/Sema.h
-@@ -2707,7 +2707,8 @@
- OverloadCandidateSet &CandidateSet,
- TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
- bool SuppressUserConversions = false,
-- bool PartialOverloading = false);
-+ bool PartialOverloading = false,
-+ bool FirstArgumentIsBase = false);
- void AddMethodCandidate(DeclAccessPair FoundDecl,
- QualType ObjectType,
- Expr::Classification ObjectClassification,
---- a/tools/clang/lib/Sema/SemaCodeComplete.cpp
-+++ b/tools/clang/lib/Sema/SemaCodeComplete.cpp
-@@ -4396,9 +4396,11 @@
- ArgExprs.append(Args.begin(), Args.end());
- UnresolvedSet<8> Decls;
- Decls.append(UME->decls_begin(), UME->decls_end());
-+ const bool FirstArgumentIsBase = !UME->isImplicitAccess() && UME->getBase();
- AddFunctionCandidates(Decls, ArgExprs, CandidateSet, TemplateArgs,
- /*SuppressUsedConversions=*/false,
-- /*PartialOverloading=*/true);
-+ /*PartialOverloading=*/true,
-+ FirstArgumentIsBase);
- } else {
- FunctionDecl *FD = nullptr;
- if (auto MCE = dyn_cast<MemberExpr>(NakedFn))
---- a/tools/clang/lib/Sema/SemaOverload.cpp
-+++ b/tools/clang/lib/Sema/SemaOverload.cpp
-@@ -6343,24 +6343,36 @@
- OverloadCandidateSet& CandidateSet,
- TemplateArgumentListInfo *ExplicitTemplateArgs,
- bool SuppressUserConversions,
-- bool PartialOverloading) {
-+ bool PartialOverloading,
-+ bool FirstArgumentIsBase) {
- for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
- NamedDecl *D = F.getDecl()->getUnderlyingDecl();
- if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
-+ ArrayRef<Expr *> FunctionArgs = Args;
- if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic()) {
- QualType ObjectType;
- Expr::Classification ObjectClassification;
-- if (Expr *E = Args[0]) {
-- // Use the explit base to restrict the lookup:
-- ObjectType = E->getType();
-- ObjectClassification = E->Classify(Context);
-- } // .. else there is an implit base.
-+ if (Args.size() > 0) {
-+ if (Expr *E = Args[0]) {
-+ // Use the explit base to restrict the lookup:
-+ ObjectType = E->getType();
-+ ObjectClassification = E->Classify(Context);
-+ } // .. else there is an implit base.
-+ FunctionArgs = Args.slice(1);
-+ }
- AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
- cast<CXXMethodDecl>(FD)->getParent(), ObjectType,
-- ObjectClassification, Args.slice(1), CandidateSet,
-+ ObjectClassification, FunctionArgs, CandidateSet,
- SuppressUserConversions, PartialOverloading);
- } else {
-- AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
-+ // Slice the first argument (which is the base) when we access
-+ // static method as non-static
-+ if (Args.size() > 0 && (!Args[0] || (FirstArgumentIsBase && isa<CXXMethodDecl>(FD) &&
-+ !isa<CXXConstructorDecl>(FD)))) {
-+ assert(cast<CXXMethodDecl>(FD)->isStatic());
-+ FunctionArgs = Args.slice(1);
-+ }
-+ AddOverloadCandidate(FD, F.getPair(), FunctionArgs, CandidateSet,
- SuppressUserConversions, PartialOverloading);
- }
- } else {
---- a/tools/clang/test/Index/complete-call.cpp
-+++ b/tools/clang/test/Index/complete-call.cpp
-@@ -94,6 +94,24 @@
- s.foo_7(42,);
- }
-
-+struct Bar {
-+ static void foo_1();
-+ void foo_1(float);
-+ static void foo_1(int);
-+};
-+
-+void test() {
-+ Bar::foo_1();
-+ Bar b;
-+ b.foo_1();
-+}
-+
-+struct Bar2 : public Bar {
-+ Bar2() {
-+ Bar::foo_1();
-+ }
-+};
-+
- // RUN: c-index-test -code-completion-at=%s:47:9 %s | FileCheck -check-prefix=CHECK-CC1 %s
- // CHECK-CC1: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{RightParen )} (1)
- // CHECK-CC1: Completion contexts:
-@@ -803,3 +821,46 @@
- // CHECK-CC59-NEXT: Class name
- // CHECK-CC59-NEXT: Nested name specifier
- // CHECK-CC59-NEXT: Objective-C interface
-+
-+// RUN: c-index-test -code-completion-at=%s:104:14 %s | FileCheck -check-prefix=CHECK-CC60 %s
-+// CHECK-CC60: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{RightParen )} (1)
-+// CHECK-CC60: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter float}{RightParen )} (1)
-+// CHECK-CC60: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
-+// CHECK-CC60: Completion contexts:
-+// CHECK-CC60-NEXT: Any type
-+// CHECK-CC60-NEXT: Any value
-+// CHECK-CC60-NEXT: Enum tag
-+// CHECK-CC60-NEXT: Union tag
-+// CHECK-CC60-NEXT: Struct tag
-+// CHECK-CC60-NEXT: Class name
-+// CHECK-CC60-NEXT: Nested name specifier
-+// CHECK-CC60-NEXT: Objective-C interface
-+
-+// RUN: c-index-test -code-completion-at=%s:106:11 %s | FileCheck -check-prefix=CHECK-CC61 %s
-+// CHECK-CC61: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{RightParen )} (1)
-+// CHECK-CC61: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter float}{RightParen )} (1)
-+// CHECK-CC61: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
-+// CHECK-CC61: Completion contexts:
-+// CHECK-CC61-NEXT: Any type
-+// CHECK-CC61-NEXT: Any value
-+// CHECK-CC61-NEXT: Enum tag
-+// CHECK-CC61-NEXT: Union tag
-+// CHECK-CC61-NEXT: Struct tag
-+// CHECK-CC61-NEXT: Class name
-+// CHECK-CC61-NEXT: Nested name specifier
-+// CHECK-CC61-NEXT: Objective-C interface
-+
-+// RUN: c-index-test -code-completion-at=%s:111:16 %s | FileCheck -check-prefix=CHECK-CC62 %s
-+// CHECK-CC62: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{RightParen )} (1)
-+// CHECK-CC62: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter float}{RightParen )} (1)
-+// CHECK-CC62: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
-+// CHECK-CC62: Completion contexts:
-+// CHECK-CC62-NEXT: Any type
-+// CHECK-CC62-NEXT: Any value
-+// CHECK-CC62-NEXT: Enum tag
-+// CHECK-CC62-NEXT: Union tag
-+// CHECK-CC62-NEXT: Struct tag
-+// CHECK-CC62-NEXT: Class name
-+// CHECK-CC62-NEXT: Nested name specifier
-+// CHECK-CC62-NEXT: Objective-C interface
-+
diff --git a/development/qt-creator-llvm/patches/210_D43453_Fix-overloaded-static-functions-for-templates.patch b/development/qt-creator-llvm/patches/210_D43453_Fix-overloaded-static-functions-for-templates.patch
deleted file mode 100644
index 0223c96e784a..000000000000
--- a/development/qt-creator-llvm/patches/210_D43453_Fix-overloaded-static-functions-for-templates.patch
+++ /dev/null
@@ -1,165 +0,0 @@
-diff --git a/tools/clang/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
-index 1b07ec60ce..46ed08d1cf 100644
---- a/tools/clang/lib/Sema/SemaOverload.cpp
-+++ b/tools/clang/lib/Sema/SemaOverload.cpp
-@@ -6321,57 +6321,56 @@ void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
- bool FirstArgumentIsBase) {
- for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
- NamedDecl *D = F.getDecl()->getUnderlyingDecl();
-- if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
-- ArrayRef<Expr *> FunctionArgs = Args;
-- if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic()) {
-- QualType ObjectType;
-- Expr::Classification ObjectClassification;
-- if (Args.size() > 0) {
-- if (Expr *E = Args[0]) {
-- // Use the explit base to restrict the lookup:
-- ObjectType = E->getType();
-- ObjectClassification = E->Classify(Context);
-- } // .. else there is an implit base.
-- FunctionArgs = Args.slice(1);
-- }
-- AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
-- cast<CXXMethodDecl>(FD)->getParent(), ObjectType,
-- ObjectClassification, FunctionArgs, CandidateSet,
-- SuppressUserConversions, PartialOverloading);
-- } else {
-- // Slice the first argument (which is the base) when we access
-- // static method as non-static
-- if (Args.size() > 0 && (!Args[0] || (FirstArgumentIsBase && isa<CXXMethodDecl>(FD) &&
-- !isa<CXXConstructorDecl>(FD)))) {
-- assert(cast<CXXMethodDecl>(FD)->isStatic());
-- FunctionArgs = Args.slice(1);
-- }
-- AddOverloadCandidate(FD, F.getPair(), FunctionArgs, CandidateSet,
-- SuppressUserConversions, PartialOverloading);
-- }
-- } else {
-- FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
-- if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
-- !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic()) {
-- QualType ObjectType;
-- Expr::Classification ObjectClassification;
-+ ArrayRef<Expr *> FunctionArgs = Args;
-+
-+ FunctionTemplateDecl *FunTmpl = nullptr;
-+ FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
-+
-+ const bool IsTemplate = FD ? false : true;
-+ if (IsTemplate) {
-+ FunTmpl = cast<FunctionTemplateDecl>(D);
-+ FD = FunTmpl->getTemplatedDecl();
-+ }
-+
-+ if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic()) {
-+ QualType ObjectType;
-+ Expr::Classification ObjectClassification;
-+ if (Args.size() > 0) {
- if (Expr *E = Args[0]) {
- // Use the explit base to restrict the lookup:
- ObjectType = E->getType();
- ObjectClassification = E->Classify(Context);
- } // .. else there is an implit base.
-+ FunctionArgs = Args.slice(1);
-+ }
-+ if (IsTemplate)
- AddMethodTemplateCandidate(
- FunTmpl, F.getPair(),
- cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
- ExplicitTemplateArgs, ObjectType, ObjectClassification,
-- Args.slice(1), CandidateSet, SuppressUserConversions,
-+ FunctionArgs, CandidateSet, SuppressUserConversions,
- PartialOverloading);
-- } else {
-- AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
-- ExplicitTemplateArgs, Args,
-- CandidateSet, SuppressUserConversions,
-- PartialOverloading);
-+ else
-+ AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
-+ cast<CXXMethodDecl>(FD)->getParent(), ObjectType,
-+ ObjectClassification, FunctionArgs, CandidateSet,
-+ SuppressUserConversions, PartialOverloading);
-+ } else {
-+ // Slice the first argument (which is the base) when we access
-+ // static method as non-static
-+ if (Args.size() > 0 &&
-+ (!Args[0] || (FirstArgumentIsBase && isa<CXXMethodDecl>(FD) &&
-+ !isa<CXXConstructorDecl>(FD)))) {
-+ assert(cast<CXXMethodDecl>(FD)->isStatic());
-+ FunctionArgs = Args.slice(1);
- }
-+ if (IsTemplate)
-+ AddTemplateOverloadCandidate(
-+ FunTmpl, F.getPair(), ExplicitTemplateArgs, FunctionArgs,
-+ CandidateSet, SuppressUserConversions, PartialOverloading);
-+ else
-+ AddOverloadCandidate(FD, F.getPair(), FunctionArgs, CandidateSet,
-+ SuppressUserConversions, PartialOverloading);
- }
- }
- }
-diff --git a/tools/clang/test/Index/complete-call.cpp b/test/Index/complete-call.cpp
-index ca116485ac..35f2009066 100644
---- a/tools/clang/test/Index/complete-call.cpp
-+++ b/tools/clang/test/Index/complete-call.cpp
-@@ -112,6 +112,33 @@ struct Bar2 : public Bar {
- }
- };
-
-+struct BarTemplates {
-+ static void foo_1() {}
-+ void foo_1(float) {}
-+ static void foo_1(int) {}
-+
-+ template<class T1, class T2>
-+ static void foo_1(T1 a, T2 b) { a + b; }
-+
-+ template<class T1, class T2>
-+ void foo_1(T1 a, T2 b, float c) { a + b + c; }
-+
-+ template<class T1, class T2>
-+ static void foo_1(T2 a, int b, T1 c) { a + b + c; }
-+};
-+
-+void testTemplates() {
-+ BarTemplates::foo_1();
-+ BarTemplates b;
-+ b.foo_1();
-+}
-+
-+struct Bar2Template : public BarTemplates {
-+ Bar2Template() {
-+ BarTemplates::foo_1();
-+ }
-+};
-+
- // RUN: c-index-test -code-completion-at=%s:47:9 %s | FileCheck -check-prefix=CHECK-CC1 %s
- // CHECK-CC1: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{RightParen )} (1)
- // CHECK-CC1: Completion contexts:
-@@ -864,3 +891,25 @@ struct Bar2 : public Bar {
- // CHECK-CC62-NEXT: Nested name specifier
- // CHECK-CC62-NEXT: Objective-C interface
-
-+// RUN: c-index-test -code-completion-at=%s:131:23 %s | FileCheck -check-prefix=CHECK-CC63 %s
-+// CHECK-CC63: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{RightParen )} (1)
-+// CHECK-CC63: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter float}{RightParen )} (1)
-+// CHECK-CC63: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
-+// CHECK-CC63: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter T1 a}{Comma , }{Placeholder T2 b}{RightParen )} (1)
-+// CHECK-CC63: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter T1 a}{Comma , }{Placeholder T2 b}{Comma , }{Placeholder float c}{RightParen )} (1)
-+// CHECK-CC63: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter T2 a}{Comma , }{Placeholder int b}{Comma , }{Placeholder T1 c}{RightParen )} (1)
-+
-+// RUN: c-index-test -code-completion-at=%s:133:11 %s | FileCheck -check-prefix=CHECK-CC64 %s
-+// CHECK-CC64: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{RightParen )} (1)
-+// CHECK-CC64: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter float}{RightParen )} (1)
-+// CHECK-CC64: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
-+// CHECK-CC64: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter T1 a}{Comma , }{Placeholder T2 b}{RightParen )} (1)
-+// CHECK-CC64: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter T2 a}{Comma , }{Placeholder int b}{Comma , }{Placeholder T1 c}{RightParen )} (1)
-+
-+// RUN: c-index-test -code-completion-at=%s:138:25 %s | FileCheck -check-prefix=CHECK-CC65 %s
-+// CHECK-CC65: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{RightParen )} (1)
-+// CHECK-CC65: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter float}{RightParen )} (1)
-+// CHECK-CC65: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
-+// CHECK-CC65: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter T1 a}{Comma , }{Placeholder T2 b}{RightParen )} (1)
-+// CHECK-CC65: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter T1 a}{Comma , }{Placeholder T2 b}{Comma , }{Placeholder float c}{RightParen )} (1)
-+// CHECK-CC65: OverloadCandidate:{ResultType void}{Text foo_1}{LeftParen (}{CurrentParameter T2 a}{Comma , }{Placeholder int b}{Comma , }{Placeholder T1 c}{RightParen )} (1)
diff --git a/development/qt-creator-llvm/patches/220_Support-std-has_unique_object_represesentations.patch b/development/qt-creator-llvm/patches/220_Support-std-has_unique_object_represesentations.patch
deleted file mode 100644
index 71ae413dd293..000000000000
--- a/development/qt-creator-llvm/patches/220_Support-std-has_unique_object_represesentations.patch
+++ /dev/null
@@ -1,739 +0,0 @@
-diff --git a/tools/clang/include/clang/AST/ASTContext.h b/tools/clang/include/clang/AST/ASTContext.h
-index 703f588c56..d7beffa25e 100644
---- a/tools/clang/include/clang/AST/ASTContext.h
-+++ b/tools/clang/include/clang/AST/ASTContext.h
-@@ -2072,6 +2072,10 @@ public:
- void CollectInheritedProtocols(const Decl *CDecl,
- llvm::SmallPtrSet<ObjCProtocolDecl*, 8> &Protocols);
-
-+ /// \brief Return true if the specified type has unique object representations
-+ /// according to (C++17 [meta.unary.prop]p9)
-+ bool hasUniqueObjectRepresentations(QualType Ty) const;
-+
- //===--------------------------------------------------------------------===//
- // Type Operators
- //===--------------------------------------------------------------------===//
-diff --git a/tools/clang/include/clang/Basic/TokenKinds.def b/tools/clang/include/clang/Basic/TokenKinds.def
-index be67663a10..90ac33b9ea 100644
---- a/tools/clang/include/clang/Basic/TokenKinds.def
-+++ b/tools/clang/include/clang/Basic/TokenKinds.def
-@@ -448,6 +448,8 @@ TYPE_TRAIT_1(__is_pod, IsPOD, KEYCXX)
- TYPE_TRAIT_1(__is_polymorphic, IsPolymorphic, KEYCXX)
- TYPE_TRAIT_1(__is_trivial, IsTrivial, KEYCXX)
- TYPE_TRAIT_1(__is_union, IsUnion, KEYCXX)
-+TYPE_TRAIT_1(__has_unique_object_representations,
-+ HasUniqueObjectRepresentations, KEYCXX)
-
- // Clang-only C++ Type Traits
- TYPE_TRAIT_N(__is_trivially_constructible, IsTriviallyConstructible, KEYCXX)
-diff --git a/tools/clang/include/clang/Basic/TypeTraits.h b/tools/clang/include/clang/Basic/TypeTraits.h
-index 6aadf795d8..8ecd63f9c3 100644
---- a/tools/clang/include/clang/Basic/TypeTraits.h
-+++ b/tools/clang/include/clang/Basic/TypeTraits.h
-@@ -70,7 +70,8 @@ namespace clang {
- UTT_IsUnsigned,
- UTT_IsVoid,
- UTT_IsVolatile,
-- UTT_Last = UTT_IsVolatile,
-+ UTT_HasUniqueObjectRepresentations,
-+ UTT_Last = UTT_HasUniqueObjectRepresentations,
- BTT_IsBaseOf,
- BTT_IsConvertible,
- BTT_IsConvertibleTo,
-diff --git a/tools/clang/lib/AST/ASTContext.cpp b/tools/clang/lib/AST/ASTContext.cpp
-index c60373c5a9..1ce7d51857 100644
---- a/tools/clang/lib/AST/ASTContext.cpp
-+++ b/tools/clang/lib/AST/ASTContext.cpp
-@@ -1823,7 +1823,9 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T) const {
- }
- case Type::MemberPointer: {
- const MemberPointerType *MPT = cast<MemberPointerType>(T);
-- std::tie(Width, Align) = ABI->getMemberPointerWidthAndAlign(MPT);
-+ CXXABI::MemberPointerInfo MPI = ABI->getMemberPointerInfo(MPT);
-+ Width = MPI.Width;
-+ Align = MPI.Align;
- break;
- }
- case Type::Complex: {
-@@ -2107,6 +2109,171 @@ void ASTContext::CollectInheritedProtocols(const Decl *CDecl,
- }
- }
-
-+static bool unionHasUniqueObjectRepresentations(const ASTContext &Context,
-+ const RecordDecl *RD) {
-+ assert(RD->isUnion() && "Must be union type");
-+ CharUnits UnionSize = Context.getTypeSizeInChars(RD->getTypeForDecl());
-+
-+ for (const auto *Field : RD->fields()) {
-+ if (!Context.hasUniqueObjectRepresentations(Field->getType()))
-+ return false;
-+ CharUnits FieldSize = Context.getTypeSizeInChars(Field->getType());
-+ if (FieldSize != UnionSize)
-+ return false;
-+ }
-+ return !RD->field_empty();
-+}
-+
-+bool isStructEmpty(QualType Ty) {
-+ const RecordDecl *RD = Ty->castAs<RecordType>()->getDecl();
-+
-+ if (!RD->field_empty())
-+ return false;
-+
-+ if (const auto *ClassDecl = dyn_cast<CXXRecordDecl>(RD))
-+ return ClassDecl->isEmpty();
-+
-+ return true;
-+}
-+
-+static llvm::Optional<int64_t>
-+structHasUniqueObjectRepresentations(const ASTContext &Context,
-+ const RecordDecl *RD) {
-+ assert(!RD->isUnion() && "Must be struct/class type");
-+ const auto &Layout = Context.getASTRecordLayout(RD);
-+
-+ int64_t CurOffsetInBits = 0;
-+ if (const auto *ClassDecl = dyn_cast<CXXRecordDecl>(RD)) {
-+ if (ClassDecl->isDynamicClass())
-+ return llvm::None;
-+
-+ SmallVector<std::pair<QualType, int64_t>, 4> Bases;
-+ for (const auto Base : ClassDecl->bases()) {
-+ // Empty types can be inherited from, and non-empty types can potentially
-+ // have tail padding, so just make sure there isn't an error.
-+ if (!isStructEmpty(Base.getType())) {
-+ llvm::Optional<int64_t> Size = structHasUniqueObjectRepresentations(
-+ Context, Base.getType()->getAs<RecordType>()->getDecl());
-+ if (!Size)
-+ return llvm::None;
-+ Bases.emplace_back(Base.getType(), Size.getValue());
-+ }
-+ }
-+
-+ std::sort(
-+ Bases.begin(), Bases.end(), [&](const std::pair<QualType, int64_t> &L,
-+ const std::pair<QualType, int64_t> &R) {
-+ return Layout.getBaseClassOffset(L.first->getAsCXXRecordDecl()) <
-+ Layout.getBaseClassOffset(R.first->getAsCXXRecordDecl());
-+ });
-+
-+ for (const auto Base : Bases) {
-+ int64_t BaseOffset = Context.toBits(
-+ Layout.getBaseClassOffset(Base.first->getAsCXXRecordDecl()));
-+ int64_t BaseSize = Base.second;
-+ if (BaseOffset != CurOffsetInBits)
-+ return llvm::None;
-+ CurOffsetInBits = BaseOffset + BaseSize;
-+ }
-+ }
-+
-+ for (const auto *Field : RD->fields()) {
-+ if (!Field->getType()->isReferenceType() &&
-+ !Context.hasUniqueObjectRepresentations(Field->getType()))
-+ return llvm::None;
-+
-+ int64_t FieldSizeInBits =
-+ Context.toBits(Context.getTypeSizeInChars(Field->getType()));
-+ if (Field->isBitField()) {
-+ int64_t BitfieldSize = Field->getBitWidthValue(Context);
-+
-+ if (BitfieldSize > FieldSizeInBits)
-+ return llvm::None;
-+ FieldSizeInBits = BitfieldSize;
-+ }
-+
-+ int64_t FieldOffsetInBits = Context.getFieldOffset(Field);
-+
-+ if (FieldOffsetInBits != CurOffsetInBits)
-+ return llvm::None;
-+
-+ CurOffsetInBits = FieldSizeInBits + FieldOffsetInBits;
-+ }
-+
-+ return CurOffsetInBits;
-+}
-+
-+bool ASTContext::hasUniqueObjectRepresentations(QualType Ty) const {
-+ // C++17 [meta.unary.prop]:
-+ // The predicate condition for a template specialization
-+ // has_unique_object_representations<T> shall be
-+ // satisfied if and only if:
-+ // (9.1) - T is trivially copyable, and
-+ // (9.2) - any two objects of type T with the same value have the same
-+ // object representation, where two objects
-+ // of array or non-union class type are considered to have the same value
-+ // if their respective sequences of
-+ // direct subobjects have the same values, and two objects of union type
-+ // are considered to have the same
-+ // value if they have the same active member and the corresponding members
-+ // have the same value.
-+ // The set of scalar types for which this condition holds is
-+ // implementation-defined. [ Note: If a type has padding
-+ // bits, the condition does not hold; otherwise, the condition holds true
-+ // for unsigned integral types. -- end note ]
-+ assert(!Ty.isNull() && "Null QualType sent to unique object rep check");
-+
-+ // Arrays are unique only if their element type is unique.
-+ if (Ty->isArrayType())
-+ return hasUniqueObjectRepresentations(getBaseElementType(Ty));
-+
-+ // (9.1) - T is trivially copyable...
-+ if (!Ty.isTriviallyCopyableType(*this))
-+ return false;
-+
-+ // All integrals and enums are unique.
-+ if (Ty->isIntegralOrEnumerationType())
-+ return true;
-+
-+ // All other pointers are unique.
-+ if (Ty->isPointerType())
-+ return true;
-+
-+ if (Ty->isMemberPointerType()) {
-+ const MemberPointerType *MPT = Ty->getAs<MemberPointerType>();
-+ return !ABI->getMemberPointerInfo(MPT).HasPadding;
-+ }
-+
-+ if (Ty->isRecordType()) {
-+ const RecordDecl *Record = Ty->getAs<RecordType>()->getDecl();
-+
-+ if (Record->isInvalidDecl())
-+ return false;
-+
-+ if (Record->isUnion())
-+ return unionHasUniqueObjectRepresentations(*this, Record);
-+
-+ Optional<int64_t> StructSize =
-+ structHasUniqueObjectRepresentations(*this, Record);
-+
-+ return StructSize &&
-+ StructSize.getValue() == static_cast<int64_t>(getTypeSize(Ty));
-+ }
-+
-+ // FIXME: More cases to handle here (list by rsmith):
-+ // vectors (careful about, eg, vector of 3 foo)
-+ // _Complex int and friends
-+ // _Atomic T
-+ // Obj-C block pointers
-+ // Obj-C object pointers
-+ // and perhaps OpenCL's various builtin types (pipe, sampler_t, event_t,
-+ // clk_event_t, queue_t, reserve_id_t)
-+ // There're also Obj-C class types and the Obj-C selector type, but I think it
-+ // makes sense for those to return false here.
-+
-+ return false;
-+}
-+
- unsigned ASTContext::CountNonClassIvars(const ObjCInterfaceDecl *OI) const {
- unsigned count = 0;
- // Count ivars declared in class extension.
-diff --git a/tools/clang/lib/AST/CXXABI.h b/tools/clang/lib/AST/CXXABI.h
-index 924ef00e81..06295b5817 100644
---- a/tools/clang/lib/AST/CXXABI.h
-+++ b/tools/clang/lib/AST/CXXABI.h
-@@ -31,9 +31,16 @@ class CXXABI {
- public:
- virtual ~CXXABI();
-
-- /// Returns the width and alignment of a member pointer in bits.
-- virtual std::pair<uint64_t, unsigned>
-- getMemberPointerWidthAndAlign(const MemberPointerType *MPT) const = 0;
-+ struct MemberPointerInfo {
-+ uint64_t Width;
-+ unsigned Align;
-+ bool HasPadding;
-+ };
-+
-+ /// Returns the width and alignment of a member pointer in bits, as well as
-+ /// whether it has padding.
-+ virtual MemberPointerInfo
-+ getMemberPointerInfo(const MemberPointerType *MPT) const = 0;
-
- /// Returns the default calling convention for C++ methods.
- virtual CallingConv getDefaultMethodCallConv(bool isVariadic) const = 0;
-diff --git a/tools/clang/lib/AST/ItaniumCXXABI.cpp b/tools/clang/lib/AST/ItaniumCXXABI.cpp
-index 692a455eaf..d6bc16b635 100644
---- a/tools/clang/lib/AST/ItaniumCXXABI.cpp
-+++ b/tools/clang/lib/AST/ItaniumCXXABI.cpp
-@@ -101,15 +101,17 @@ protected:
- public:
- ItaniumCXXABI(ASTContext &Ctx) : Context(Ctx) { }
-
-- std::pair<uint64_t, unsigned>
-- getMemberPointerWidthAndAlign(const MemberPointerType *MPT) const override {
-+ MemberPointerInfo
-+ getMemberPointerInfo(const MemberPointerType *MPT) const override {
- const TargetInfo &Target = Context.getTargetInfo();
- TargetInfo::IntType PtrDiff = Target.getPtrDiffType(0);
-- uint64_t Width = Target.getTypeWidth(PtrDiff);
-- unsigned Align = Target.getTypeAlign(PtrDiff);
-+ MemberPointerInfo MPI;
-+ MPI.Width = Target.getTypeWidth(PtrDiff);
-+ MPI.Align = Target.getTypeAlign(PtrDiff);
-+ MPI.HasPadding = false;
- if (MPT->isMemberFunctionPointer())
-- Width = 2 * Width;
-- return std::make_pair(Width, Align);
-+ MPI.Width *= 2;
-+ return MPI;
- }
-
- CallingConv getDefaultMethodCallConv(bool isVariadic) const override {
-diff --git a/tools/clang/lib/AST/MicrosoftCXXABI.cpp b/tools/clang/lib/AST/MicrosoftCXXABI.cpp
-index 73324e40f3..b19491f313 100644
---- a/tools/clang/lib/AST/MicrosoftCXXABI.cpp
-+++ b/tools/clang/lib/AST/MicrosoftCXXABI.cpp
-@@ -76,8 +76,8 @@ class MicrosoftCXXABI : public CXXABI {
- public:
- MicrosoftCXXABI(ASTContext &Ctx) : Context(Ctx) { }
-
-- std::pair<uint64_t, unsigned>
-- getMemberPointerWidthAndAlign(const MemberPointerType *MPT) const override;
-+ MemberPointerInfo
-+ getMemberPointerInfo(const MemberPointerType *MPT) const override;
-
- CallingConv getDefaultMethodCallConv(bool isVariadic) const override {
- if (!isVariadic &&
-@@ -227,7 +227,7 @@ getMSMemberPointerSlots(const MemberPointerType *MPT) {
- return std::make_pair(Ptrs, Ints);
- }
-
--std::pair<uint64_t, unsigned> MicrosoftCXXABI::getMemberPointerWidthAndAlign(
-+CXXABI::MemberPointerInfo MicrosoftCXXABI::getMemberPointerInfo(
- const MemberPointerType *MPT) const {
- // The nominal struct is laid out with pointers followed by ints and aligned
- // to a pointer width if any are present and an int width otherwise.
-@@ -237,22 +237,25 @@ std::pair<uint64_t, unsigned> MicrosoftCXXABI::getMemberPointerWidthAndAlign(
-
- unsigned Ptrs, Ints;
- std::tie(Ptrs, Ints) = getMSMemberPointerSlots(MPT);
-- uint64_t Width = Ptrs * PtrSize + Ints * IntSize;
-- unsigned Align;
-+ MemberPointerInfo MPI;
-+ MPI.HasPadding = false;
-+ MPI.Width = Ptrs * PtrSize + Ints * IntSize;
-
- // When MSVC does x86_32 record layout, it aligns aggregate member pointers to
- // 8 bytes. However, __alignof usually returns 4 for data memptrs and 8 for
- // function memptrs.
- if (Ptrs + Ints > 1 && Target.getTriple().isArch32Bit())
-- Align = 64;
-+ MPI.Align = 64;
- else if (Ptrs)
-- Align = Target.getPointerAlign(0);
-+ MPI.Align = Target.getPointerAlign(0);
- else
-- Align = Target.getIntAlign();
-+ MPI.Align = Target.getIntAlign();
-
-- if (Target.getTriple().isArch64Bit())
-- Width = llvm::alignTo(Width, Align);
-- return std::make_pair(Width, Align);
-+ if (Target.getTriple().isArch64Bit()) {
-+ MPI.Width = llvm::alignTo(MPI.Width, MPI.Align);
-+ MPI.HasPadding = MPI.Width != (Ptrs * PtrSize + Ints * IntSize);
-+ }
-+ return MPI;
- }
-
- CXXABI *clang::CreateMicrosoftCXXABI(ASTContext &Ctx) {
-diff --git a/tools/clang/lib/Parse/ParseExpr.cpp b/tools/clang/lib/Parse/ParseExpr.cpp
-index 44b87af01a..73aac10c23 100644
---- a/tools/clang/lib/Parse/ParseExpr.cpp
-+++ b/tools/clang/lib/Parse/ParseExpr.cpp
-@@ -716,6 +716,7 @@ class CastExpressionIdValidator : public CorrectionCandidateCallback {
- /// '__is_sealed' [MS]
- /// '__is_trivial'
- /// '__is_union'
-+/// '__has_unique_object_representations'
- ///
- /// [Clang] unary-type-trait:
- /// '__is_aggregate'
-diff --git a/tools/clang/lib/Sema/SemaExprCXX.cpp b/tools/clang/lib/Sema/SemaExprCXX.cpp
-index a9cf3ec799..a7d75ad977 100644
---- a/tools/clang/lib/Sema/SemaExprCXX.cpp
-+++ b/tools/clang/lib/Sema/SemaExprCXX.cpp
-@@ -4141,6 +4141,7 @@ static bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT,
- case UTT_IsDestructible:
- case UTT_IsNothrowDestructible:
- case UTT_IsTriviallyDestructible:
-+ case UTT_HasUniqueObjectRepresentations:
- if (ArgTy->isIncompleteArrayType() || ArgTy->isVoidType())
- return true;
-
-@@ -4580,6 +4581,8 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT,
- // Returns True if and only if T is a complete type at the point of the
- // function call.
- return !T->isIncompleteType();
-+ case UTT_HasUniqueObjectRepresentations:
-+ return C.hasUniqueObjectRepresentations(T);
- }
- }
-
-diff --git a/tools/clang/test/SemaCXX/has_unique_object_reps_member_ptr.cpp b/tools/clang/test/SemaCXX/has_unique_object_reps_member_ptr.cpp
-new file mode 100644
-index 0000000000..b8e27f82ff
---- /dev/null
-+++ b/tools/clang/test/SemaCXX/has_unique_object_reps_member_ptr.cpp
-@@ -0,0 +1,32 @@
-+// RUN: %clang_cc1 -triple x86_64-linux-pc -DIS64 -fsyntax-only -verify -std=c++17 %s
-+// RUN: %clang_cc1 -triple x86_64-windows-pc -DIS64 -fsyntax-only -verify -std=c++17 %s
-+// RUN: %clang_cc1 -triple i386-linux-pc -fsyntax-only -verify -std=c++17 %s
-+// RUN: %clang_cc1 -triple i386-windows-pc -DW32 -fsyntax-only -verify -std=c++17 %s
-+// expected-no-diagnostics
-+
-+struct Base {};
-+struct A : virtual Base {
-+ virtual void n() {}
-+};
-+
-+auto p = &A::n;
-+static_assert(__has_unique_object_representations(decltype(p)));
-+
-+struct B {
-+ decltype(p) x;
-+ int b;
-+#ifdef IS64
-+ // required on 64 bit to fill out the tail padding.
-+ int c;
-+#endif
-+};
-+static_assert(__has_unique_object_representations(B));
-+
-+struct C { // has padding on Win32, but nothing else.
-+ decltype(p) x;
-+};
-+#ifdef W32
-+static_assert(!__has_unique_object_representations(C));
-+#else
-+static_assert(__has_unique_object_representations(C));
-+#endif
-diff --git a/tools/clang/test/SemaCXX/type-traits.cpp b/tools/clang/test/SemaCXX/type-traits.cpp
-index 5879a77dd5..3c2f9c7f0f 100644
---- a/tools/clang/test/SemaCXX/type-traits.cpp
-+++ b/tools/clang/test/SemaCXX/type-traits.cpp
-@@ -2352,3 +2352,321 @@ void is_trivially_destructible_test() {
- { int arr[F(__is_trivially_destructible(void))]; }
- { int arr[F(__is_trivially_destructible(const volatile void))]; }
- }
-+
-+// Instantiation of __has_unique_object_representations
-+template <typename T>
-+struct has_unique_object_representations {
-+ static const bool value = __has_unique_object_representations(T);
-+};
-+
-+static_assert(!has_unique_object_representations<void>::value, "void is never unique");
-+static_assert(!has_unique_object_representations<const void>::value, "void is never unique");
-+static_assert(!has_unique_object_representations<volatile void>::value, "void is never unique");
-+static_assert(!has_unique_object_representations<const volatile void>::value, "void is never unique");
-+
-+static_assert(has_unique_object_representations<int>::value, "integrals are");
-+static_assert(has_unique_object_representations<const int>::value, "integrals are");
-+static_assert(has_unique_object_representations<volatile int>::value, "integrals are");
-+static_assert(has_unique_object_representations<const volatile int>::value, "integrals are");
-+
-+static_assert(has_unique_object_representations<void *>::value, "as are pointers");
-+static_assert(has_unique_object_representations<const void *>::value, "as are pointers");
-+static_assert(has_unique_object_representations<volatile void *>::value, "are pointers");
-+static_assert(has_unique_object_representations<const volatile void *>::value, "as are pointers");
-+
-+static_assert(has_unique_object_representations<int *>::value, "as are pointers");
-+static_assert(has_unique_object_representations<const int *>::value, "as are pointers");
-+static_assert(has_unique_object_representations<volatile int *>::value, "as are pointers");
-+static_assert(has_unique_object_representations<const volatile int *>::value, "as are pointers");
-+
-+class C {};
-+using FP = int (*)(int);
-+using PMF = int (C::*)(int);
-+using PMD = int C::*;
-+
-+static_assert(has_unique_object_representations<FP>::value, "even function pointers");
-+static_assert(has_unique_object_representations<const FP>::value, "even function pointers");
-+static_assert(has_unique_object_representations<volatile FP>::value, "even function pointers");
-+static_assert(has_unique_object_representations<const volatile FP>::value, "even function pointers");
-+
-+static_assert(has_unique_object_representations<PMF>::value, "and pointer to members");
-+static_assert(has_unique_object_representations<const PMF>::value, "and pointer to members");
-+static_assert(has_unique_object_representations<volatile PMF>::value, "and pointer to members");
-+static_assert(has_unique_object_representations<const volatile PMF>::value, "and pointer to members");
-+
-+static_assert(has_unique_object_representations<PMD>::value, "and pointer to members");
-+static_assert(has_unique_object_representations<const PMD>::value, "and pointer to members");
-+static_assert(has_unique_object_representations<volatile PMD>::value, "and pointer to members");
-+static_assert(has_unique_object_representations<const volatile PMD>::value, "and pointer to members");
-+
-+static_assert(has_unique_object_representations<bool>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<char>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<signed char>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<unsigned char>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<short>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<unsigned short>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<int>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<unsigned int>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<long>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<unsigned long>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<long long>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<unsigned long long>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<wchar_t>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<char16_t>::value, "yes, all integral types");
-+static_assert(has_unique_object_representations<char32_t>::value, "yes, all integral types");
-+
-+static_assert(!has_unique_object_representations<void>::value, "but not void!");
-+static_assert(!has_unique_object_representations<decltype(nullptr)>::value, "or nullptr_t");
-+static_assert(!has_unique_object_representations<float>::value, "definitely not Floating Point");
-+static_assert(!has_unique_object_representations<double>::value, "definitely not Floating Point");
-+static_assert(!has_unique_object_representations<long double>::value, "definitely not Floating Point");
-+
-+struct NoPadding {
-+ int a;
-+ int b;
-+};
-+
-+static_assert(has_unique_object_representations<NoPadding>::value, "types without padding are");
-+
-+struct InheritsFromNoPadding : NoPadding {
-+ int c;
-+ int d;
-+};
-+
-+static_assert(has_unique_object_representations<InheritsFromNoPadding>::value, "types without padding are");
-+
-+struct VirtuallyInheritsFromNoPadding : virtual NoPadding {
-+ int c;
-+ int d;
-+};
-+
-+static_assert(!has_unique_object_representations<VirtuallyInheritsFromNoPadding>::value, "No virtual inheritence");
-+
-+struct Padding {
-+ char a;
-+ int b;
-+};
-+
-+//static_assert(!has_unique_object_representations<Padding>::value, "but not with padding");
-+
-+struct InheritsFromPadding : Padding {
-+ int c;
-+ int d;
-+};
-+
-+static_assert(!has_unique_object_representations<InheritsFromPadding>::value, "or its subclasses");
-+
-+struct TailPadding {
-+ int a;
-+ char b;
-+};
-+
-+static_assert(!has_unique_object_representations<TailPadding>::value, "even at the end");
-+
-+struct TinyStruct {
-+ char a;
-+};
-+
-+static_assert(has_unique_object_representations<TinyStruct>::value, "Should be no padding");
-+
-+struct InheritsFromTinyStruct : TinyStruct {
-+ int b;
-+};
-+
-+static_assert(!has_unique_object_representations<InheritsFromTinyStruct>::value, "Inherit causes padding");
-+
-+union NoPaddingUnion {
-+ int a;
-+ unsigned int b;
-+};
-+
-+static_assert(has_unique_object_representations<NoPaddingUnion>::value, "unions follow the same rules as structs");
-+
-+union PaddingUnion {
-+ int a;
-+ long long b;
-+};
-+
-+static_assert(!has_unique_object_representations<PaddingUnion>::value, "unions follow the same rules as structs");
-+
-+struct NotTriviallyCopyable {
-+ int x;
-+ NotTriviallyCopyable(const NotTriviallyCopyable &) {}
-+};
-+
-+static_assert(!has_unique_object_representations<NotTriviallyCopyable>::value, "must be trivially copyable");
-+
-+struct HasNonUniqueMember {
-+ float x;
-+};
-+
-+static_assert(!has_unique_object_representations<HasNonUniqueMember>::value, "all members must be unique");
-+
-+enum ExampleEnum { xExample,
-+ yExample };
-+enum LLEnum : long long { xLongExample,
-+ yLongExample };
-+
-+static_assert(has_unique_object_representations<ExampleEnum>::value, "Enums are integrals, so unique!");
-+static_assert(has_unique_object_representations<LLEnum>::value, "Enums are integrals, so unique!");
-+
-+enum class ExampleEnumClass { xExample,
-+ yExample };
-+enum class LLEnumClass : long long { xLongExample,
-+ yLongExample };
-+
-+static_assert(has_unique_object_representations<ExampleEnumClass>::value, "Enums are integrals, so unique!");
-+static_assert(has_unique_object_representations<LLEnumClass>::value, "Enums are integrals, so unique!");
-+
-+// because references aren't trivially copyable.
-+static_assert(!has_unique_object_representations<int &>::value, "No references!");
-+static_assert(!has_unique_object_representations<const int &>::value, "No references!");
-+static_assert(!has_unique_object_representations<volatile int &>::value, "No references!");
-+static_assert(!has_unique_object_representations<const volatile int &>::value, "No references!");
-+static_assert(!has_unique_object_representations<Empty>::value, "No empty types!");
-+static_assert(!has_unique_object_representations<EmptyUnion>::value, "No empty types!");
-+
-+class Compressed : Empty {
-+ int x;
-+};
-+
-+static_assert(has_unique_object_representations<Compressed>::value, "But inheriting from one is ok");
-+
-+class EmptyInheritor : Compressed {};
-+
-+static_assert(has_unique_object_representations<EmptyInheritor>::value, "As long as the base has items, empty is ok");
-+
-+class Dynamic {
-+ virtual void A();
-+ int i;
-+};
-+
-+static_assert(!has_unique_object_representations<Dynamic>::value, "Dynamic types are not valid");
-+
-+class InheritsDynamic : Dynamic {
-+ int j;
-+};
-+
-+static_assert(!has_unique_object_representations<InheritsDynamic>::value, "Dynamic types are not valid");
-+
-+static_assert(has_unique_object_representations<int[42]>::value, "Arrays are fine, as long as their value type is");
-+static_assert(has_unique_object_representations<int[]>::value, "Arrays are fine, as long as their value type is");
-+static_assert(has_unique_object_representations<int[][42]>::value, "Arrays are fine, as long as their value type is");
-+static_assert(!has_unique_object_representations<double[42]>::value, "So no array of doubles!");
-+static_assert(!has_unique_object_representations<double[]>::value, "So no array of doubles!");
-+static_assert(!has_unique_object_representations<double[][42]>::value, "So no array of doubles!");
-+
-+struct __attribute__((aligned(16))) WeirdAlignment {
-+ int i;
-+};
-+union __attribute__((aligned(16))) WeirdAlignmentUnion {
-+ int i;
-+};
-+static_assert(!has_unique_object_representations<WeirdAlignment>::value, "Alignment causes padding");
-+static_assert(!has_unique_object_representations<WeirdAlignmentUnion>::value, "Alignment causes padding");
-+static_assert(!has_unique_object_representations<WeirdAlignment[42]>::value, "Also no arrays that have padding");
-+
-+static_assert(!has_unique_object_representations<int(int)>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) const>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) volatile>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) const volatile>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) &>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) const &>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) volatile &>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) const volatile &>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) &&>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) const &&>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) volatile &&>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int) const volatile &&>::value, "Functions are not unique");
-+
-+static_assert(!has_unique_object_representations<int(int, ...)>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) const>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) volatile>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) const volatile>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) &>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) const &>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) volatile &>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) const volatile &>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) &&>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) const &&>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) volatile &&>::value, "Functions are not unique");
-+static_assert(!has_unique_object_representations<int(int, ...) const volatile &&>::value, "Functions are not unique");
-+
-+void foo(){
-+ static auto lambda = []() {};
-+ static_assert(!has_unique_object_representations<decltype(lambda)>::value, "Lambdas follow struct rules");
-+ int i;
-+ static auto lambda2 = [i]() {};
-+ static_assert(has_unique_object_representations<decltype(lambda2)>::value, "Lambdas follow struct rules");
-+}
-+
-+struct PaddedBitfield {
-+ char c : 6;
-+ char d : 1;
-+};
-+
-+struct UnPaddedBitfield {
-+ char c : 6;
-+ char d : 2;
-+};
-+
-+struct AlignedPaddedBitfield {
-+ char c : 6;
-+ __attribute__((aligned(1)))
-+ char d : 2;
-+};
-+
-+static_assert(!has_unique_object_representations<PaddedBitfield>::value, "Bitfield padding");
-+static_assert(has_unique_object_representations<UnPaddedBitfield>::value, "Bitfield padding");
-+static_assert(!has_unique_object_representations<AlignedPaddedBitfield>::value, "Bitfield padding");
-+
-+struct BoolBitfield {
-+ bool b : 8;
-+};
-+
-+static_assert(has_unique_object_representations<BoolBitfield>::value, "Bitfield bool");
-+
-+struct BoolBitfield2 {
-+ bool b : 16;
-+};
-+
-+static_assert(!has_unique_object_representations<BoolBitfield2>::value, "Bitfield bool");
-+
-+struct GreaterSizeBitfield {
-+ //expected-warning@+1 {{width of bit-field 'n'}}
-+ int n : 1024;
-+};
-+
-+static_assert(sizeof(GreaterSizeBitfield) == 128, "Bitfield Size");
-+static_assert(!has_unique_object_representations<GreaterSizeBitfield>::value, "Bitfield padding");
-+
-+struct StructWithRef {
-+ int &I;
-+};
-+
-+static_assert(has_unique_object_representations<StructWithRef>::value, "References are still unique");
-+
-+struct NotUniqueBecauseTailPadding {
-+ int &r;
-+ char a;
-+};
-+struct CanBeUniqueIfNoPadding : NotUniqueBecauseTailPadding {
-+ char b[7];
-+};
-+
-+static_assert(!has_unique_object_representations<NotUniqueBecauseTailPadding>::value,
-+ "non trivial");
-+// Can be unique on Itanium, since the is child class' data is 'folded' into the
-+// parent's tail padding.
-+static_assert(sizeof(CanBeUniqueIfNoPadding) != 16 ||
-+ has_unique_object_representations<CanBeUniqueIfNoPadding>::value,
-+ "inherit from std layout");
-+
-+namespace ErrorType {
-+ struct S; //expected-note{{forward declaration of 'ErrorType::S'}}
-+
-+ struct T {
-+ S t; //expected-error{{field has incomplete type 'ErrorType::S'}}
-+ };
-+ bool b = __has_unique_object_representations(T);
-+};
---
-2.14.1
-
diff --git a/development/qt-creator-llvm/patches/230_D40673_Add-Float128-as-alias-to-__float128.patch b/development/qt-creator-llvm/patches/230_D40673_Add-Float128-as-alias-to-__float128.patch
deleted file mode 100644
index b1ca72f0f128..000000000000
--- a/development/qt-creator-llvm/patches/230_D40673_Add-Float128-as-alias-to-__float128.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-diff --git a/tools/clang/include/clang/Basic/TokenKinds.def b/tools/clang/include/clang/Basic/TokenKinds.def
-index 90ac33b9ea..67fea10788 100644
---- a/tools/clang/include/clang/Basic/TokenKinds.def
-+++ b/tools/clang/include/clang/Basic/TokenKinds.def
-@@ -390,6 +390,7 @@ TYPE_TRAIT_2(__builtin_types_compatible_p, TypeCompatible, KEYNOCXX)
- KEYWORD(__builtin_va_arg , KEYALL)
- KEYWORD(__extension__ , KEYALL)
- KEYWORD(__float128 , KEYALL)
-+ALIAS("_Float128", __float128 , KEYNOCXX)
- KEYWORD(__imag , KEYALL)
- KEYWORD(__int128 , KEYALL)
- KEYWORD(__label__ , KEYALL)
-diff --git a/tools/clang/lib/Frontend/InitPreprocessor.cpp b/tools/clang/lib/Frontend/InitPreprocessor.cpp
-index 92d61369b4..8edc06fe93 100644
---- a/tools/clang/lib/Frontend/InitPreprocessor.cpp
-+++ b/tools/clang/lib/Frontend/InitPreprocessor.cpp
-@@ -790,6 +790,10 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
- DefineFloatMacros(Builder, "FLT", &TI.getFloatFormat(), "F");
- DefineFloatMacros(Builder, "DBL", &TI.getDoubleFormat(), "");
- DefineFloatMacros(Builder, "LDBL", &TI.getLongDoubleFormat(), "L");
-+ if (TI.hasFloat128Type())
-+ // FIXME: Switch away from the non-standard "Q" when we can
-+ DefineFloatMacros(Builder, "FLT128", &TI.getFloat128Format(), "Q");
-+
-
- // Define a __POINTER_WIDTH__ macro for stdint.h.
- Builder.defineMacro("__POINTER_WIDTH__",
-diff --git a/tools/clang/test/Preprocessor/cuda-types.cu b/tools/clang/test/Preprocessor/cuda-types.cu
-index 5f7b91655c..9e96f6a15e 100644
---- a/tools/clang/test/Preprocessor/cuda-types.cu
-+++ b/tools/clang/test/Preprocessor/cuda-types.cu
-@@ -5,42 +5,44 @@
- // FIXME: We really should make __GCC_HAVE_SYNC_COMPARE_AND_SWAP identical on
- // host and device, but architecturally this is difficult at the moment.
-
-+// RUN: mkdir -p %t
-+
- // RUN: %clang --cuda-host-only -nocudainc -target i386-unknown-linux-gnu -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/i386-host-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/i386-host-defines-filtered
- // RUN: %clang --cuda-device-only -nocudainc -nocudalib -target i386-unknown-linux-gnu -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/i386-device-defines-filtered
--// RUN: diff %T/i386-host-defines-filtered %T/i386-device-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/i386-device-defines-filtered
-+// RUN: diff %t/i386-host-defines-filtered %t/i386-device-defines-filtered
-
- // RUN: %clang --cuda-host-only -nocudainc -target x86_64-unknown-linux-gnu -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/x86_64-host-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/x86_64-host-defines-filtered
- // RUN: %clang --cuda-device-only -nocudainc -nocudalib -target x86_64-unknown-linux-gnu -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/x86_64-device-defines-filtered
--// RUN: diff %T/x86_64-host-defines-filtered %T/x86_64-device-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/x86_64-device-defines-filtered
-+// RUN: diff %t/x86_64-host-defines-filtered %t/x86_64-device-defines-filtered
-
- // RUN: %clang --cuda-host-only -nocudainc -target powerpc64-unknown-linux-gnu -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/powerpc64-host-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/powerpc64-host-defines-filtered
- // RUN: %clang --cuda-device-only -nocudainc -nocudalib -target powerpc64-unknown-linux-gnu -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/powerpc64-device-defines-filtered
--// RUN: diff %T/powerpc64-host-defines-filtered %T/powerpc64-device-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/powerpc64-device-defines-filtered
-+// RUN: diff %t/powerpc64-host-defines-filtered %t/powerpc64-device-defines-filtered
-
- // RUN: %clang --cuda-host-only -nocudainc -target i386-windows-msvc -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/i386-msvc-host-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/i386-msvc-host-defines-filtered
- // RUN: %clang --cuda-device-only -nocudainc -nocudalib -target i386-windows-msvc -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/i386-msvc-device-defines-filtered
--// RUN: diff %T/i386-msvc-host-defines-filtered %T/i386-msvc-device-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/i386-msvc-device-defines-filtered
-+// RUN: diff %t/i386-msvc-host-defines-filtered %t/i386-msvc-device-defines-filtered
-
- // RUN: %clang --cuda-host-only -nocudainc -target x86_64-windows-msvc -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/x86_64-msvc-host-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/x86_64-msvc-host-defines-filtered
- // RUN: %clang --cuda-device-only -nocudainc -nocudalib -target x86_64-windows-msvc -x cuda -E -dM -o - /dev/null \
- // RUN: | grep 'define __[^ ]*\(TYPE\|MAX\|SIZEOF|WIDTH\)\|define __GCC_ATOMIC' \
--// RUN: | grep -v '__LDBL\|_LONG_DOUBLE' > %T/x86_64-msvc-device-defines-filtered
--// RUN: diff %T/x86_64-msvc-host-defines-filtered %T/x86_64-msvc-device-defines-filtered
-+// RUN: | grep -v '__FLT128\|__LDBL\|_LONG_DOUBLE' > %t/x86_64-msvc-device-defines-filtered
-+// RUN: diff %t/x86_64-msvc-host-defines-filtered %t/x86_64-msvc-device-defines-filtered
-diff --git a/tools/clang/test/Sema/_Float128.c b/tools/clang/test/Sema/_Float128.c
-new file mode 100644
-index 0000000000..f0c3c6d555
---- /dev/null
-+++ b/tools/clang/test/Sema/_Float128.c
-@@ -0,0 +1,22 @@
-+// RUN: %clang_cc1 -verify %s
-+// RUN: %clang_cc1 -triple powerpc64-linux -verify %s
-+// RUN: %clang_cc1 -triple i686-windows-gnu -verify %s
-+// RUN: %clang_cc1 -triple x86_64-windows-gnu -verify %s
-+// RUN: %clang_cc1 -triple x86_64-windows-msvc -verify %s
-+
-+#if defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
-+_Float128 f;
-+_Float128 tiny = __FLT128_EPSILON__;
-+int g(int x, _Float128 *y) {
-+ return x + *y;
-+}
-+
-+// expected-no-diagnostics
-+#else
-+_Float128 f; // expected-error {{__float128 is not supported on this target}}
-+float tiny = __FLT128_EPSILON__; // expected-error{{use of undeclared identifier}}
-+int g(int x, _Float128 *y) { // expected-error {{__float128 is not supported on this target}}
-+ return x + *y;
-+}
-+
-+#endif // defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
---
-2.14.1
-
diff --git a/development/qt-creator-llvm/patches/README.md b/development/qt-creator-llvm/patches/README.md
deleted file mode 100644
index d57bb1d5ef25..000000000000
--- a/development/qt-creator-llvm/patches/README.md
+++ /dev/null
@@ -1,149 +0,0 @@
-Extra patches to LLVM/Clang 5.0
-===============================
-
-The patches in this directory are applied to LLVM/Clang with:
-
- $ cd $LLVM_SOURCE_DIR
- $ git apply --whitespace=fix $QT_CREATOR_SOURCE/dist/clang/patches/*.patch
-
-Backported changes
-------------------
-
-##### 110_D41016_Fix-crash-in-unused-lambda-capture-warning-for-VLAs.patch
-
-* <https://reviews.llvm.org/D41016>
-
-[Sema] Fix crash in unused-lambda-capture warning for VLAs
-
-##### 010_D35355_Fix-templated-type-alias-completion-when-using-global-completion-cache.patch
-
-* <https://reviews.llvm.org/D35355>
-
-Fixes completion involving templated type alias.
-
-##### 120_D41688_Fix-crash-on-code-completion-in-comment-in-included-file.patch
-
-* <https://reviews.llvm.org/D41688>
-
-[Lex] Fix crash on code completion in comment in included file.
-
-##### 100_D40841_Fix-a-crash-on-C++17-AST-for-non-trivial-construction-into-a-trivial-brace-initialize.patch
-
-* <https://reviews.llvm.org/D40841>
-
-[analyzer] Fix a crash on C++17 AST for non-trivial construction into a trivial brace initializer.
-
-##### 090_D40746_Correctly-handle-line-table-entries-without-filenames-during-AST-serialization.patch
-
-* <https://reviews.llvm.org/D40746>
-
-Correctly handle line table entries without filenames during AST serialization
-Fixes crash during a reparse.
-
-##### 050_D40027_Fix-cursors-for-in-class-initializer-of-field-declarations.patch
-
-* <https://reviews.llvm.org/D40027>
-* <https://bugs.llvm.org/show_bug.cgi?id=33745>
-
-[libclang] Fix cursors for in-class initializer of field declarations
-Fixes AST access to initializers of class members. Affects mostly semantic highlighting and highlighting of local uses.
-
-##### 070_D40561_Fix-cursors-for-functions-with-trailing-return-type.patch
-
-* <https://reviews.llvm.org/D40561>
-
-[libclang] Fix cursors for functions with trailing return type
-
-##### 060_D40072_Support-querying-whether-a-declaration-is-invalid.patch
-
-* <https://reviews.llvm.org/D40072>
-
-[libclang] Add support for checking abstractness of records
-Would need https://codereview.qt-project.org/#/c/211497/ on Qt Creator side.
-
-##### 040_D39957_Honor-TerseOutput-for-constructors.patch
-
-* <https://reviews.llvm.org/D39957>
-
-[DeclPrinter] Honor TerseOutput for constructors
-Avoids printing member initialization list and body for constructor.
-
-##### 080_D40643_Add-function-to-get-the-buffer-for-a-file.patch
-
-* <https://reviews.llvm.org/D40643>
-* <https://reviews.llvm.org/rL319881>
-
-[libclang] Add function to get the buffer for a file
-Together with https://codereview.qt-project.org/#/c/212972/ fixes highlighting
-
-##### 030_D38615_Only-mark-CXCursors-for-explicit-attributes-with-a-type.patch
-
-* <https://reviews.llvm.org/D38615>
-
-[libclang] Only mark CXCursors for explicit attributes with a type
-Some classes have totally broken highlighting (like classes inside texteditor.cpp)
-
-##### 170_D40013_DeclPrinter-Allow-printing-fully-qualified-name.patch
-##### 180_D39903_libclang-Allow-pretty-printing-declarations.patch
-
-* <https://reviews.llvm.org/D40013>
-* <https://reviews.llvm.org/D39903>
-
-[DeclPrinter] Allow printing fully qualified name of function declaration
-[libclang] Allow pretty printing declarations
-
-Improves pretty printing for tooltips.
-
-##### 220_Support-std-has_unique_object_represesentations.patch
-
-* https://reviews.llvm.org/D39064 mplement __has_unique_object_representations
-* https://reviews.llvm.org/D39347 Fix __has_unique_object_representations implementation
-* (without review, git sha1 133cba2f9263f63f44b6b086a500f374bff13eee) Fix ICE when __has_unqiue_object_representations called with invalid decl
-* (without review, git cb61fc53dc997bca3bee98d898d3406d0acb221c) Revert unintended hunk from ICE-Change
-* https://reviews.llvm.org/D42863 Make __has_unique_object_representations reject empty union types.
-
-Backport patches implementing std::has_unique_object_representations for
-parsing type_traits header of stdlibc++ 7.
-
-
-##### 230_D40673_Add-Float128-as-alias-to-__float128.patch
-
-* https://reviews.llvm.org/D40673
-
-Fixes parsing stdlib.h with -DGNU_SOURCE for GCC 7.2 (and maybe others).
-
-Additional changes
-------------------
-
-##### 160_QTCREATORBUG-15449_Fix-files-lock-on-Windows.patch
-
-* <https://reviews.llvm.org/D35200>
-* <https://bugreports.qt.io/browse/QTCREATORBUG-15449>
-
-Significantly reduces problems when saving a header file on Windows.
-
-##### 150_QTCREATORBUG-15157_Link-with-clazy_llvm.patch
-##### 130_QTCREATORBUG-15157_Link-with-clazy_clang.patch
-##### 140_QTCREATORBUG-15157_Link-with-clazy_extra.patch
-
-* <https://bugreports.qt.io/browse/QTCREATORBUG-15157>
-
-Builds Clazy as an LLVM part and forces link for Clazy plugin registry entry.
-
-##### 200_D36390_Fix-overloaded-static-functions-in-SemaCodeComplete.patch
-
-* <https://reviews.llvm.org/D36390>
-* <https://bugs.llvm.org/show_bug.cgi?id=33904>
-
-Fix overloaded static functions in SemaCodeComplete
-
-Happens when static function is accessed via the class variable.
-That leads to incorrect overloads number because the variable is considered as the first argument.
-
-##### 210_D43453_Fix-overloaded-static-functions-for-templates.patch
-
-* <https://reviews.llvm.org/D43453>
-
-Fix overloaded static functions for templates
-
-Apply almost the same fix as D36390 but for templates
diff --git a/development/qt-creator-llvm/qt-creator-llvm.SlackBuild b/development/qt-creator-llvm/qt-creator-llvm.SlackBuild
index c45b97360b87..d3ba280f7f92 100644
--- a/development/qt-creator-llvm/qt-creator-llvm.SlackBuild
+++ b/development/qt-creator-llvm/qt-creator-llvm.SlackBuild
@@ -25,7 +25,7 @@
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=qt-creator-llvm
-VERSION=${VERSION:-8.0_c47ba33}
+VERSION=${VERSION:-13.0.0_d7b669b}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
@@ -66,61 +66,12 @@ fi
set -e
-build_install_cmake_tmp()
-{
- CMAKE_VERSION=3.17.1
-
- mkdir cmake-tmp
- pushd cmake-tmp
-
- tar xvf $CWD/cmake-${CMAKE_VERSION}.tar.gz
- cd cmake-${CMAKE_VERSION}
-
- mkdir build
- cd build
-
- CMAKE_INSTALL_ROOT=$(pwd)
-
- CFLAGS="${SLKCFLAGS}" \
- CXXFLAGS="${SLKCFLAGS}" \
- ../configure \
- --prefix=/usr \
- --system-curl \
- --system-expat \
- --no-system-jsoncpp \
- --system-zlib \
- --system-bzip2 \
- --system-libarchive
-
- make || make -j1
- make install DESTDIR=${CMAKE_INSTALL_ROOT}
-
- # Favour the CMake version we just built.
-
- export PATH=${CMAKE_INSTALL_ROOT}/usr/bin:${PATH}
-
- # Return to caller's working dir.
-
- popd
-
- # Clean up the environment.
-
- unset CMAKE_INSTALL_ROOT
- unset CMAKE_VERSION
-
- # Debug info.
-
- printf "\nPATH: %s\nwhich cmake: %s\n%s\n\n" \
- "${PATH}" "$(which cmake)" \
- "$($(which cmake) --version | head -n1)"
-}
-
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
+tar xvf $CWD/$PRGNAM-$VERSION.tar.?z
cd $PRGNAM-$VERSION
mv clang-tools-extra clang/tools/extra
@@ -134,7 +85,7 @@ chmod -R a-st,u+rwX,go-w+rX .
# Exceptionally, copy docs before the build starts. This can save quite
# some script development time should one of the files be missing.
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/{clang,clang-tools-extra,clazy}
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/{clang,clang-tools-extra}
mkdir -p $PKG/install
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
@@ -148,15 +99,8 @@ cp -a CODE_OWNERS.TXT CREDITS.TXT LICENSE.TXT README.txt RELEASE_TESTERS.TXT \
$PKG/usr/doc/$PRGNAM-$VERSION/clang
cp -a tools/extra/{CODE_OWNERS.TXT,LICENSE.TXT,README.txt} \
$PKG/usr/doc/$PRGNAM-$VERSION/clang-tools-extra
- cp -a tools/extra/clazy/{COPYING-LGPL2.txt,Changelog,HOWTO,README.md} \
- $PKG/usr/doc/$PRGNAM-$VERSION/clazy
)
-# Newer version of CMake than in Slackware 14.2 is needed to build LLVM/Clang.
-# Build and install that newer version in temp path.
-
-build_install_cmake_tmp
-
# Build LLVM/Clang proper.
mkdir -p build
@@ -180,7 +124,7 @@ cd ..
find $PKG/usr/libexec/qtcreator/clang/bin -mindepth 1 -not \
\( -name clang -o -name clang-[0-9]\* -o -name clang-tidy -o \
- -name clangd -o -name clazy-standalone -o -name llvm-config \) \
+ -name clangd -o -name llvm-config \) \
-exec rm {} \;
rm -rf $PKG/usr/libexec/qtcreator/clang/libexec
@@ -189,12 +133,5 @@ rm -rf $PKG/usr/libexec/qtcreator/clang/share
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-# _clazy_ has troubles finding _libLLVM-8.so_. Help it.
-# NOTE: Run _patchelf_ only after running _strip_, otherwise stripping breaks
-# the binary. See https://github.com/probonopd/linuxdeployqt/issues/29
-
-patchelf --set-rpath /usr/libexec/qtcreator/clang/lib \
- $PKG/usr/libexec/qtcreator/clang/bin/clazy-standalone
-
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/development/qt-creator-llvm/qt-creator-llvm.info b/development/qt-creator-llvm/qt-creator-llvm.info
index fca13c2cb3c8..b4c706f176cf 100644
--- a/development/qt-creator-llvm/qt-creator-llvm.info
+++ b/development/qt-creator-llvm/qt-creator-llvm.info
@@ -1,10 +1,8 @@
PRGNAM="qt-creator-llvm"
-VERSION="8.0_c47ba33"
+VERSION="13.0.0_d7b669b"
HOMEPAGE="https://code.qt.io/cgit/clang/llvm-project.git/"
-DOWNLOAD="http://sourceforge.net/projects/slackbuildsdirectlinks/files/qt-creator-llvm/qt-creator-llvm-8.0_c47ba33.tar.gz \
- https://github.com/Kitware/CMake/releases/download/v3.17.1/cmake-3.17.1.tar.gz"
-MD5SUM="36f76ea4a550cdd48884841861b1812c \
- 958959aa5e0338144eed7320e9b48561"
+DOWNLOAD="https://ponce.cc/slackware/sources/repo/qt-creator-llvm-13.0.0_d7b669b.tar.xz"
+MD5SUM="f141a7ba8ecd121e9db455232f63834c"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""