Skip to content

Warning: dereferencing type-punned pointer will break strict-aliasing rules, when moving to c++17

Hey I feel super stupid, because I am not able to understand this error:

When I compile with gcc -std=c++17 the following warning messages are displayed:

src/xerus/ttNetwork.cpp: In static member function ‘static xerus::TTNetwork<isOperator> xerus::TTNetwork<isOperator>::dirac(std::vector<long unsigned int>, const std::vector<long unsigned int>&)’:
src/xerus/ttNetwork.cpp:274:66: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
                 result.set_component(i, Tensor::dirac({1, result.dimensions[i], result.dimensions[numComponents+i], 1}, _position[i]*result.dimensions[numComponents+i] + _position[numComponents+i]));
                                                                  ^~~~~~~~~~
src/xerus/ttNetwork.cpp:274:88: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
                 result.set_component(i, Tensor::dirac({1, result.dimensions[i], result.dimensions[numComponents+i], 1}, _position[i]*result.dimensions[numComponents+i] + _position[numComponents+i]));
                                                                                        ^~~~~~~~~~
src/xerus/ttNetwork.cpp:274:141: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 _component(i, Tensor::dirac({1, result.dimensions[i], result.dimensions[numComponents+i], 1}, _position[i]*result.dimensions[numComponents+i] + _position[numComponents+i]));
                                                                                                                   ^~~~~~~~~~
src/xerus/ttNetwork.cpp:276:66: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
                 result.set_component(i, Tensor::dirac({1, result.dimensions[i], 1}, _position[i]));
                                                                  ^~~~~~~~~~
In file included from include/xerus/misc/containerSupport.h:37:0,
                 from include/xerus/ttNetwork.h:28,
                 from src/xerus/ttNetwork.cpp:28:
src/xerus/ttNetwork.cpp: In static member function ‘static bool xerus::TTNetwork<isOperator>::specialized_sum_f(std::unique_ptr<xerus::internal::IndexedTensorMoveable<xerus::TensorNetwork> >&, xerus::internal::IndexedTensorReadOnly<xerus::TensorNetwork>&&, xerus::internal::IndexedTensorReadOnly<xerus::TensorNetwork>&&)’:
src/xerus/ttNetwork.cpp:1055:36: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
             INTERNAL_CHECK(ttOther.dimensions == stackOther->dimensions, "Ie");
                                    ^
include/xerus/misc/check.h:68:8: note: in definition of macro ‘XERUS_INTERNAL_CHECK’
   if(!(condition)) { \
        ^~~~~~~~~
src/xerus/ttNetwork.cpp:1055:13: note: in expansion of macro ‘INTERNAL_CHECK’
             INTERNAL_CHECK(ttOther.dimensions == stackOther->dimensions, "Ie");
             ^~~~~~~~~~~~~~

Any idea,

Cheers Micha

Edited by RoteKekse