瀏覽代碼

Sema: honour dllexport in itanium more faithfully

Although the itanium environment uses the itanium layout for C++, treat the
dllexport semantics more similarly to the MSVC specification.  This preserves
the existing behaviour for the use of the itanium ABI on non-windows-itanium
environments.  Export the inline definitions too.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@284288 91177308-0d34-0410-b5e6-96231b3b80d8
Saleem Abdulrasool 8 年之前
父節點
當前提交
caeec1284a
共有 2 個文件被更改,包括 11 次插入1 次删除
  1. 2 1
      lib/Sema/SemaDeclCXX.cpp
  2. 9 0
      test/CodeGenCXX/windows-itanium-dllexport.cpp

+ 2 - 1
lib/Sema/SemaDeclCXX.cpp

@@ -5546,7 +5546,8 @@ void Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {
 
 
       if (MD->isInlined()) {
       if (MD->isInlined()) {
         // MinGW does not import or export inline methods.
         // MinGW does not import or export inline methods.
-        if (!Context.getTargetInfo().getCXXABI().isMicrosoft())
+        if (!Context.getTargetInfo().getCXXABI().isMicrosoft() &&
+            !Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment())
           continue;
           continue;
 
 
         // MSVC versions before 2015 don't export the move assignment operators
         // MSVC versions before 2015 don't export the move assignment operators

+ 9 - 0
test/CodeGenCXX/windows-itanium-dllexport.cpp

@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 -emit-llvm -triple i686-windows-itanium -fdeclspec %s -o - | FileCheck %s
+
+struct __declspec(dllexport) s {
+  void f() {}
+};
+
+// CHECK: define {{.*}} dllexport {{.*}} @_ZN1saSERKS_
+// CHECK: define {{.*}} dllexport {{.*}} @_ZN1s1fEv
+