summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-06-10 17:53:23 +0000
committerHans Wennborg <hans@hanshq.net>2014-06-10 17:53:23 +0000
commit9d06a8d06051b276d2b25af8b4e5c0c577db421d (patch)
treea9cf37ba7356103f4d92ad3b8e48c40778074682 /clang/lib/Sema/SemaDeclCXX.cpp
parent29aab7b355a06d47bdcfc9c788bdf8a69a37e1f1 (diff)
downloadbcm5719-llvm-9d06a8d06051b276d2b25af8b4e5c0c577db421d.tar.gz
bcm5719-llvm-9d06a8d06051b276d2b25af8b4e5c0c577db421d.zip
Don't inherit dll attributes to deleted methods (PR19988)
We would previously end up with an error when instantiating the following template: template <typename> struct __declspec(dllimport) S { void foo() = delete; }; S<int> s; error: attribute 'dllimport' cannot be applied to a deleted function llvm-svn: 210550
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp5
1 files changed, 2 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 3b660fdd423..b5e6dc850f1 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -4379,6 +4379,8 @@ static void checkDLLAttribute(Sema &S, CXXRecordDecl *Class) {
for (Decl *Member : Class->decls()) {
if (!isa<CXXMethodDecl>(Member) && !isa<VarDecl>(Member))
continue;
+ if (isa<CXXMethodDecl>(Member) && cast<CXXMethodDecl>(Member)->isDeleted())
+ continue;
if (InheritableAttr *MemberAttr = getDLLAttr(Member)) {
if (S.Context.getTargetInfo().getCXXABI().isMicrosoft() &&
@@ -4399,9 +4401,6 @@ static void checkDLLAttribute(Sema &S, CXXRecordDecl *Class) {
if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member)) {
if (ClassExported) {
- if (MD->isDeleted())
- continue;
-
if (MD->isUserProvided()) {
// Instantiate non-default methods.
S.MarkFunctionReferenced(Class->getLocation(), MD);
OpenPOWER on IntegriCloud