diff options
| author | Hans Wennborg <hans@hanshq.net> | 2014-06-10 17:53:23 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@hanshq.net> | 2014-06-10 17:53:23 +0000 |
| commit | 9d06a8d06051b276d2b25af8b4e5c0c577db421d (patch) | |
| tree | a9cf37ba7356103f4d92ad3b8e48c40778074682 /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | 29aab7b355a06d47bdcfc9c788bdf8a69a37e1f1 (diff) | |
| download | bcm5719-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.cpp | 5 |
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); |

