File tree Expand file tree Collapse file tree
.github/actions/4d-test-libs Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2424 excludes+='|^std.internal.math.gammafunction'
2525 # FIXME: failing unittest(s) with enabled optimizations
2626 excludes+='|^std.math.exponential(-shared)?$'
27- # FIXME: subtest rt_trap_exceptions fails
28- excludes+='|^druntime-test-exceptions-debug$'
2927 # FIXME: sporadically hanging
3028 excludes+='|^core.thread-shared$'
3129 fi
Original file line number Diff line number Diff line change @@ -57,6 +57,10 @@ struct AArch64TargetABI : TargetABI {
5757public:
5858 AArch64TargetABI () {}
5959
60+ llvm::UWTableKind defaultUnwindTableKind () override {
61+ return isDarwin () ? llvm::UWTableKind::Sync : llvm::UWTableKind::Async;
62+ }
63+
6064 bool returnInArg (TypeFunction *tf, bool ) override {
6165 Type *rt = tf->next ->toBasetype ();
6266 if (rt->ty == TY::Tstruct || rt->ty == TY::Tsarray) {
Original file line number Diff line number Diff line change 1919#include " dmd/globals.h"
2020#include " gen/dvalue.h"
2121#include " llvm/IR/CallingConv.h"
22+ #include " llvm/Support/CodeGen.h" // for UWTableKind
2223#include < vector>
2324
2425class Type ;
@@ -110,12 +111,10 @@ struct TargetABI {
110111 return name;
111112 }
112113
113- // / Returns true if all functions require the LLVM uwtable attribute.
114- virtual bool needsUnwindTables () {
115- // Condensed logic of Clang implementations of
116- // `clang::ToolChain::IsUnwindTablesDefault()` based on early Clang 5.0.
117- return global.params .targetTriple ->getArch () == llvm::Triple::x86_64 ||
118- global.params .targetTriple ->getOS () == llvm::Triple::NetBSD;
114+ // / Returns the default unwind-table kind for all functions.
115+ // / Analogous to clang's ToolChain::getDefaultUnwindTableLevel().
116+ virtual llvm::UWTableKind defaultUnwindTableKind () {
117+ return llvm::UWTableKind::None;
119118 }
120119
121120 // / Returns true if the target is darwin-based.
Original file line number Diff line number Diff line change @@ -26,6 +26,13 @@ struct ArmTargetABI : TargetABI {
2626 CompositeToArray64 compositeToArray64;
2727 IntegerRewrite integerRewrite;
2828
29+ llvm::UWTableKind defaultUnwindTableKind () override {
30+ const auto &triple = *global.params .targetTriple ;
31+ return triple.isOSLinux () || triple.isOSOpenBSD ()
32+ ? llvm::UWTableKind::None
33+ : llvm::UWTableKind::Async;
34+ }
35+
2936 bool returnInArg (TypeFunction *tf, bool ) override {
3037 // AAPCS 5.4 wants composites > 4-bytes returned by arg except for
3138 // Homogeneous Aggregates of up-to 4 float types (6.1.2.1) - an HFA.
Original file line number Diff line number Diff line change @@ -44,10 +44,6 @@ struct NVPTXTargetABI : TargetABI {
4444 pointerRewite.applyTo (arg);
4545 }
4646 }
47- // There are no exceptions at all, so no need for unwind tables.
48- bool needsUnwindTables () override {
49- return false ;
50- }
5147};
5248
5349TargetABI *createNVPTXABI () { return new NVPTXTargetABI (); }
Original file line number Diff line number Diff line change @@ -36,6 +36,10 @@ struct PPCTargetABI : TargetABI {
3636
3737 explicit PPCTargetABI (const bool Is64Bit) : Is64Bit(Is64Bit) {}
3838
39+ llvm::UWTableKind defaultUnwindTableKind () override {
40+ return llvm::UWTableKind::Async;
41+ }
42+
3943 bool returnInArg (TypeFunction *tf, bool ) override {
4044 Type *rt = tf->next ->toBasetype ();
4145
Original file line number Diff line number Diff line change @@ -29,6 +29,10 @@ struct PPC64LETargetABI : TargetABI {
2929
3030 explicit PPC64LETargetABI () : hfvaToArray(8 ) {}
3131
32+ llvm::UWTableKind defaultUnwindTableKind () override {
33+ return llvm::UWTableKind::Async;
34+ }
35+
3236 bool passByVal (TypeFunction *, Type *t) override {
3337 t = t->toBasetype ();
3438 return isPOD (t) &&
Original file line number Diff line number Diff line change @@ -158,6 +158,11 @@ struct RISCV64TargetABI : TargetABI {
158158 IntegerRewrite integerRewrite;
159159
160160public:
161+ llvm::UWTableKind defaultUnwindTableKind () override {
162+ return global.params .targetTriple ->isOSLinux () ? llvm::UWTableKind::Async
163+ : llvm::UWTableKind::None;
164+ }
165+
161166 Type *vaListType () override {
162167 // va_list is void*
163168 return pointerTo (Type::tvoid);
Original file line number Diff line number Diff line change @@ -50,10 +50,6 @@ struct SPIRVTargetABI : TargetABI {
5050 pointerRewite.applyTo (arg);
5151 }
5252 }
53- // There are no exceptions at all, so no need for unwind tables.
54- bool needsUnwindTables () override {
55- return false ;
56- }
5753};
5854
5955TargetABI *createSPIRVABI () { return new SPIRVTargetABI (); }
Original file line number Diff line number Diff line change @@ -116,6 +116,10 @@ struct Win64TargetABI : TargetABI {
116116 return name;
117117 }
118118
119+ llvm::UWTableKind defaultUnwindTableKind () override {
120+ return llvm::UWTableKind::Async;
121+ }
122+
119123 bool returnInArg (TypeFunction *tf, bool needsThis) override {
120124 Type *rt = tf->next ->toBasetype ();
121125
You can’t perform that action at this time.
0 commit comments