Xfiles issueshttp://git.gem.ec-nantes.fr/eXlibris/Xfiles/-/issues2018-07-27T13:38:51Zhttp://git.gem.ec-nantes.fr/eXlibris/Xfiles/-/issues/40Compiling with clang++2018-07-27T13:38:51ZAlexis SALZMANCompiling with clang++Now that clang++ 3.9.0 is installed on titan (/opt/llvm-3.9.0/bin/clang++) it is possible to do some compilation test with this compiler.
Modify your LocalConfig.cmake to use clang++ and rebuild everything.
A full Ctest on Xtest have ...Now that clang++ 3.9.0 is installed on titan (/opt/llvm-3.9.0/bin/clang++) it is possible to do some compilation test with this compiler.
Modify your LocalConfig.cmake to use clang++ and rebuild everything.
A full Ctest on Xtest have been done and give almost same results as g++.
First remark regarding CMAKEFILE, clang give the following message:
```
clang-3.9: warning: optimization flag '-frounding-math' is not supported
```
This mean that we have put this flag every-where or almost but it is compiler dependent !!! If we pass to modern cmake we will be able to use `$<COMPILER_ID:GNU>,$<COMPILER_ID:Clang>` stuff to appropriately use -frounding-math or not
When using MUMPS or PASTIX clang need to have an explicit -lpthread. Those libraries where compiled with g++. Maybe with this compiler the -lpthread is automatically set. Like above if we pass to modern cmake we may encapsulate MUMPS or PASTIX target dependencies and fix cleanly those dependencies with `$<COMPILER_ID:GNU>,$<COMPILER_ID:Clang>` stuff.
What is more interesting is that clang have note exactly the same behavior as g++ regarding errors and warnings. For example with -Wconversion clang check implicit conversion miss formed (this is not possible with g++):
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
size_t h=1234567891123456Lu;
int hi;
short hs;
hi=h;
hs=h;
cout<<"h "<<h<<endl;
cout<<"hi "<<hi<<endl;
cout<<"hs "<<hs<<endl;
hi=-1;
h=hi;
cout<<"h "<<h<<endl;
cout<<"hi "<<hi<<endl;
vector<int> v(3,1);
int l=v.size();
v[l-1]=4;
for (auto val : v)
cout<<val<<endl;
return 0;
}
```
With this code clang produce following messages:
```
clang++ -std=c++11 -Wconversion main.cc
main.cc:13:8: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'short' [-Wconversion]
hs=h;
~^
main.cc:20:7: warning: implicit conversion changes signedness: 'int' to 'size_t' (aka 'unsigned long') [-Wsign-conversion]
h=hi;
~^~
main.cc:27:8: warning: implicit conversion changes signedness: 'int' to 'size_type' (aka 'unsigned long') [-Wsign-conversion]
v[l-1]=4;
~ ~^~
main.cc:12:8: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
hi=h;
~^
main.cc:26:13: warning: implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
int l=v.size();
~ ~~^~~~~~
5 warnings generated.
```
With eXlibris many messages of those types are issued ... For many it is only a matter of using `int` instead of `size_t` when dealing with STL container. But unfortunately this is masking more interesting ones that may be mistakes or error !http://git.gem.ec-nantes.fr/eXlibris/Xfiles/-/issues/48Exception in parrallel2019-03-20T09:43:17ZAlexis SALZMANException in parrallelIn some plateform (liger at least) throwing an exception in a parallel application lead to bad behavior. Say some process terminate due to the launched exception but other process do continue .... and the job run till MaxTime limite is r...In some plateform (liger at least) throwing an exception in a parallel application lead to bad behavior. Say some process terminate due to the launched exception but other process do continue .... and the job run till MaxTime limite is reachead (not to good).
Suprisingly if exception is catched and a MPI_Abort is called the same problem hold ?!?!
To be investigate ....