https://github.com/nga888 created https://github.com/llvm/llvm-project/pull/92549
For PlayStation, make the propagation of DLL import/export attributes for explicit template instantiations the same as MSVC and Windows Itanium. >From 4bea6e9530460607f00820b8fcc9725e496c59e4 Mon Sep 17 00:00:00 2001 From: Andrew Ng <andrew...@sony.com> Date: Wed, 15 May 2024 10:55:09 +0100 Subject: [PATCH] [clang] Make PS template DLL attribute propagation the same as MSVC For PlayStation, make the propagation of DLL import/export attributes for explicit template instantiations the same as MSVC and Windows Itanium. --- clang/lib/Sema/SemaTemplate.cpp | 6 ++---- ...licit-dllexport-template-specialization.cpp | 13 +++++-------- .../CodeGenCXX/windows-itanium-dllexport.cpp | 18 +++++++----------- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index 0462d3520037f..704efc9531672 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -11124,8 +11124,7 @@ DeclResult Sema::ActOnExplicitInstantiation( Def->setTemplateSpecializationKind(TSK); if (!getDLLAttr(Def) && getDLLAttr(Specialization) && - (Context.getTargetInfo().shouldDLLImportComdatSymbols() && - !Context.getTargetInfo().getTriple().isPS())) { + Context.getTargetInfo().shouldDLLImportComdatSymbols()) { // An explicit instantiation definition can add a dll attribute to a // template with a previous instantiation declaration. MinGW doesn't // allow this. @@ -11142,8 +11141,7 @@ DeclResult Sema::ActOnExplicitInstantiation( bool NewlyDLLExported = !PreviouslyDLLExported && Specialization->hasAttr<DLLExportAttr>(); if (Old_TSK == TSK_ImplicitInstantiation && NewlyDLLExported && - (Context.getTargetInfo().shouldDLLImportComdatSymbols() && - !Context.getTargetInfo().getTriple().isPS())) { + Context.getTargetInfo().shouldDLLImportComdatSymbols()) { // An explicit instantiation definition can add a dll attribute to a // template with a previous implicit instantiation. MinGW doesn't allow // this. We limit clang to only adding dllexport, to avoid potentially diff --git a/clang/test/CodeGenCXX/windows-implicit-dllexport-template-specialization.cpp b/clang/test/CodeGenCXX/windows-implicit-dllexport-template-specialization.cpp index 3a5693275824f..d281826ee70fe 100644 --- a/clang/test/CodeGenCXX/windows-implicit-dllexport-template-specialization.cpp +++ b/clang/test/CodeGenCXX/windows-implicit-dllexport-template-specialization.cpp @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -std=c++11 -triple i686-windows -fdeclspec -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-MS -// RUN: %clang_cc1 -std=c++11 -triple i686-windows-itanium -fdeclspec -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-IA -// RUN: %clang_cc1 -std=c++11 -triple x86_64-scei-ps4 -fdeclspec -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-PS4 -// RUN: %clang_cc1 -std=c++11 -triple x86_64-sie-ps5 -fdeclspec -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-PS4 +// RUN: %clang_cc1 -std=c++11 -triple i686-windows-itanium -fdeclspec -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -std=c++11 -triple x86_64-scei-ps4 -fdeclspec -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -std=c++11 -triple x86_64-sie-ps5 -fdeclspec -emit-llvm %s -o - | FileCheck %s template <typename> struct s {}; @@ -15,8 +15,5 @@ template class __declspec(dllexport) t<char>; // CHECK-MS: dllexport {{.*}} @"??4?$t@D@@QAEAAV0@ABV0@@Z" // CHECK-MS: dllexport {{.*}} @"??4?$s@D@@QAEAAU0@ABU0@@Z" -// CHECK-IA: dllexport {{.*}} @_ZN1tIcEaSERKS0_ -// CHECK-IA: dllexport {{.*}} @_ZN1sIcEaSERKS0_ - -// CHECK-PS4-NOT: @_ZN1tIcEaSERKS0_ -// CHECK-PS4-NOT: @_ZN1sIcEaSERKS0_ +// CHECK: dllexport {{.*}} @_ZN1tIcEaSERKS0_ +// CHECK: dllexport {{.*}} @_ZN1sIcEaSERKS0_ diff --git a/clang/test/CodeGenCXX/windows-itanium-dllexport.cpp b/clang/test/CodeGenCXX/windows-itanium-dllexport.cpp index c09fa30d761af..334cebff99da7 100644 --- a/clang/test/CodeGenCXX/windows-itanium-dllexport.cpp +++ b/clang/test/CodeGenCXX/windows-itanium-dllexport.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-llvm -triple i686-windows-itanium -fdeclspec %s -o - | FileCheck %s --check-prefixes=CHECK,WI -// RUN: %clang_cc1 -emit-llvm -triple x86_64-scei-ps4 -fdeclspec %s -o - | FileCheck %s --check-prefixes=CHECK,PS4 -// RUN: %clang_cc1 -emit-llvm -triple x86_64-sie-ps5 -fdeclspec %s -o - | FileCheck %s --check-prefixes=CHECK,PS4 +// RUN: %clang_cc1 -emit-llvm -triple x86_64-scei-ps4 -fdeclspec %s -o - | FileCheck %s --check-prefixes=CHECK,PS +// RUN: %clang_cc1 -emit-llvm -triple x86_64-sie-ps5 -fdeclspec %s -o - | FileCheck %s --check-prefixes=CHECK,PS #define JOIN2(x, y) x##y #define JOIN(x, y) JOIN2(x, y) @@ -27,18 +27,14 @@ template class __declspec(dllexport) c<int>; extern template class c<char>; template class __declspec(dllexport) c<char>; -// WI: define {{.*}} dllexport {{.*}} @_ZN1cIcEaSERKS0_ -// WI: define {{.*}} dllexport {{.*}} @_ZN1cIcE1fEv -// PS4-NOT: @_ZN1cIcEaSERKS0_ -// PS4: define weak_odr void @_ZN1cIcE1fEv +// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIcEaSERKS0_ +// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIcE1fEv c<double> g; template class __declspec(dllexport) c<double>; -// WI: define {{.*}} dllexport {{.*}} @_ZN1cIdEaSERKS0_ -// WI: define {{.*}} dllexport {{.*}} @_ZN1cIdE1fEv -// PS4-NOT: @_ZN1cIdEaSERKS0_ -// PS4: define weak_odr void @_ZN1cIdE1fEv +// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIdEaSERKS0_ +// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIdE1fEv template <class T> struct outer { @@ -59,4 +55,4 @@ USEMEMFUNC(outer<char>::inner, f) // CHECK-DAG: declare dllimport {{.*}} @_ZN5outerIcE1fEv // WI-DAG: define {{.*}} @_ZN5outerIcE5inner1fEv -// PS4-DAG: declare {{.*}} @_ZN5outerIcE5inner1fEv +// PS-DAG: declare {{.*}} @_ZN5outerIcE5inner1fEv _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits