Hi,

this enables FP exceptions everywhere in Debug mode, and disables them in
Release mode. This is for testing only, and should *not* yet go into
mainline.

Still needed:

 - signal handler that complains and allows continuing
 - context library handling
 - tests

   Simon

---
 common/single_top.cpp                 | 6 ++++++
 kicad/kicad.cpp                       | 6 ++++++
 qa/qa_utils/pcb_test_frame.cpp        | 8 ++++++++
 utils/idftools/idf2vrml.cpp           | 6 ++++++
 utils/kicad-ogltest/kicad-ogltest.cpp | 6 ++++++
 utils/kicad2step/kicad2step.cpp       | 6 ++++++
 6 files changed, 38 insertions(+)

diff --git a/common/single_top.cpp b/common/single_top.cpp
index b50ecf18a..f527c8b35 100644
--- a/common/single_top.cpp
+++ b/common/single_top.cpp
@@ -47,6 +47,7 @@
 #include <kiway_player.h>
 #include <confirm.h>
 
+#include <fenv.h>
 
 // Only a single KIWAY is supported in this single_top top level component,
 // which is dedicated to loading only a single DSO.
@@ -150,6 +151,11 @@ struct APP_SINGLE_TOP : public wxApp
 
     bool OnInit() override
     {
+#ifdef NDEBUG
+        fedisableexcept(FE_ALL_EXCEPT);
+#else
+        feenableexcept(FE_ALL_EXCEPT);
+#endif
         // Force wxHtmlWinParser initialization when a wxHtmlWindow is used only
         // in a shared modules (.so or .dll file)
         // Otherwise the Html text is displayed as plain text.
diff --git a/kicad/kicad.cpp b/kicad/kicad.cpp
index 2ca33d77e..84b5b1acc 100644
--- a/kicad/kicad.cpp
+++ b/kicad/kicad.cpp
@@ -41,6 +41,7 @@
 #include <systemdirsappend.h>
 
 #include <stdexcept>
+#include <fenv.h>
 
 #include "pgm_kicad.h"
 
@@ -245,6 +246,11 @@ struct APP_KICAD : public wxApp
 
     bool OnInit()           override
     {
+#ifdef NDEBUG
+        fedisableexcept(FE_ALL_EXCEPT);
+#else
+        feenableexcept(FE_ALL_EXCEPT);
+#endif
         return program.OnPgmInit();
     }
 
diff --git a/qa/qa_utils/pcb_test_frame.cpp b/qa/qa_utils/pcb_test_frame.cpp
index 04b403fa2..2a8ea950e 100644
--- a/qa/qa_utils/pcb_test_frame.cpp
+++ b/qa/qa_utils/pcb_test_frame.cpp
@@ -59,6 +59,9 @@
 #include <tools/selection_tool.h>
 #include <kicad_plugin.h>
 
+#include <fenv.h>
+
+
 #include "pcb_test_frame.h"
 
 IMPLEMENT_APP( GAL_TEST_APP )
@@ -67,6 +70,11 @@ using namespace KIGFX;
 
 bool GAL_TEST_APP::OnInit()
 {
+#ifdef NDEBUG
+        fedisableexcept(FE_ALL_EXCEPT);
+#else
+        feenableexcept(FE_ALL_EXCEPT);
+#endif
     if( !wxApp::OnInit() )
         return false;
 
diff --git a/utils/idftools/idf2vrml.cpp b/utils/idftools/idf2vrml.cpp
index 4eb34c6d1..cb9212c3f 100644
--- a/utils/idftools/idf2vrml.cpp
+++ b/utils/idftools/idf2vrml.cpp
@@ -52,6 +52,7 @@
 #include <cstring>
 #include <algorithm>
 #include <boost/ptr_container/ptr_map.hpp>
+#include <fenv.h>
 
 #include "idf_helpers.h"
 #include "idf_common.h"
@@ -105,6 +106,11 @@ bool showObjectMapping;
 
 bool IDF2VRML::OnInit()
 {
+#ifdef NDEBUG
+        fedisableexcept(FE_ALL_EXCEPT);
+#else
+        feenableexcept(FE_ALL_EXCEPT);
+#endif
     m_ScaleFactor = 1.0;
     m_Compact = true;
     m_NoOutlineSubs = false;
diff --git a/utils/kicad-ogltest/kicad-ogltest.cpp b/utils/kicad-ogltest/kicad-ogltest.cpp
index 31157b900..a1b56edc5 100644
--- a/utils/kicad-ogltest/kicad-ogltest.cpp
+++ b/utils/kicad-ogltest/kicad-ogltest.cpp
@@ -32,6 +32,7 @@
 #include <gal/opengl/opengl_gal.h>
 #include <pgm_base.h>
 #include <iostream>
+#include <fenv.h>
 
 // Required OpenGL version
 #define REQUIRED_MAJOR 2L
@@ -79,6 +80,11 @@ public:
 
 bool OGLTEST_APP::OnInit()
 {
+#ifdef NDEBUG
+        fedisableexcept(FE_ALL_EXCEPT);
+#else
+        feenableexcept(FE_ALL_EXCEPT);
+#endif
     WX_QUIET be_quiet;
 
     auto frame = new wxFrame( nullptr, wxID_ANY, "OpenGL test", wxDefaultPosition, wxDefaultSize,
diff --git a/utils/kicad2step/kicad2step.cpp b/utils/kicad2step/kicad2step.cpp
index df3dc8e7a..701db7a63 100644
--- a/utils/kicad2step/kicad2step.cpp
+++ b/utils/kicad2step/kicad2step.cpp
@@ -31,6 +31,7 @@
 #include <iostream>
 #include <sstream>
 #include <Standard_Failure.hxx>
+#include <fenv.h>
 
 #include "pcb/kicadpcb.h"
 
@@ -96,6 +97,11 @@ wxIMPLEMENT_APP_CONSOLE( KICAD2MCAD );
 
 bool KICAD2MCAD::OnInit()
 {
+#ifdef NDEBUG
+        fedisableexcept(FE_ALL_EXCEPT);
+#else
+        feenableexcept(FE_ALL_EXCEPT);
+#endif
 #ifdef SUPPORTS_IGES
     m_fmtIGES = false;
 #endif
_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to