summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-11-04 15:58:13 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-11-04 15:58:13 +0000
commit3eaa22af578762dd43736d9fd19b2bcd3d2539ef (patch)
treed3137084f485a596a441630dd818a87a81ab707f
parentd208ef95aa63230f3afbb65c3d73783313e96ba9 (diff)
downloadbcm5719-llvm-3eaa22af578762dd43736d9fd19b2bcd3d2539ef.tar.gz
bcm5719-llvm-3eaa22af578762dd43736d9fd19b2bcd3d2539ef.zip
In C++ keep unavailable function calls in the AST, like in C/ObjC.
This allows the migrator to visit and fix them. llvm-svn: 143699
-rw-r--r--clang/lib/ARCMigrate/TransGCCalls.cpp1
-rw-r--r--clang/lib/Sema/SemaOverload.cpp7
-rw-r--r--clang/test/ARCMT/GC.m2
-rw-r--r--clang/test/ARCMT/GC.m.result2
4 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/ARCMigrate/TransGCCalls.cpp b/clang/lib/ARCMigrate/TransGCCalls.cpp
index 71dc6dc357d..9c3faae395b 100644
--- a/clang/lib/ARCMigrate/TransGCCalls.cpp
+++ b/clang/lib/ARCMigrate/TransGCCalls.cpp
@@ -40,6 +40,7 @@ public:
Transaction Trans(TA);
TA.clearDiagnostic(diag::err_unavailable,
diag::err_unavailable_message,
+ diag::err_ovl_deleted_call, // ObjC++
DRE->getSourceRange());
TA.replace(DRE->getSourceRange(), "CFBridgingRelease");
}
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 153c0f8c24c..4db75a3bdac 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -8761,6 +8761,13 @@ Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
<< getDeletedOrUnavailableSuffix(Best->Function)
<< Fn->getSourceRange();
CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
+
+ // We emitted an error for the unvailable/deleted function call but keep
+ // the call in the AST.
+ FunctionDecl *FDecl = Best->Function;
+ Fn = FixOverloadedFunctionReference(Fn, Best->FoundDecl, FDecl);
+ return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
+ RParenLoc, ExecConfig);
}
break;
}
diff --git a/clang/test/ARCMT/GC.m b/clang/test/ARCMT/GC.m
index 90e0b458b25..c82095c3a9d 100644
--- a/clang/test/ARCMT/GC.m
+++ b/clang/test/ARCMT/GC.m
@@ -1,6 +1,8 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result
// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-gc-only -x objective-c %s > %t
// RUN: diff %t %s.result
+// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-gc-only -x objective-c++ %s > %t
+// RUN: diff %t %s.result
#include "Common.h"
diff --git a/clang/test/ARCMT/GC.m.result b/clang/test/ARCMT/GC.m.result
index 1055aa33386..cdf6431dbf6 100644
--- a/clang/test/ARCMT/GC.m.result
+++ b/clang/test/ARCMT/GC.m.result
@@ -1,6 +1,8 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result
// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-gc-only -x objective-c %s > %t
// RUN: diff %t %s.result
+// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-gc-only -x objective-c++ %s > %t
+// RUN: diff %t %s.result
#include "Common.h"
OpenPOWER on IntegriCloud