Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build fails with strict-aliasing violations #6245

Open
eli-schwartz opened this issue Apr 2, 2024 · 4 comments · May be fixed by #6262
Open

Build fails with strict-aliasing violations #6245

eli-schwartz opened this issue Apr 2, 2024 · 4 comments · May be fixed by #6262
Labels
bug Issues that relate to unexpected/unwanted behavior. Don't use for PRs.

Comments

@eli-schwartz
Copy link

I tried to build with the following *FLAGS to optimize the build: -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing

The -Werror=* flags are important to detect cases where the compiler can try to optimize based on assuming UB cannot happen, and miscompile code that has UB in it. strict-aliasing issues are always bad but LTO can make them even worse.

I got this error:

[1/6] /usr/bin/x86_64-pc-linux-gnu-g++ -DBOOST_CHRONO_HEADER_ONLY -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE -DNOVA_SIMD -DReverbUGens_EXPORTS -DSC_DATA_DIR=\"/usr/share/SuperCollider\" -DSC_PLUGIN_EXT=\".so\" -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999_build/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/nova-simd -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/nova-tt -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface  -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -DNDEBUG -msse -mfpmath=sse -msse2 -D_LARGEFILE64_SOURCE -fvisibility-inlines-hidden -std=gnu++17 -fPIC   -fschedule-insns2 -fomit-frame-pointer -Wreturn-type -fno-math-errno -fno-signaling-nans -fsigned-zeros -fno-associative-math -pthread -fvisibility=hidden -fno-finite-math-only -MD -MT server/plugins/CMakeFiles/ReverbUGens.dir/ReverbUGens.cpp.o -MF server/plugins/CMakeFiles/ReverbUGens.dir/ReverbUGens.cpp.o.d -o server/plugins/CMakeFiles/ReverbUGens.dir/ReverbUGens.cpp.o -c /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/server/plugins/ReverbUGens.cpp
FAILED: server/plugins/CMakeFiles/ReverbUGens.dir/ReverbUGens.cpp.o 
/usr/bin/x86_64-pc-linux-gnu-g++ -DBOOST_CHRONO_HEADER_ONLY -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE -DNOVA_SIMD -DReverbUGens_EXPORTS -DSC_DATA_DIR=\"/usr/share/SuperCollider\" -DSC_PLUGIN_EXT=\".so\" -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999_build/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/nova-simd -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/nova-tt -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface  -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -DNDEBUG -msse -mfpmath=sse -msse2 -D_LARGEFILE64_SOURCE -fvisibility-inlines-hidden -std=gnu++17 -fPIC   -fschedule-insns2 -fomit-frame-pointer -Wreturn-type -fno-math-errno -fno-signaling-nans -fsigned-zeros -fno-associative-math -pthread -fvisibility=hidden -fno-finite-math-only -MD -MT server/plugins/CMakeFiles/ReverbUGens.dir/ReverbUGens.cpp.o -MF server/plugins/CMakeFiles/ReverbUGens.dir/ReverbUGens.cpp.o.d -o server/plugins/CMakeFiles/ReverbUGens.dir/ReverbUGens.cpp.o -c /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/server/plugins/ReverbUGens.cpp
In file included from /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface/SC_PlugIn.h:25,
                 from /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/server/plugins/ReverbUGens.cpp:18:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/server/plugins/ReverbUGens.cpp: In function ‘void gverb_set_roomsize(GVerb*, float)’:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface/SC_Unit.h:95:82: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
   95 | #define CALCSLOPE(next, prev) ((next - prev) * sc_typeof_cast(next) unit->mRate->mSlopeFactor)
      |                                                                     ~~~~~~~~~~~~~^~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/server/plugins/ReverbUGens.cpp:1201:34: note: in expansion of macro ‘CALCSLOPE’
 1201 |         unit->fdngainslopes[i] = CALCSLOPE(unit->fdngains[i], oldfdngain);
      |                                  ^~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface/SC_Unit.h:95:82: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
   95 | #define CALCSLOPE(next, prev) ((next - prev) * sc_typeof_cast(next) unit->mRate->mSlopeFactor)
      |                                                                     ~~~~~~~~~~~~~^~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/server/plugins/ReverbUGens.cpp:1212:34: note: in expansion of macro ‘CALCSLOPE’
 1212 |         unit->tapgainslopes[i] = CALCSLOPE(unit->tapgains[i], oldtapgain);
      |                                  ^~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/server/plugins/ReverbUGens.cpp: In function ‘void gverb_set_revtime(GVerb*, float)’:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface/SC_Unit.h:95:82: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
   95 | #define CALCSLOPE(next, prev) ((next - prev) * sc_typeof_cast(next) unit->mRate->mSlopeFactor)
      |                                                                     ~~~~~~~~~~~~~^~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/server/plugins/ReverbUGens.cpp:1230:34: note: in expansion of macro ‘CALCSLOPE’
 1230 |         unit->fdngainslopes[i] = CALCSLOPE(unit->fdngains[i], oldfdngain);
      |                                  ^~~~~~~~~
cc1plus: some warnings being treated as errors
[2/6] /usr/bin/x86_64-pc-linux-gnu-g++ -DBOOST_CHRONO_HEADER_ONLY -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE -DHAVE_ALSA=1 -DHAVE_HIDAPI -DHAVE_LID -DHAVE_READLINE -DNO_INTERNAL_SERVER -DQT_COLLIDER_EXPORTING -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DSC_AUDIO_API_PORTAUDIO -DSC_DATA_DIR=\"/usr/share/SuperCollider\" -DSC_HIDAPI -DSC_IDE -DSC_QT -DSNDFILE_HAS_MPEG -DSNDFILE_HAS_OPUS -DSNDFILE_HAS_VORBIS -DYYSTACK_USE_ALLOC -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999_build/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/lang -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/server -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/boost_sync/include -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangPrimSource -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/nova-tt -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/Bison -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/hidapi/hidapi -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/hidapi/hidapi_parser -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/QtCollider -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/X11_INCLUDE_DIR -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/SCDoc -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/TLSF-2.4.6/src -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -isystem /usr/lib64/qt5/mkspecs/linux-g++ -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/qt5/QtPrintSupport -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtSvg  -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -DNDEBUG -msse -mfpmath=sse -msse2 -std=gnu++17   -fschedule-insns2 -fomit-frame-pointer -Wreturn-type -fno-math-errno -fno-signaling-nans -fsigned-zeros -fno-associative-math -pthread -fvisibility=hidden -fPIC -MD -MT lang/CMakeFiles/libsclang.dir/LangSource/PyrParseNode.cpp.o -MF lang/CMakeFiles/libsclang.dir/LangSource/PyrParseNode.cpp.o.d -o lang/CMakeFiles/libsclang.dir/LangSource/PyrParseNode.cpp.o -c /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp
FAILED: lang/CMakeFiles/libsclang.dir/LangSource/PyrParseNode.cpp.o 
/usr/bin/x86_64-pc-linux-gnu-g++ -DBOOST_CHRONO_HEADER_ONLY -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE -DHAVE_ALSA=1 -DHAVE_HIDAPI -DHAVE_LID -DHAVE_READLINE -DNO_INTERNAL_SERVER -DQT_COLLIDER_EXPORTING -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DSC_AUDIO_API_PORTAUDIO -DSC_DATA_DIR=\"/usr/share/SuperCollider\" -DSC_HIDAPI -DSC_IDE -DSC_QT -DSNDFILE_HAS_MPEG -DSNDFILE_HAS_OPUS -DSNDFILE_HAS_VORBIS -DYYSTACK_USE_ALLOC -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999_build/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/lang -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/server -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/boost_sync/include -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangPrimSource -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/nova-tt -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/Bison -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/hidapi/hidapi -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/hidapi/hidapi_parser -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/QtCollider -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/X11_INCLUDE_DIR -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/SCDoc -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/TLSF-2.4.6/src -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -isystem /usr/lib64/qt5/mkspecs/linux-g++ -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/qt5/QtPrintSupport -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtSvg  -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -DNDEBUG -msse -mfpmath=sse -msse2 -std=gnu++17   -fschedule-insns2 -fomit-frame-pointer -Wreturn-type -fno-math-errno -fno-signaling-nans -fsigned-zeros -fno-associative-math -pthread -fvisibility=hidden -fPIC -MD -MT lang/CMakeFiles/libsclang.dir/LangSource/PyrParseNode.cpp.o -MF lang/CMakeFiles/libsclang.dir/LangSource/PyrParseNode.cpp.o.d -o lang/CMakeFiles/libsclang.dir/LangSource/PyrParseNode.cpp.o -c /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp
In file included from /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.h:24,
                 from /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp:22:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp: In member function ‘virtual void PyrCallNodeBase::compilePartialApplication(int, PyrSlot*)’:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp:1792:9: note: in expansion of macro ‘METHRAW’
 1792 |         METHRAW(prevBlock)->needsHeapContext = 1;
      |         ^~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp: In member function ‘virtual void PyrCallNode::compileCall(PyrSlot*)’:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp:1835:24: note: in expansion of macro ‘METHRAW’
 1835 |     int numBlockArgs = METHRAW(gCompilingBlock)->numargs;
      |                        ^~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp: In member function ‘virtual void PyrSlotNode::compilePushLit(PyrSlot*)’:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp:3152:17: note: in expansion of macro ‘METHRAW’
 3152 |                 METHRAW(gCompilingBlock)->needsHeapContext = 1;
      |                 ^~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp: In member function ‘virtual void PyrSlotNode::compileLiteral(PyrSlot*)’:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrParseNode.cpp:3222:17: note: in expansion of macro ‘METHRAW’
 3222 |                 METHRAW(gCompilingBlock)->needsHeapContext = 1;
      |                 ^~~~~~~
cc1plus: some warnings being treated as errors
[3/6] /usr/bin/x86_64-pc-linux-gnu-g++ -DBOOST_CHRONO_HEADER_ONLY -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE -DHAVE_ALSA=1 -DHAVE_HIDAPI -DHAVE_LID -DHAVE_READLINE -DNO_INTERNAL_SERVER -DQT_COLLIDER_EXPORTING -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DSC_AUDIO_API_PORTAUDIO -DSC_DATA_DIR=\"/usr/share/SuperCollider\" -DSC_HIDAPI -DSC_IDE -DSC_QT -DSNDFILE_HAS_MPEG -DSNDFILE_HAS_OPUS -DSNDFILE_HAS_VORBIS -DYYSTACK_USE_ALLOC -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999_build/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/lang -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/server -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/boost_sync/include -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangPrimSource -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/nova-tt -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/Bison -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/hidapi/hidapi -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/hidapi/hidapi_parser -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/QtCollider -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/X11_INCLUDE_DIR -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/SCDoc -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/TLSF-2.4.6/src -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -isystem /usr/lib64/qt5/mkspecs/linux-g++ -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/qt5/QtPrintSupport -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtSvg  -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -DNDEBUG -msse -mfpmath=sse -msse2 -std=gnu++17   -fschedule-insns2 -fomit-frame-pointer -Wreturn-type -fno-math-errno -fno-signaling-nans -fsigned-zeros -fno-associative-math -pthread -fvisibility=hidden -fPIC -MD -MT lang/CMakeFiles/libsclang.dir/LangSource/PyrInterpreter3.cpp.o -MF lang/CMakeFiles/libsclang.dir/LangSource/PyrInterpreter3.cpp.o.d -o lang/CMakeFiles/libsclang.dir/LangSource/PyrInterpreter3.cpp.o -c /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp
FAILED: lang/CMakeFiles/libsclang.dir/LangSource/PyrInterpreter3.cpp.o 
/usr/bin/x86_64-pc-linux-gnu-g++ -DBOOST_CHRONO_HEADER_ONLY -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE -DHAVE_ALSA=1 -DHAVE_HIDAPI -DHAVE_LID -DHAVE_READLINE -DNO_INTERNAL_SERVER -DQT_COLLIDER_EXPORTING -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DSC_AUDIO_API_PORTAUDIO -DSC_DATA_DIR=\"/usr/share/SuperCollider\" -DSC_HIDAPI -DSC_IDE -DSC_QT -DSNDFILE_HAS_MPEG -DSNDFILE_HAS_OPUS -DSNDFILE_HAS_VORBIS -DYYSTACK_USE_ALLOC -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999_build/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/lang -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/plugin_interface -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/include/server -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/common -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/boost_sync/include -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangPrimSource -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/nova-tt -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/Bison -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/hidapi/hidapi -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/hidapi/hidapi_parser -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/QtCollider -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/X11_INCLUDE_DIR -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/SCDoc -I/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/external_libraries/TLSF-2.4.6/src -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -isystem /usr/lib64/qt5/mkspecs/linux-g++ -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/qt5/QtPrintSupport -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtSvg  -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -DNDEBUG -msse -mfpmath=sse -msse2 -std=gnu++17   -fschedule-insns2 -fomit-frame-pointer -Wreturn-type -fno-math-errno -fno-signaling-nans -fsigned-zeros -fno-associative-math -pthread -fvisibility=hidden -fPIC -MD -MT lang/CMakeFiles/libsclang.dir/LangSource/PyrInterpreter3.cpp.o -MF lang/CMakeFiles/libsclang.dir/LangSource/PyrInterpreter3.cpp.o.d -o lang/CMakeFiles/libsclang.dir/LangSource/PyrInterpreter3.cpp.o -c /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp
In file included from /var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp:28:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp: In function ‘void Interpret(VMGlobals*)’:
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp:1595:29: note: in expansion of macro ‘METHRAW’
 1595 |             numArgsPushed = METHRAW(g->block)->numargs;
      |                             ^~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp:1609:29: note: in expansion of macro ‘METHRAW’
 1609 |             numArgsPushed = METHRAW(g->block)->numargs;
      |                             ^~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp:1624:29: note: in expansion of macro ‘METHRAW’
 1624 |             numArgsPushed = METHRAW(g->block)->numargs;
      |                             ^~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp:1639:29: note: in expansion of macro ‘METHRAW’
 1639 |             numArgsPushed = METHRAW(g->block)->numargs;
      |                             ^~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp:1654:29: note: in expansion of macro ‘METHRAW’
 1654 |             numArgsPushed = METHRAW(g->block)->numargs + 1;
      |                             ^~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrKernel.h:144:23: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  144 | #define METHRAW(obj) ((PyrMethodRaw*)&(((PyrBlock*)obj)->rawData1))
      |                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/media-sound/supercollider-9999/work/supercollider-9999/lang/LangSource/PyrInterpreter3.cpp:1669:29: note: in expansion of macro ‘METHRAW’
 1669 |             numArgsPushed = METHRAW(g->block)->numargs + 1;
      |                             ^~~~~~~
cc1plus: some warnings being treated as errors
ninja: build stopped: cannot make progress due to previous errors.

Downstream report: https://bugs.gentoo.org/927071
Full build log: build.log

Note the downstream report is reported against 3.13.0 but my local reproducer is against git develop.

@eli-schwartz eli-schwartz added the bug Issues that relate to unexpected/unwanted behavior. Don't use for PRs. label Apr 2, 2024
@eli-schwartz
Copy link
Author

The Gentoo ticket links back to some issues here which involved adding -fno-strict-aliasing to the mingw builds to, essentially, "fix problems". From back in the gcc 4.9 days.

Compiler diagnostics have come a long way since 2016, so solving this issue may mean you can get rid of that flag for mingw as well...

@JordanHendersonMusic
Copy link
Contributor

JordanHendersonMusic commented Apr 19, 2024

Thanks for raising this! Unfortunately this won't be a simple fix.

Concerning the casting of the PyrObjects...

struct PyrMethodRaw {

PyrMethodRaw takes up two slots, raw1 and raw2 in PyrBlock. I'm pretty sure slicing an object like this is undefined behaviour.

I can think of two solutions, either heap allocate PyrMethodRaw, or split it into two classes.

Since PyrMethodRaw preserves the tag variable of both slots it spans, attempting to place its data into the union's memory, splitting would be relatively straightforward and have the least performance impact - particularly since the data is just a series of packed shorts and chars that fit into a double word.

This (excellent) summary of strict aliasing also suggest the only way to make punnable pointers in c++ is with placement new (or construct_at presumably), which supercollider does not do.

https://gist.github.com/shafik/848ae25ee209f698763cffee272a58f8

@JordanHendersonMusic
Copy link
Contributor

I can't seem to find where the strict aliasing is violated for the calc_slope macro.

@JordanHendersonMusic
Copy link
Contributor

JordanHendersonMusic commented Apr 21, 2024

Found it.

float arr[10];
decltype(arr[0]); // this is a float&, not a float

therefore the cast in CACL_SCOPE expands to

(float&)(unit->....)

This one is a pretty big bug actually!

Some code demonstrating the error.

#include <iostream>
#include <cstdint>
#include <string>

template<typename ToType, typename FromValue>
[[nodiscard]] inline constexpr ToType numeric_value_cast_to_type_of(ToType, FromValue value) noexcept {
    using TargetT = std::remove_cv_t<std::remove_reference_t<ToType>>;
    static_assert(std::is_arithmetic_v<FromValue>);
    static_assert(std::is_arithmetic_v<TargetT>);
    return static_cast<TargetT>(value);
}

int main() {
    double a = 0.1;
    float as[4] = {0.0, 0.0, 0.0, 0.0};

    float staticcast = numeric_value_cast_to_type_of(as[0], a);
    float ccast = (decltype(as[0])) a;

    std::cout << "staticcast " << staticcast << " ccast " << ccast << '\n';
    // staticcast 0.1 ccast -1.58819e-23
    return 0;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Issues that relate to unexpected/unwanted behavior. Don't use for PRs.
Projects
None yet
2 participants