On Fri, Oct 9, 2020 at 3:21 PM Ben Dunbobbin via cfe-commits <cfe-commits@lists.llvm.org> wrote: > > > Author: Ben Dunbobbin > Date: 2020-10-09T13:21:03+01:00 > New Revision: 4eb627ed96e3f2f9f24aec8a0654ce5204874bb8 > > URL: > https://github.com/llvm/llvm-project/commit/4eb627ed96e3f2f9f24aec8a0654ce5204874bb8 > DIFF: > https://github.com/llvm/llvm-project/commit/4eb627ed96e3f2f9f24aec8a0654ce5204874bb8.diff > > LOG: first upstream review This is a very much not useful commit message. If this is not an accidental commit, i suggest reverting and recommitting with a proper commit.
Roman. > Added: > > > Modified: > clang/lib/Sema/SemaDecl.cpp > clang/lib/Sema/SemaDeclAttr.cpp > clang/lib/Sema/SemaDeclCXX.cpp > clang/test/Sema/dllimport.c > clang/test/SemaCXX/dllexport.cpp > clang/test/SemaCXX/dllimport.cpp > > Removed: > > > > ################################################################################ > diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp > index c92d906580eb..9a6682e837dd 100644 > --- a/clang/lib/Sema/SemaDecl.cpp > +++ b/clang/lib/Sema/SemaDecl.cpp > @@ -6497,7 +6497,9 @@ static void checkDLLAttributeRedeclaration(Sema &S, > NamedDecl *OldDecl, > // special MSVC extension: in the last case, the declaration is treated as > if > // it were marked dllexport. > bool IsInline = false, IsStaticDataMember = false, IsQualifiedFriend = > false; > - bool IsMicrosoft = S.Context.getTargetInfo().getCXXABI().isMicrosoft(); > + bool IsMicrosoft = > + S.Context.getTargetInfo().getCXXABI().isMicrosoft() || > + S.Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment(); > if (const auto *VD = dyn_cast<VarDecl>(NewDecl)) { > // Ignore static data because out-of-line definitions are diagnosed > // separately. > > diff --git a/clang/lib/Sema/SemaDeclAttr.cpp > b/clang/lib/Sema/SemaDeclAttr.cpp > index c07e5f792d14..0ccfb1504636 100644 > --- a/clang/lib/Sema/SemaDeclAttr.cpp > +++ b/clang/lib/Sema/SemaDeclAttr.cpp > @@ -6731,14 +6731,16 @@ DLLExportAttr *Sema::mergeDLLExportAttr(Decl *D, > > static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) { > if (isa<ClassTemplatePartialSpecializationDecl>(D) && > - S.Context.getTargetInfo().getCXXABI().isMicrosoft()) { > + (S.Context.getTargetInfo().getCXXABI().isMicrosoft() || > + S.Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment())) > { > S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored) << A; > return; > } > > if (const auto *FD = dyn_cast<FunctionDecl>(D)) { > if (FD->isInlined() && A.getKind() == ParsedAttr::AT_DLLImport && > - !S.Context.getTargetInfo().getCXXABI().isMicrosoft()) { > + !(S.Context.getTargetInfo().getCXXABI().isMicrosoft() || > + > S.Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment())) { > // MinGW doesn't allow dllimport on inline functions. > S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored_on_inline) > << A; > @@ -6747,7 +6749,8 @@ static void handleDLLAttr(Sema &S, Decl *D, const > ParsedAttr &A) { > } > > if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) { > - if (S.Context.getTargetInfo().getCXXABI().isMicrosoft() && > + if ((S.Context.getTargetInfo().getCXXABI().isMicrosoft() || > + > S.Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment()) && > MD->getParent()->isLambda()) { > S.Diag(A.getRange().getBegin(), diag::err_attribute_dll_lambda) << A; > return; > > diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp > index 1275fc0c95b5..138faa161c4e 100644 > --- a/clang/lib/Sema/SemaDeclCXX.cpp > +++ b/clang/lib/Sema/SemaDeclCXX.cpp > @@ -6060,7 +6060,8 @@ void Sema::checkClassLevelDLLAttribute(CXXRecordDecl > *Class) { > Attr *ClassAttr = getDLLAttr(Class); > > // MSVC inherits DLL attributes to partial class template specializations. > - if (Context.getTargetInfo().getCXXABI().isMicrosoft() && !ClassAttr) { > + if ((Context.getTargetInfo().getCXXABI().isMicrosoft() || > + Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment()) && > !ClassAttr) { > if (auto *Spec = > dyn_cast<ClassTemplatePartialSpecializationDecl>(Class)) { > if (Attr *TemplateAttr = > > getDLLAttr(Spec->getSpecializedTemplate()->getTemplatedDecl())) { > @@ -6080,7 +6081,8 @@ void Sema::checkClassLevelDLLAttribute(CXXRecordDecl > *Class) { > return; > } > > - if (Context.getTargetInfo().getCXXABI().isMicrosoft() && > + if ((Context.getTargetInfo().getCXXABI().isMicrosoft() || > + Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment()) && > !ClassAttr->isInherited()) { > // Diagnose dll attributes on members of class with dll attribute. > for (Decl *Member : Class->decls()) { > > diff --git a/clang/test/Sema/dllimport.c b/clang/test/Sema/dllimport.c > index 988a8e33a7ef..66bd2703e648 100644 > --- a/clang/test/Sema/dllimport.c > +++ b/clang/test/Sema/dllimport.c > @@ -1,8 +1,10 @@ > -// RUN: %clang_cc1 -triple i686-win32 -fsyntax-only -fms-extensions > -verify -std=c99 -DMS %s > -// RUN: %clang_cc1 -triple x86_64-win32 -fsyntax-only -fms-extensions > -verify -std=c11 -DMS %s > -// RUN: %clang_cc1 -triple i686-mingw32 -fsyntax-only -fms-extensions > -verify -std=c11 -DGNU %s > -// RUN: %clang_cc1 -triple x86_64-mingw32 -fsyntax-only -fms-extensions > -verify -std=c99 -DGNU %s > -// RUN: %clang_cc1 -triple aarch64-win32 -fsyntax-only -fms-extensions > -verify -std=c99 -DMS %s > +// RUN: %clang_cc1 -triple i686-win32 -fsyntax-only > -fms-extensions -verify -std=c99 -DMS %s > +// RUN: %clang_cc1 -triple x86_64-win32 -fsyntax-only > -fms-extensions -verify -std=c11 -DMS %s > +// RUN: %clang_cc1 -triple i686-mingw32 -fsyntax-only > -fms-extensions -verify -std=c11 -DGNU %s > +// RUN: %clang_cc1 -triple x86_64-mingw32 -fsyntax-only > -fms-extensions -verify -std=c99 -DGNU %s > +// RUN: %clang_cc1 -triple aarch64-win32 -fsyntax-only > -fms-extensions -verify -std=c99 -DMS %s > +// RUN: %clang_cc1 -triple i686-windows-itanium -fsyntax-only > -fms-extensions -verify -std=c99 -DWI %s > +// RUN: %clang_cc1 -triple x86_64-windows-itanium -fsyntax-only > -fms-extensions -verify -std=c11 -DWI %s > > // Invalid usage. > __declspec(dllimport) typedef int typedef1; > @@ -45,7 +47,7 @@ int __declspec(dllimport) GlobalInit2 = 1; // > expected-error{{definition of dlli > // expected-note@+2{{previous attribute is here}} > #endif > __declspec(dllimport) extern int ExternGlobalDeclInit; // > expected-note{{previous declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'ExternGlobalDeclInit' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'ExternGlobalDeclInit' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -56,7 +58,7 @@ int ExternGlobalDeclInit = 1; > // expected-note@+2{{previous attribute is here}} > #endif > __declspec(dllimport) int GlobalDeclInit; // expected-note{{previous > declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'GlobalDeclInit' redeclared without 'dllimport' > attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'GlobalDeclInit' redeclared without 'dllimport' > attribute: previous 'dllimport' ignored}} > @@ -67,7 +69,7 @@ int GlobalDeclInit = 1; > // expected-note@+2{{previous attribute is here}} > #endif > int *__attribute__((dllimport)) GlobalDeclChunkAttrInit; // > expected-note{{previous declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'GlobalDeclChunkAttrInit' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'GlobalDeclChunkAttrInit' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -78,7 +80,7 @@ int *GlobalDeclChunkAttrInit = 0; > // expected-note@+2{{previous attribute is here}} > #endif > int GlobalDeclAttrInit __attribute__((dllimport)); // > expected-note{{previous declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'GlobalDeclAttrInit' redeclared without 'dllimport' > attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'GlobalDeclAttrInit' redeclared without 'dllimport' > attribute: previous 'dllimport' ignored}} > @@ -179,7 +181,7 @@ __declspec(dllimport) void redecl2(); // > expected-note{{previous declaration is > #endif > __declspec(dllimport) void redecl3(); // > expected-note{{previous declaration is here}} > // NB: Both MSVC and Clang issue a warning and make > redecl3 dllexport. > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'redecl3' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'redecl3' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -202,7 +204,7 @@ __declspec(dllimport) void redecl5(); // > expected-warning{{redeclaration of 'red > __declspec(dllimport) void redecl6(); > inline void redecl6() {} > > -#ifdef MS > +#if defined(MS) || defined (WI) > // expected-note@+5{{previous declaration is here}} > // expected-warning@+5{{redeclaration of 'redecl7' should not add > 'dllimport' attribute}} > #else > > diff --git a/clang/test/SemaCXX/dllexport.cpp > b/clang/test/SemaCXX/dllexport.cpp > index 953684c73a58..cef2f13cac42 100644 > --- a/clang/test/SemaCXX/dllexport.cpp > +++ b/clang/test/SemaCXX/dllexport.cpp > @@ -1,7 +1,9 @@ > -// RUN: %clang_cc1 -triple i686-win32 -fsyntax-only -fms-extensions > -verify -std=c++11 -Wunsupported-dll-base-class-template -DMS %s > -// RUN: %clang_cc1 -triple x86_64-win32 -fsyntax-only -fms-extensions > -verify -std=c++1y -Wunsupported-dll-base-class-template -DMS %s > -// RUN: %clang_cc1 -triple i686-mingw32 -fsyntax-only -fms-extensions > -verify -std=c++1y -Wunsupported-dll-base-class-template %s > -// RUN: %clang_cc1 -triple x86_64-mingw32 -fsyntax-only -fms-extensions > -verify -std=c++11 -Wunsupported-dll-base-class-template %s > +// RUN: %clang_cc1 -triple i686-win32 -fsyntax-only > -fms-extensions -verify -std=c++11 -Wunsupported-dll-base-class-template -DMS > %s > +// RUN: %clang_cc1 -triple x86_64-win32 -fsyntax-only > -fms-extensions -verify -std=c++1y -Wunsupported-dll-base-class-template -DMS > %s > +// RUN: %clang_cc1 -triple i686-mingw32 -fsyntax-only > -fms-extensions -verify -std=c++1y -Wunsupported-dll-base-class-template %s > +// RUN: %clang_cc1 -triple x86_64-mingw32 -fsyntax-only > -fms-extensions -verify -std=c++11 -Wunsupported-dll-base-class-template %s > +// RUN: %clang_cc1 -triple i686-windows-itanium -fsyntax-only > -fms-extensions -verify -std=c++11 -Wunsupported-dll-base-class-template -DWI > %s > +// RUN: %clang_cc1 -triple x86_64-windows-itanium -fsyntax-only > -fms-extensions -verify -std=c++1y -Wunsupported-dll-base-class-template -DWI > %s > > // Helper structs to make templates more expressive. > struct ImplicitInst_Exported {}; > @@ -349,7 +351,7 @@ class __declspec(dllexport) ClassDecl; > > class __declspec(dllexport) ClassDef {}; > > -#ifdef MS > +#if defined(MS) || defined (WI) > // expected-warning@+3{{'dllexport' attribute ignored}} > #endif > template <typename T> struct PartiallySpecializedClassTemplate {}; > @@ -367,13 +369,13 @@ ImplicitlyInstantiatedExportedTemplate<IncompleteType> > implicitlyInstantiatedExp > > // Don't instantiate class members of templates with explicit instantiation > declarations, even if they are exported. > struct IncompleteType2; > -#ifdef MS > +#if defined(MS) || defined (WI) > // expected-note@+2{{attribute is here}} > #endif > template <typename T> struct __declspec(dllexport) > ExportedTemplateWithExplicitInstantiationDecl { > int f() { return sizeof(T); } // no-error > }; > -#ifdef MS > +#if defined(MS) || defined (WI) > // expected-warning@+2{{explicit instantiation declaration should not be > 'dllexport'}} > #endif > extern template struct > ExportedTemplateWithExplicitInstantiationDecl<IncompleteType2>; > @@ -408,13 +410,13 @@ struct __declspec(dllexport) ExportedBaseClass2 : > public ExportedBaseClassTempla > > // Warn about explicit instantiation declarations of dllexport classes. > template <typename T> struct ExplicitInstantiationDeclTemplate {}; > -#ifdef MS > +#if defined(MS) || defined (WI) > // expected-warning@+2{{explicit instantiation declaration should not be > 'dllexport'}} expected-note@+2{{attribute is here}} > #endif > extern template struct __declspec(dllexport) > ExplicitInstantiationDeclTemplate<int>; > > template <typename T> struct __declspec(dllexport) > ExplicitInstantiationDeclExportedTemplate {}; > -#ifdef MS > +#if defined(MS) || defined (WI) > // expected-note@-2{{attribute is here}} > // expected-warning@+2{{explicit instantiation declaration should not be > 'dllexport'}} > #endif > @@ -453,7 +455,7 @@ template <typename T> struct > ExplicitlyExportInstantiatedTemplate { void func() > template struct __declspec(dllexport) > ExplicitlyExportInstantiatedTemplate<int>; > template <typename T> struct ExplicitlyExportDeclaredInstantiatedTemplate { > void func() {} }; > extern template struct ExplicitlyExportDeclaredInstantiatedTemplate<int>; > -#ifndef MS > +#if not defined(MS) && not defined (WI) > // expected-warning@+2{{'dllexport' attribute ignored on explicit > instantiation definition}} > #endif > template struct __declspec(dllexport) > ExplicitlyExportDeclaredInstantiatedTemplate<int>; > @@ -1164,7 +1166,7 @@ template<typename T> template<typename U> > __declspec(dllexport) constexpr int CT > // Lambdas > > //===----------------------------------------------------------------------===// > // The MS ABI doesn't provide a stable mangling for lambdas, so they can't > be imported or exported. > -#ifdef MS > +#if defined(MS) || defined (WI) > // expected-error@+2{{lambda cannot be declared 'dllexport'}} > #endif > auto Lambda = []() __declspec(dllexport) -> bool { return true; }; > > diff --git a/clang/test/SemaCXX/dllimport.cpp > b/clang/test/SemaCXX/dllimport.cpp > index 80c6f2e67858..f0c77904b618 100644 > --- a/clang/test/SemaCXX/dllimport.cpp > +++ b/clang/test/SemaCXX/dllimport.cpp > @@ -1,8 +1,10 @@ > -// RUN: %clang_cc1 -triple i686-win32 -fsyntax-only -fms-extensions > -verify -std=c++11 -Wunsupported-dll-base-class-template -DMS %s > -// RUN: %clang_cc1 -triple x86_64-win32 -fsyntax-only -fms-extensions > -verify -std=c++1y -Wunsupported-dll-base-class-template -DMS %s > -// RUN: %clang_cc1 -triple i686-mingw32 -fsyntax-only -fms-extensions > -verify -std=c++1y -Wunsupported-dll-base-class-template -DGNU %s > -// RUN: %clang_cc1 -triple x86_64-mingw32 -fsyntax-only -fms-extensions > -verify -std=c++11 -Wunsupported-dll-base-class-template -DGNU %s > -// RUN: %clang_cc1 -triple x86_64-mingw32 -fsyntax-only -fms-extensions > -verify -std=c++17 -Wunsupported-dll-base-class-template -DGNU %s > +// RUN: %clang_cc1 -triple i686-win32 -fsyntax-only > -fms-extensions -verify -std=c++11 -Wunsupported-dll-base-class-template -DMS > %s > +// RUN: %clang_cc1 -triple x86_64-win32 -fsyntax-only > -fms-extensions -verify -std=c++1y -Wunsupported-dll-base-class-template -DMS > %s > +// RUN: %clang_cc1 -triple i686-mingw32 -fsyntax-only > -fms-extensions -verify -std=c++1y -Wunsupported-dll-base-class-template > -DGNU %s > +// RUN: %clang_cc1 -triple x86_64-mingw32 -fsyntax-only > -fms-extensions -verify -std=c++11 -Wunsupported-dll-base-class-template > -DGNU %s > +// RUN: %clang_cc1 -triple x86_64-mingw32 -fsyntax-only > -fms-extensions -verify -std=c++17 -Wunsupported-dll-base-class-template > -DGNU %s > +// RUN: %clang_cc1 -triple i686-windows-itanium -fsyntax-only > -fms-extensions -verify -std=c++11 -Wunsupported-dll-base-class-template -DWI > %s > +// RUN: %clang_cc1 -triple x86_64-windows-itanium -fsyntax-only > -fms-extensions -verify -std=c++17 -Wunsupported-dll-base-class-template -DWI > %s > > // Helper structs to make templates more expressive. > struct ImplicitInst_Imported {}; > @@ -55,7 +57,7 @@ int __declspec(dllimport) GlobalInit2 = 1; // > expected-error{{definition of dlli > // expected-note@+2{{previous attribute is here}} > #endif > __declspec(dllimport) extern int ExternGlobalDeclInit; // > expected-note{{previous declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'ExternGlobalDeclInit' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'ExternGlobalDeclInit' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -66,7 +68,7 @@ int ExternGlobalDeclInit = 1; > // expected-note@+2{{previous attribute is here}} > #endif > __declspec(dllimport) int GlobalDeclInit; // expected-note{{previous > declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'GlobalDeclInit' redeclared without 'dllimport' > attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'GlobalDeclInit' redeclared without 'dllimport' > attribute: previous 'dllimport' ignored}} > @@ -77,7 +79,7 @@ int GlobalDeclInit = 1; > // expected-note@+2{{previous attribute is here}} > #endif > int *__attribute__((dllimport)) GlobalDeclChunkAttrInit; // > expected-note{{previous declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'GlobalDeclChunkAttrInit' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'GlobalDeclChunkAttrInit' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -88,7 +90,7 @@ int *GlobalDeclChunkAttrInit = 0; > // expected-note@+2{{previous attribute is here}} > #endif > int GlobalDeclAttrInit __attribute__((dllimport)); // > expected-note{{previous declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'GlobalDeclAttrInit' redeclared without 'dllimport' > attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'GlobalDeclAttrInit' redeclared without 'dllimport' > attribute: previous 'dllimport' ignored}} > @@ -179,7 +181,7 @@ template<typename T> int __declspec(dllimport) > VarTmplInit2 = 1; // expected-err > #endif > template <typename T> > __declspec(dllimport) extern int ExternVarTmplDeclInit; // > expected-note{{previous declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+5{{'ExternVarTmplDeclInit' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+3{{'ExternVarTmplDeclInit' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -192,7 +194,7 @@ int ExternVarTmplDeclInit = 1; > #endif > template <typename T> > __declspec(dllimport) int VarTmplDeclInit; // expected-note{{previous > declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+5{{'VarTmplDeclInit' redeclared without 'dllimport' > attribute: 'dllexport' attribute added}} > #else > // expected-warning@+3{{'VarTmplDeclInit' redeclared without 'dllimport' > attribute: previous 'dllimport' ignored}} > @@ -307,7 +309,7 @@ __declspec(dllimport) void redecl2(); // > expected-note{{previous declaration is > #endif > __declspec(dllimport) void redecl3(); // > expected-note{{previous declaration is here}} > // NB: Both MSVC and Clang issue a warning and make > redecl3 dllexport. > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'redecl3' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'redecl3' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -322,7 +324,7 @@ extern "C" { > __declspec(dllimport) void redecl5(); // expected-warning{{redeclaration of > 'redecl5' should not add 'dllimport' attribute}} > } > > -#ifdef MS > +#if defined(MS) || defined(WI) > void redecl6(); // expected-note{{previous declaration > is here}} > __declspec(dllimport) inline void redecl6() {} // > expected-warning{{redeclaration of 'redecl6' should not add 'dllimport' > attribute}} > #else > @@ -339,21 +341,21 @@ struct FuncFriend { > #endif > friend __declspec(dllimport) void friend3(); // expected-note{{previous > declaration is here}} > friend void friend4(); // expected-note{{previous > declaration is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+2{{previous declaration is here}} > #endif > friend void friend5(); > }; > __declspec(dllimport) void friend1(); > void friend2(); // expected-warning{{'friend2' > redeclared without 'dllimport' attribute: previous 'dllimport' ignored}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'friend3' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'friend3' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > #endif > void friend3() {} > __declspec(dllimport) void friend4(); // expected-warning{{redeclaration of > 'friend4' should not add 'dllimport' attribute}} > -#ifdef MS > +#if defined(MS) || defined(WI) > __declspec(dllimport) inline void friend5() {} // > expected-warning{{redeclaration of 'friend5' should not add 'dllimport' > attribute}} > #else > __declspec(dllimport) inline void friend5() {} // > expected-warning{{'dllimport' attribute ignored on inline function}} > @@ -381,7 +383,7 @@ namespace ns { __declspec(dllimport) void externalFunc(); > } > // here which is irrelevant. But because the delete keyword is parsed later > // there is currently no straight-forward way to avoid this diagnostic. > __declspec(dllimport) void deletedFunc() = delete; // > expected-error{{attribute 'dllimport' cannot be applied to a deleted > function}} expected-error{{dllimport cannot be applied to non-inline function > definition}} > -#ifdef MS > +#if defined(MS) || defined(WI) > __declspec(dllimport) inline void deletedInlineFunc() = delete; // > expected-error{{attribute 'dllimport' cannot be applied to a deleted > function}} > #else > __declspec(dllimport) inline void deletedInlineFunc() = delete; // > expected-warning{{'dllimport' attribute ignored on inline function}} > @@ -459,7 +461,7 @@ template<typename T> __declspec(dllimport) void > funcTmplFriend1(); > template<typename T> void funcTmplFriend2(); // > expected-warning{{'funcTmplFriend2' redeclared without 'dllimport' attribute: > previous 'dllimport' ignored}} > template<typename T> void funcTmplFriend3() {} // > expected-warning{{'funcTmplFriend3' redeclared without 'dllimport' attribute: > previous 'dllimport' ignored}} > template<typename T> __declspec(dllimport) void funcTmplFriend4(); // > expected-error{{redeclaration of 'funcTmplFriend4' cannot add 'dllimport' > attribute}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+2{{'funcTmplFriend5' redeclared without 'dllimport' > attribute: previous 'dllimport' ignored}} > #endif > template<typename T> inline void funcTmplFriend5() {} > @@ -593,13 +595,13 @@ struct ImportMembers { > __declspec(dllimport) constexpr static int ConstexprFieldDef = 1; > }; > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'ImportMembers::Nested::normalDef' redeclared > without 'dllimport' attribute: 'dllexport' attribute added}} > #else > > // expected-warning@+2{{'ImportMembers::Nested::normalDef' redeclared > without 'dllimport' attribute: previous 'dllimport' ignored}} > #endif > void ImportMembers::Nested::normalDef() {} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'ImportMembers::normalDef' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > > // expected-warning@+2{{'ImportMembers::normalDef' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -610,7 +612,7 @@ void ImportMembers::normalDef() {} > #endif > inline void ImportMembers::normalInlineDef() {} > void ImportMembers::normalInlineDecl() {} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'ImportMembers::virtualDef' redeclared > without 'dllimport' attribute: 'dllexport' attribute added}} > #else > > // expected-warning@+2{{'ImportMembers::virtualDef' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -621,7 +623,7 @@ inline void ImportMembers::normalInlineDef() {} > #endif > inline void ImportMembers::virtualInlineDef() {} > void ImportMembers::virtualInlineDecl() {} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'ImportMembers::staticDef' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > > // expected-warning@+2{{'ImportMembers::staticDef' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -694,7 +696,7 @@ struct ImportSpecials { > > // Import deleted member functions. > struct ImportDeleted { > -#ifdef MS > +#if defined(MS) || defined(WI) > __declspec(dllimport) ImportDeleted() = delete; // > expected-error{{attribute 'dllimport' cannot be applied to a deleted > function}} > __declspec(dllimport) ~ImportDeleted() = delete; // > expected-error{{attribute 'dllimport' cannot be applied to a deleted > function}} > __declspec(dllimport) ImportDeleted(const ImportDeleted&) = delete; // > expected-error{{attribute 'dllimport' cannot be applied to a deleted > function}} > @@ -767,7 +769,7 @@ struct ImportDefaultedDefs { > // Not allowed on definitions. > __declspec(dllimport) ImportDefaultedDefs::ImportDefaultedDefs() = default; > // expected-error{{dllimport cannot be applied to non-inline function > definition}} > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+5{{'ImportDefaultedDefs::~ImportDefaultedDefs' > redeclared without 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+3{{'ImportDefaultedDefs::~ImportDefaultedDefs' > redeclared without 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -784,7 +786,7 @@ __declspec(dllimport) > ImportDefaultedDefs::ImportDefaultedDefs(const ImportDefau > inline ImportDefaultedDefs& ImportDefaultedDefs::operator=(const > ImportDefaultedDefs&) = default; > > __declspec(dllimport) > ImportDefaultedDefs::ImportDefaultedDefs(ImportDefaultedDefs&&) = default; // > expected-error{{dllimport cannot be applied to non-inline function > definition}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+4{{'ImportDefaultedDefs::operator=' redeclared without > 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+2{{'ImportDefaultedDefs::operator=' redeclared without > 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -800,7 +802,7 @@ struct MemberRedecl { > static void staticDef(); // expected-note{{previous > declaration is here}} > static inline void staticInlineDecl(); // expected-note{{previous > declaration is here}} > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+4{{previous declaration is here}} > // expected-note@+4{{previous declaration is here}} > // expected-note@+4{{previous declaration is here}} > @@ -824,7 +826,7 @@ __declspec(dllimport) void > MemberRedecl::staticDef() {} // expect > // > expected-error@-1{{dllimport cannot be applied to non-inline function > definition}} > __declspec(dllimport) void MemberRedecl::staticInlineDecl() {} // > expected-error{{redeclaration of 'MemberRedecl::staticInlineDecl' cannot add > 'dllimport' attribute}} > > -#ifdef MS > +#if defined(MS) || defined(WI) > __declspec(dllimport) inline void MemberRedecl::normalInlineDef() {} // > expected-error{{redeclaration of 'MemberRedecl::normalInlineDef' cannot add > 'dllimport' attribute}} > __declspec(dllimport) inline void MemberRedecl::virtualInlineDef() {} // > expected-error{{redeclaration of 'MemberRedecl::virtualInlineDef' cannot add > 'dllimport' attribute}} > __declspec(dllimport) inline void MemberRedecl::staticInlineDef() {} // > expected-error{{redeclaration of 'MemberRedecl::staticInlineDef' cannot add > 'dllimport' attribute}} > @@ -861,13 +863,13 @@ __declspec(dllimport) constexpr int > MemberRedecl::ConstexprField; > struct ImportMemberTmpl { > template<typename T> __declspec(dllimport) void normalDecl(); > template<typename T> __declspec(dllimport) void normalDef(); > // expected-note{{previous declaration is here}} expected-note{{previous > attribute is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+2{{previous declaration is here}} > expected-note@+2{{previous attribute is here}} > #endif > template<typename T> __declspec(dllimport) void > normalInlineDef(); > template<typename T> __declspec(dllimport) static void staticDecl(); > template<typename T> __declspec(dllimport) static void staticDef(); > // expected-note{{previous declaration is here}} expected-note{{previous > attribute is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+2{{previous declaration is here}} > expected-note@+2{{previous attribute is here}} > #endif > template<typename T> __declspec(dllimport) static void > staticInlineDef(); > @@ -930,7 +932,7 @@ struct MemTmplRedecl { > template<typename T> static void staticDef(); // > expected-note{{previous declaration is here}} > template<typename T> static inline void staticInlineDecl(); // > expected-note{{previous declaration is here}} > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+3{{previous declaration is here}} > // expected-note@+3{{previous declaration is here}} > #endif > @@ -948,7 +950,7 @@ struct MemTmplRedecl { > > template<typename T> __declspec(dllimport) void > MemTmplRedecl::normalDef() {} // expected-error{{redeclaration of > 'MemTmplRedecl::normalDef' cannot add 'dllimport' attribute}} > > // expected-error@-1{{dllimport cannot be applied to > non-inline function definition}} > -#ifdef MS > +#if defined(MS) || defined(WI) > template<typename T> __declspec(dllimport) inline void > MemTmplRedecl::normalInlineDef() {} // expected-error{{redeclaration of > 'MemTmplRedecl::normalInlineDef' cannot add 'dllimport' attribute}} > #else > template<typename T> __declspec(dllimport) inline void > MemTmplRedecl::normalInlineDef() {} // expected-warning{{'dllimport' > attribute ignored on inline function}} > @@ -956,7 +958,7 @@ template<typename T> __declspec(dllimport) inline void > MemTmplRedecl::normalInli > template<typename T> __declspec(dllimport) void > MemTmplRedecl::normalInlineDecl() {} // expected-error{{redeclaration of > 'MemTmplRedecl::normalInlineDecl' cannot add 'dllimport' attribute}} > template<typename T> __declspec(dllimport) void > MemTmplRedecl::staticDef() {} // expected-error{{redeclaration of > 'MemTmplRedecl::staticDef' cannot add 'dllimport' attribute}} > > // expected-error@-1{{dllimport cannot be applied to > non-inline function definition}} > -#ifdef MS > +#if defined(MS) || defined(WI) > template<typename T> __declspec(dllimport) inline void > MemTmplRedecl::staticInlineDef() {} // expected-error{{redeclaration of > 'MemTmplRedecl::staticInlineDef' cannot add 'dllimport' attribute}} > #else > template<typename T> __declspec(dllimport) inline void > MemTmplRedecl::staticInlineDef() {} // expected-warning{{'dllimport' > attribute ignored on inline function}} > @@ -1189,7 +1191,7 @@ struct ImportClassTmplMembers { > > // NB: MSVC is inconsistent here and disallows *InlineDef on class templates, > // but allows it on classes. We allow both. > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+5{{'ImportClassTmplMembers::normalDef' redeclared > without 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+3{{'ImportClassTmplMembers::normalDef' redeclared > without 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -1201,7 +1203,7 @@ void ImportClassTmplMembers<T>::normalDef() {} > #endif > template<typename T> inline void > ImportClassTmplMembers<T>::normalInlineDef() {} > template<typename T> void > ImportClassTmplMembers<T>::normalInlineDecl() {} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+5{{'ImportClassTmplMembers::virtualDef' redeclared > without 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+3{{'ImportClassTmplMembers::virtualDef' redeclared > without 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -1213,7 +1215,7 @@ void ImportClassTmplMembers<T>::virtualDef() {} > #endif > template<typename T> inline void > ImportClassTmplMembers<T>::virtualInlineDef() {} > template<typename T> void > ImportClassTmplMembers<T>::virtualInlineDecl() {} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+5{{'ImportClassTmplMembers::staticDef' redeclared > without 'dllimport' attribute: 'dllexport' attribute added}} > #else > // expected-warning@+3{{'ImportClassTmplMembers::staticDef' redeclared > without 'dllimport' attribute: previous 'dllimport' ignored}} > @@ -1244,7 +1246,7 @@ struct CTMR /*ClassTmplMemberRedecl*/ { > static void staticDef(); // expected-note{{previous > declaration is here}} > static inline void staticInlineDecl(); // expected-note{{previous > declaration is here}} > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+4{{previous declaration is here}} > // expected-note@+4{{previous declaration is here}} > // expected-note@+4{{previous declaration is here}} > @@ -1268,7 +1270,7 @@ template<typename T> __declspec(dllimport) void > CTMR<T>::staticDef() {} > > // expected-error@-1{{dllimport cannot be applied to non-inline > function definition}} > template<typename T> __declspec(dllimport) void > CTMR<T>::staticInlineDecl() {} // expected-error{{redeclaration of > 'CTMR::staticInlineDecl' cannot add 'dllimport' attribute}} > > -#ifdef MS > +#if defined(MS) || defined(WI) > template<typename T> __declspec(dllimport) inline void > CTMR<T>::normalInlineDef() {} // expected-error{{redeclaration of > 'CTMR::normalInlineDef' cannot add 'dllimport' attribute}} > template<typename T> __declspec(dllimport) inline void > CTMR<T>::virtualInlineDef() {} // expected-error{{redeclaration of > 'CTMR::virtualInlineDef' cannot add 'dllimport' attribute}} > template<typename T> __declspec(dllimport) inline void > CTMR<T>::staticInlineDef() {} // expected-error{{redeclaration of > 'CTMR::staticInlineDef' cannot add 'dllimport' attribute}} > @@ -1304,13 +1306,13 @@ template<typename T> > struct ImportClsTmplMemTmpl { > template<typename U> __declspec(dllimport) void normalDecl(); > template<typename U> __declspec(dllimport) void normalDef(); > // expected-note{{previous declaration is here}} expected-note{{previous > attribute is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+2{{previous declaration is here}} > expected-note@+2{{previous attribute is here}} > #endif > template<typename U> __declspec(dllimport) void > normalInlineDef(); > template<typename U> __declspec(dllimport) static void staticDecl(); > template<typename U> __declspec(dllimport) static void staticDef(); > // expected-note{{previous declaration is here}} expected-note{{previous > attribute is here}} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+2{{previous declaration is here}} > expected-note@+2{{previous attribute is here}} > #endif > template<typename U> __declspec(dllimport) static void > staticInlineDef(); > @@ -1322,12 +1324,12 @@ struct ImportClsTmplMemTmpl { > // expected-warning@+11{{'dllimport' attribute ignored on inline function}} > #endif > template<typename U> __declspec(dllimport) void > normalInclass() {} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+2{{previous declaration is here}} > expected-note@+2{{previous attribute is here}} > #endif > template<typename U> __declspec(dllimport) inline void > normalInlineDecl(); > template<typename U> __declspec(dllimport) static void > staticInclass() {} > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+2{{previous declaration is here}} > expected-note@+2{{previous attribute is here}} > #endif > template<typename U> __declspec(dllimport) static inline void > staticInlineDecl(); > @@ -1381,7 +1383,7 @@ struct CTMTR /*ClassTmplMemberTmplRedecl*/ { > template<typename U> static void staticDef(); // > expected-note{{previous declaration is here}} > template<typename U> static inline void staticInlineDecl(); // > expected-note{{previous declaration is here}} > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+3{{previous declaration is here}} > // expected-note@+3{{previous declaration is here}} > #endif > @@ -1404,7 +1406,7 @@ template<typename T> template<typename U> > __declspec(dllimport) void CTMT > > // expected-error@-1{{dllimport cannot be > applied to non-inline function definition}} > template<typename T> template<typename U> __declspec(dllimport) void > CTMTR<T>::staticInlineDecl() {} // expected-error{{redeclaration of > 'CTMTR::staticInlineDecl' cannot add 'dllimport' attribute}} > > -#ifdef MS > +#if defined(MS) || defined(WI) > template<typename T> template<typename U> __declspec(dllimport) inline void > CTMTR<T>::normalInlineDef() {} // expected-error{{redeclaration of > 'CTMTR::normalInlineDef' cannot add 'dllimport' attribute}} > template<typename T> template<typename U> __declspec(dllimport) inline void > CTMTR<T>::staticInlineDef() {} // expected-error{{redeclaration of > 'CTMTR::staticInlineDef' cannot add 'dllimport' attribute}} > #else > @@ -1441,7 +1443,7 @@ class __declspec(dllimport) ClassDef { }; > > template <typename T> class ClassTemplate {}; > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+5{{previous attribute is here}} > // expected-note@+4{{previous attribute is here}} > // expected-error@+4{{attribute 'dllexport' cannot be applied to member of > 'dllimport' class}} > @@ -1452,7 +1454,7 @@ class __declspec(dllimport) ImportClassWithDllMember { > void __declspec(dllimport) bar(); > }; > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-note@+5{{previous attribute is here}} > // expected-note@+4{{previous attribute is here}} > // expected-error@+4{{attribute 'dllimport' cannot be applied to member of > 'dllexport' class}} > @@ -1478,7 +1480,7 @@ template <typename> struct __declspec(dllimport) S { > S<int> s; > } > > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-warning@+3{{'dllimport' attribute ignored}} > #endif > template <typename T> struct PartiallySpecializedClassTemplate {}; > @@ -1572,7 +1574,7 @@ struct __declspec(dllimport) > DerivedFromExplicitInstantiationDeclTemplateBase : > // Lambdas > > //===----------------------------------------------------------------------===// > // The MS ABI doesn't provide a stable mangling for lambdas, so they can't > be imported or exported. > -#ifdef MS > +#if defined(MS) || defined(WI) > // expected-error@+4{{lambda cannot be declared 'dllimport'}} > #else > // expected-warning@+2{{'dllimport' attribute ignored on inline function}} > > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits