davide updated this revision to Diff 30288.
davide added a comment.
Addressing comments.
http://reviews.llvm.org/D11334
Files:
lib/Sema/SemaOverload.cpp
test/SemaCXX/deleted-function-access.cpp
Index: test/SemaCXX/deleted-function-access.cpp
===================================================================
--- test/SemaCXX/deleted-function-access.cpp
+++ test/SemaCXX/deleted-function-access.cpp
@@ -0,0 +1,4 @@
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
+
+struct S { virtual void f() = delete;
+ void g() { f(); } }; //expected-error{{call to deleted member
function 'f'}}
Index: lib/Sema/SemaOverload.cpp
===================================================================
--- lib/Sema/SemaOverload.cpp
+++ lib/Sema/SemaOverload.cpp
@@ -11604,6 +11604,14 @@
FoundDecl = MemExpr->getFoundDecl();
Qualifier = MemExpr->getQualifier();
UnbridgedCasts.restore();
+
+ // Calls to deleted member functions are verboten.
+ if (Method && Method->isDeleted())
+ Diag(MemExpr->getLocStart(), diag::err_ovl_deleted_member_call)
+ << true /* isDeleted */
+ << Method
+ << getDeletedOrUnavailableSuffix(Method)
+ << MemExpr->getSourceRange();
} else {
UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
Qualifier = UnresExpr->getQualifier();
Index: test/SemaCXX/deleted-function-access.cpp
===================================================================
--- test/SemaCXX/deleted-function-access.cpp
+++ test/SemaCXX/deleted-function-access.cpp
@@ -0,0 +1,4 @@
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
+
+struct S { virtual void f() = delete;
+ void g() { f(); } }; //expected-error{{call to deleted member function 'f'}}
Index: lib/Sema/SemaOverload.cpp
===================================================================
--- lib/Sema/SemaOverload.cpp
+++ lib/Sema/SemaOverload.cpp
@@ -11604,6 +11604,14 @@
FoundDecl = MemExpr->getFoundDecl();
Qualifier = MemExpr->getQualifier();
UnbridgedCasts.restore();
+
+ // Calls to deleted member functions are verboten.
+ if (Method && Method->isDeleted())
+ Diag(MemExpr->getLocStart(), diag::err_ovl_deleted_member_call)
+ << true /* isDeleted */
+ << Method
+ << getDeletedOrUnavailableSuffix(Method)
+ << MemExpr->getSourceRange();
} else {
UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
Qualifier = UnresExpr->getQualifier();
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits