diff options
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/fpu_modes.h | 11 | ||||
-rw-r--r-- | Alc/helpers.cpp | 4 |
2 files changed, 10 insertions, 5 deletions
diff --git a/Alc/fpu_modes.h b/Alc/fpu_modes.h index 73e75965..5465e9cf 100644 --- a/Alc/fpu_modes.h +++ b/Alc/fpu_modes.h @@ -8,13 +8,18 @@ class FPUCtl { bool in_mode{}; public: - FPUCtl() noexcept; - ~FPUCtl() { leave(); } + FPUCtl(); + /* HACK: 32-bit targets for GCC seem to have a problem here with certain + * noexcept methods (which destructors are) causing an internal compiler + * error. No idea why it's these methods specifically, but this is needed + * to get it to compile. + */ + ~FPUCtl() noexcept(false) { leave(); } FPUCtl(const FPUCtl&) = delete; FPUCtl& operator=(const FPUCtl&) = delete; - void leave() noexcept; + void leave(); }; #endif /* FPU_MODES_H */ diff --git a/Alc/helpers.cpp b/Alc/helpers.cpp index d9133842..1a62263e 100644 --- a/Alc/helpers.cpp +++ b/Alc/helpers.cpp @@ -262,7 +262,7 @@ void FillCPUCaps(int capfilter) } -FPUCtl::FPUCtl() noexcept +FPUCtl::FPUCtl() { #if defined(HAVE_SSE_INTRINSICS) this->sse_state = _mm_getcsr(); @@ -287,7 +287,7 @@ FPUCtl::FPUCtl() noexcept this->in_mode = true; } -void FPUCtl::leave() noexcept +void FPUCtl::leave() { if(!this->in_mode) return; |