diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-11-03 14:24:45 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-11-03 14:24:45 +0000 |
commit | 606bd6dcc547cf2f9fd7387321db79419bf60041 (patch) | |
tree | 2acc1255fba6da316a5ec54f4a502cd7ec669fab /clang/lib/Sema/SemaDecl.cpp | |
parent | 42bce8f69db28b6b39453ecfbf8da6fc45fb14bf (diff) | |
download | bcm5719-llvm-606bd6dcc547cf2f9fd7387321db79419bf60041.tar.gz bcm5719-llvm-606bd6dcc547cf2f9fd7387321db79419bf60041.zip |
Don't dllimport inline functions when targeting MinGW (PR21366)
It turns out that MinGW never dllimports of exports inline functions.
This means that code compiled with Clang would fail to link with
MinGW-compiled libraries since we might try to import functions that
are not imported.
To fix this, make Clang never dllimport inline functions when targeting
MinGW.
llvm-svn: 221154
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 734a01e2e30..fe5981121fe 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -5185,6 +5185,14 @@ static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, S.Diag(OldImportAttr->getLocation(), diag::note_previous_attribute); OldDecl->dropAttr<DLLImportAttr>(); NewDecl->dropAttr<DLLImportAttr>(); + } else if (IsInline && OldImportAttr && + !S.Context.getTargetInfo().getCXXABI().isMicrosoft()) { + // In MinGW, seeing a function declared inline drops the dllimport attribute. + OldDecl->dropAttr<DLLImportAttr>(); + NewDecl->dropAttr<DLLImportAttr>(); + S.Diag(NewDecl->getLocation(), + diag::warn_dllimport_dropped_from_inline_function) + << NewDecl << OldImportAttr; } } |