diff options
Diffstat (limited to 'development/qt-creator-llvm/patches/200_D36390_Fix-overloaded-static-functions-in-SemaCodeComplete.patch')
-rw-r--r-- | development/qt-creator-llvm/patches/200_D36390_Fix-overloaded-static-functions-in-SemaCodeComplete.patch | 148 |
1 files changed, 0 insertions, 148 deletions
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 316f3afd17..0000000000 --- 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 -+ |