diff --git a/include/diy/factory.hpp b/include/diy/factory.hpp index 90d4ff37fff65b95aee495d5c014e36956fa770e..27f59f443f2f5b9380db0d0b255333a7fd9c6372 100644 --- a/include/diy/factory.hpp +++ b/include/diy/factory.hpp @@ -37,11 +37,14 @@ class Factory }; return true; } - static bool registered; + static volatile bool registered; std::string id() const override { return typeid(T).name(); } private: +#if defined(__INTEL_COMPILER) + __attribute__ ((used)) +#endif Registrar(): Base(Key{}) { (void)registered; } }; @@ -67,7 +70,7 @@ class Factory template <class Base, class... Args> template <class T> -bool Factory<Base, Args...>::Registrar<T>::registered = Factory<Base, Args...>::Registrar<T>::registerT(); +volatile bool Factory<Base, Args...>::Registrar<T>::registered = Factory<Base, Args...>::Registrar<T>::registerT(); } diff --git a/include/diy/mpi.hpp b/include/diy/mpi.hpp index 2b741247ee75e69dc308d2e5e873d1e9efceb4b9..d9dd288a711eb26996e7d818c6adcc92be292e93 100644 --- a/include/diy/mpi.hpp +++ b/include/diy/mpi.hpp @@ -42,7 +42,7 @@ diy::mpi::environment:: environment(int threading) { #ifndef DIY_NO_MPI - int argc = 0; char** argv; + int argc = 0; char** argv = { NULL }; MPI_Init_thread(&argc, &argv, threading, &provided_threading); #else provided_threading = threading;