]> granicus.if.org Git - clang/commitdiff
In C++ keep unavailable function calls in the AST, like in C/ObjC.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 4 Nov 2011 15:58:13 +0000 (15:58 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 4 Nov 2011 15:58:13 +0000 (15:58 +0000)
This allows the migrator to visit and fix them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143699 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ARCMigrate/TransGCCalls.cpp
lib/Sema/SemaOverload.cpp
test/ARCMT/GC.m
test/ARCMT/GC.m.result

index 71dc6dc357d77dec7c9ae66908143d6deb9585d0..9c3faae395b8d45a0b09b4b46f720b9448549cfa 100644 (file)
@@ -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");
         }
index 153c0f8c24c7a09522b499dd9dd87e0b86bb3606..4db75a3bdac501f219a2521fcc0f6653fb4dbd43 100644 (file)
@@ -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;
   }
index 90e0b458b25d845165cd2662760ac33058c4d69b..c82095c3a9d3d7a063ba87f26384ffd3bd539ebe 100644 (file)
@@ -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"
 
index 1055aa3338682c045b2131f4b84dc66cb9ba4e31..cdf6431dbf6cacb54513985393edd0a6d50b404c 100644 (file)
@@ -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"