aardappel / lobster

The Lobster Programming Language
http://strlen.com/lobster
2.24k stars 121 forks source link

Assertion failed on size for small_vector<> #216

Closed stolk closed 1 year ago

stolk commented 1 year ago

Building with gcc-11 on Ubuntu:

$ ./lobster 
lobster: /home/bram/src/lobster/dev/src/lobster/tools.h:1230: void unit_test_tools(): Assertion `sizeof(small_vector<int, 2>) == 12' failed.
Aborted (core dumped)
$ cmake -DCMAKE_BUILD_TYPE=Debug ../dev/
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.

-- The C compiler identification is GNU 11.3.0
-- The CXX compiler identification is GNU 11.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Deprecation Warning at external/SDL/CMakeLists.txt:5 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2") 
-- Performing Test HAVE_GCC_WALL
-- Performing Test HAVE_GCC_WALL - Success
-- Performing Test HAVE_GCC_NO_STRICT_ALIASING
-- Performing Test HAVE_GCC_NO_STRICT_ALIASING - Success
-- Performing Test HAVE_GCC_WDECLARATION_AFTER_STATEMENT
-- Performing Test HAVE_GCC_WDECLARATION_AFTER_STATEMENT - Success
-- Performing Test HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT
-- Performing Test HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT - Success
-- Performing Test HAVE_GCC_ATOMICS
-- Performing Test HAVE_GCC_ATOMICS - Success
-- Performing Test HAVE_GCC_PREFERRED_STACK_BOUNDARY
-- Performing Test HAVE_GCC_PREFERRED_STACK_BOUNDARY - Failed
-- Performing Test HAVE_GCC_FVISIBILITY
-- Performing Test HAVE_GCC_FVISIBILITY - Success
-- Performing Test HAVE_GCC_WSHADOW
-- Performing Test HAVE_GCC_WSHADOW - Success
-- Performing Test HAVE_NO_UNDEFINED
-- Performing Test HAVE_NO_UNDEFINED - Success
-- Performing Test HAVE_MMX
-- Performing Test HAVE_MMX - Success
-- Performing Test HAVE_3DNOW
-- Performing Test HAVE_3DNOW - Success
-- Performing Test HAVE_SSE
-- Performing Test HAVE_SSE - Success
-- Performing Test HAVE_SSE2
-- Performing Test HAVE_SSE2 - Success
-- Performing Test HAVE_SSE3
-- Performing Test HAVE_SSE3 - Success
-- Looking for immintrin.h
-- Looking for immintrin.h - found
-- Performing Test HAVE_ALTIVEC_H_HDR
-- Performing Test HAVE_ALTIVEC_H_HDR - Failed
-- Performing Test HAVE_ALTIVEC
-- Performing Test HAVE_ALTIVEC - Failed
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdio.h
-- Looking for stdio.h - found
-- Looking for stdlib.h
-- Looking for stdlib.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Looking for stdarg.h
-- Looking for stdarg.h - found
-- Looking for malloc.h
-- Looking for malloc.h - found
-- Looking for memory.h
-- Looking for memory.h - found
-- Looking for string.h
-- Looking for string.h - found
-- Looking for limits.h
-- Looking for limits.h - found
-- Looking for strings.h
-- Looking for strings.h - found
-- Looking for wchar.h
-- Looking for wchar.h - found
-- Looking for inttypes.h
-- Looking for inttypes.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for ctype.h
-- Looking for ctype.h - found
-- Looking for math.h
-- Looking for math.h - found
-- Looking for iconv.h
-- Looking for iconv.h - found
-- Looking for signal.h
-- Looking for signal.h - found
-- Looking for libunwind.h
-- Looking for libunwind.h - not found
-- Looking for 8 include files dlfcn.h, ..., float.h
-- Looking for 8 include files dlfcn.h, ..., float.h - found
-- Check size of size_t
-- Check size of size_t - done
-- Looking for M_PI
-- Looking for M_PI - found
-- Performing Test HAVE_MPROTECT
-- Performing Test HAVE_MPROTECT - Success
-- Looking for strtod
-- Looking for strtod - found
-- Looking for malloc
-- Looking for malloc - found
-- Looking for calloc
-- Looking for calloc - found
-- Looking for realloc
-- Looking for realloc - found
-- Looking for free
-- Looking for free - found
-- Looking for getenv
-- Looking for getenv - found
-- Looking for setenv
-- Looking for setenv - found
-- Looking for putenv
-- Looking for putenv - found
-- Looking for unsetenv
-- Looking for unsetenv - found
-- Looking for qsort
-- Looking for qsort - found
-- Looking for abs
-- Looking for abs - found
-- Looking for bcopy
-- Looking for bcopy - found
-- Looking for memset
-- Looking for memset - found
-- Looking for memcpy
-- Looking for memcpy - found
-- Looking for memmove
-- Looking for memmove - found
-- Looking for memcmp
-- Looking for memcmp - found
-- Looking for strlen
-- Looking for strlen - found
-- Looking for strlcpy
-- Looking for strlcpy - not found
-- Looking for strlcat
-- Looking for strlcat - not found
-- Looking for _strrev
-- Looking for _strrev - not found
-- Looking for _strupr
-- Looking for _strupr - not found
-- Looking for _strlwr
-- Looking for _strlwr - not found
-- Looking for strchr
-- Looking for strchr - found
-- Looking for strrchr
-- Looking for strrchr - found
-- Looking for strstr
-- Looking for strstr - found
-- Looking for itoa
-- Looking for itoa - not found
-- Looking for _ltoa
-- Looking for _ltoa - not found
-- Looking for _uitoa
-- Looking for _uitoa - not found
-- Looking for _ultoa
-- Looking for _ultoa - not found
-- Looking for strtol
-- Looking for strtol - found
-- Looking for strtoul
-- Looking for strtoul - found
-- Looking for _i64toa
-- Looking for _i64toa - not found
-- Looking for _ui64toa
-- Looking for _ui64toa - not found
-- Looking for strtoll
-- Looking for strtoll - found
-- Looking for strtoull
-- Looking for strtoull - found
-- Looking for atoi
-- Looking for atoi - found
-- Looking for atof
-- Looking for atof - found
-- Looking for strcmp
-- Looking for strcmp - found
-- Looking for strncmp
-- Looking for strncmp - found
-- Looking for _stricmp
-- Looking for _stricmp - not found
-- Looking for strcasecmp
-- Looking for strcasecmp - found
-- Looking for _strnicmp
-- Looking for _strnicmp - not found
-- Looking for strncasecmp
-- Looking for strncasecmp - found
-- Looking for vsscanf
-- Looking for vsscanf - found
-- Looking for vsnprintf
-- Looking for vsnprintf - found
-- Looking for fopen64
-- Looking for fopen64 - found
-- Looking for fseeko
-- Looking for fseeko - found
-- Looking for fseeko64
-- Looking for fseeko64 - found
-- Looking for sigaction
-- Looking for sigaction - found
-- Looking for setjmp
-- Looking for setjmp - found
-- Looking for nanosleep
-- Looking for nanosleep - found
-- Looking for sysconf
-- Looking for sysconf - found
-- Looking for sysctlbyname
-- Looking for sysctlbyname - not found
-- Looking for getauxval
-- Looking for getauxval - found
-- Looking for poll
-- Looking for poll - found
-- Looking for _Exit
-- Looking for _Exit - found
-- Looking for pow in m
-- Looking for pow in m - found
-- Looking for atan
-- Looking for atan - found
-- Looking for atan2
-- Looking for atan2 - found
-- Looking for ceil
-- Looking for ceil - found
-- Looking for copysign
-- Looking for copysign - found
-- Looking for cos
-- Looking for cos - found
-- Looking for cosf
-- Looking for cosf - found
-- Looking for fabs
-- Looking for fabs - found
-- Looking for floor
-- Looking for floor - found
-- Looking for log
-- Looking for log - found
-- Looking for pow
-- Looking for pow - found
-- Looking for scalbn
-- Looking for scalbn - found
-- Looking for sin
-- Looking for sin - found
-- Looking for sinf
-- Looking for sinf - found
-- Looking for sqrt
-- Looking for sqrt - found
-- Looking for sqrtf
-- Looking for sqrtf - found
-- Looking for tan
-- Looking for tan - found
-- Looking for tanf
-- Looking for tanf - found
-- Looking for acos
-- Looking for acos - found
-- Looking for asin
-- Looking for asin - found
-- Looking for iconv_open in iconv
-- Looking for iconv_open in iconv - not found
-- Looking for alloca.h
-- Looking for alloca.h - found
-- Looking for alloca
-- Looking for alloca - not found
-- Performing Test HAVE_SA_SIGACTION
-- Performing Test HAVE_SA_SIGACTION - Success
-- Looking for dlopen
-- Looking for dlopen - found
-- Performing Test OSS_FOUND
-- Performing Test OSS_FOUND - Success
-- Looking for alsa/asoundlib.h
-- Looking for alsa/asoundlib.h - found
-- Looking for snd_pcm_recover in asound
-- Looking for snd_pcm_recover in asound - found
-- dynamic libasound -> libasound.so.2
-- Checking for module 'jack'
--   Found jack, version 0.125.0rc1
-- dynamic libjack -> libjack.so.0
-- Checking for module 'libpulse-simple'
--   Found libpulse-simple, version 15.99.1
-- dynamic libpulse-simple -> libpulse-simple.so.0
-- Checking for module 'esound'
--   No package 'esound' found
-- Looking for audio/audiolib.h
-- Looking for audio/audiolib.h - found
-- dynamic libaudio -> libaudio.so.2
-- Looking for sndio.h
-- Looking for sndio.h - found
-- Looking for samplerate.h
-- Looking for samplerate.h - found
-- dynamic libsamplerate -> libsamplerate.so.0
-- Checking for modules 'bcm_host;brcmegl'
--   No package 'bcm_host' found
--   No package 'brcmegl' found
-- Performing Test HAVE_VIDEO_RPI
-- Performing Test HAVE_VIDEO_RPI - Failed
-- dynamic libX11 -> libX11.so.6
-- dynamic libXext -> libXext.so.6
-- dynamic libXcursor -> libXcursor.so.1
-- dynamic libXinerama -> libXinerama.so.1
-- dynamic libXi -> libXi.so.6
-- dynamic libXrandr -> libXrandr.so.2
-- dynamic libXrender -> libXrender.so.1
-- dynamic libXss -> libXss.so.1
-- dynamic libXxf86vm -> libXxf86vm.so.1
-- Looking for X11/Xcursor/Xcursor.h
-- Looking for X11/Xcursor/Xcursor.h - found
-- Looking for X11/extensions/Xinerama.h
-- Looking for X11/extensions/Xinerama.h - found
-- Looking for X11/extensions/XInput2.h
-- Looking for X11/extensions/XInput2.h - found
-- Looking for X11/extensions/Xrandr.h
-- Looking for X11/extensions/Xrandr.h - found
-- Looking for X11/extensions/Xrender.h
-- Looking for X11/extensions/Xrender.h - found
-- Looking for X11/extensions/scrnsaver.h
-- Looking for X11/extensions/scrnsaver.h - found
-- Looking for X11/extensions/shape.h
-- Looking for X11/extensions/shape.h - found
-- Looking for include files X11/Xlib.h, X11/extensions/xf86vmode.h
-- Looking for include files X11/Xlib.h, X11/extensions/xf86vmode.h - found
-- Looking for 3 include files X11/Xlib.h, ..., X11/extensions/Xext.h
-- Looking for 3 include files X11/Xlib.h, ..., X11/extensions/Xext.h - found
-- Looking for shmat
-- Looking for shmat - found
-- Performing Test HAVE_CONST_XEXT_ADDDISPLAY
-- Performing Test HAVE_CONST_XEXT_ADDDISPLAY - Success
-- Performing Test HAVE_XGENERICEVENT
-- Performing Test HAVE_XGENERICEVENT - Success
-- Looking for XkbKeycodeToKeysym
-- Looking for XkbKeycodeToKeysym - found
-- Performing Test HAVE_XINPUT2_MULTITOUCH
-- Performing Test HAVE_XINPUT2_MULTITOUCH - Success
-- Performing Test HAVE_VIDEO_OPENGL
-- Performing Test HAVE_VIDEO_OPENGL - Success
-- Performing Test HAVE_VIDEO_OPENGL_EGL
-- Performing Test HAVE_VIDEO_OPENGL_EGL - Success
-- Performing Test HAVE_VIDEO_OPENGLES_V1
-- Performing Test HAVE_VIDEO_OPENGLES_V1 - Success
-- Performing Test HAVE_VIDEO_OPENGLES_V2
-- Performing Test HAVE_VIDEO_OPENGLES_V2 - Success
-- Performing Test HAVE_VIDEO_VIVANTE_VDK
-- Performing Test HAVE_VIDEO_VIVANTE_VDK - Failed
-- Performing Test HAVE_VIDEO_VIVANTE_EGL_FB
-- Performing Test HAVE_VIDEO_VIVANTE_EGL_FB - Failed
-- Checking for modules 'libdrm;gbm;egl'
--   Found libdrm, version 2.4.110
--   Found gbm, version 22.0.5
--   Found egl, version 1.5
-- dynamic libdrm -> libdrm.so.2
-- dynamic libgbm -> libgbm.so.1
-- Performing Test HAVE_INPUT_EVENTS
-- Performing Test HAVE_INPUT_EVENTS - Success
-- Performing Test HAVE_INPUT_KD
-- Performing Test HAVE_INPUT_KD - Success
-- Looking for libudev.h
-- Looking for libudev.h - found
-- Checking for one of the modules 'dbus-1;dbus'
-- Checking for one of the modules 'ibus-1.0;ibus'
-- Looking for fcitx/frontend.h
-- Looking for fcitx/frontend.h - found
-- Performing Test HAVE_INPUT_TSLIB
-- Performing Test HAVE_INPUT_TSLIB - Failed
-- Looking for hid_init in usbhid
-- Looking for hid_init in usbhid - not found
-- Looking for usb.h
-- Looking for usb.h - found
-- Looking for libusb.h
-- Looking for libusb.h - not found
-- Looking for hid_init in usb
-- Looking for hid_init in usb - not found
-- Performing Test HAVE_USBHID
-- Performing Test HAVE_USBHID - Failed
-- Performing Test HAVE_PTHREADS
-- Performing Test HAVE_PTHREADS - Success
-- Performing Test HAVE_RECURSIVE_MUTEXES
-- Performing Test HAVE_RECURSIVE_MUTEXES - Success
-- Performing Test HAVE_PTHREADS_SEM
-- Performing Test HAVE_PTHREADS_SEM - Success
-- Performing Test HAVE_SEM_TIMEDWAIT
-- Performing Test HAVE_SEM_TIMEDWAIT - Success
-- Performing Test HAVE_PTHREAD_NP_H
-- Performing Test HAVE_PTHREAD_NP_H - Failed
-- Looking for pthread_setname_np
-- Looking for pthread_setname_np - found
-- Looking for pthread_set_name_np
-- Looking for pthread_set_name_np - not found
-- Looking for linux/version.h
-- Looking for linux/version.h - found
-- Performing Test HAVE_ENABLE_NEW_DTAGS
-- Performing Test HAVE_ENABLE_NEW_DTAGS - Success
-- 
-- SDL2 was configured with the following options:
-- 
-- Platform: Linux-5.15.0-50-generic
-- 64-bit:   TRUE
-- Compiler: /usr/bin/cc
-- 
-- Subsystems:
--   Atomic:    ON
--   Audio: ON
--   Video: ON
--   Render:    ON
--   Events:    ON
--   Joystick:  ON
--   Haptic:    ON
--   Power: ON
--   Threads:   ON
--   Timers:    ON
--   File:  ON
--   Loadso:    ON
--   CPUinfo:   ON
--   Filesystem:    ON
--   Dlopen:    ON
--   Sensor:    ON
-- 
-- Options:
--   3DNOW                  (Wanted: ON): ON
--   ALSA                   (Wanted: ON): ON
--   ALSA_SHARED            (Wanted: ON): ON
--   ALTIVEC                (Wanted: ON): OFF
--   ARTS                   (Wanted: ON): OFF
--   ARTS_SHARED            (Wanted: ON): OFF
--   ASSEMBLY               (Wanted: ON): ON
--   ASSERTIONS             (Wanted: auto): auto
--   BACKGROUNDING_SIGNAL   (Wanted: OFF): OFF
--   CLOCK_GETTIME          (Wanted: OFF): OFF
--   DIRECTFB_SHARED        (Wanted: OFF): OFF
--   DIRECTX                (Wanted: OFF): OFF
--   DISKAUDIO              (Wanted: ON): ON
--   DUMMYAUDIO             (Wanted: ON): ON
--   ESD                    (Wanted: ON): OFF
--   ESD_SHARED             (Wanted: ON): OFF
--   FOREGROUNDING_SIGNAL   (Wanted: OFF): OFF
--   FUSIONSOUND            (Wanted: OFF): OFF
--   FUSIONSOUND_SHARED     (Wanted: OFF): OFF
--   GCC_ATOMICS            (Wanted: ON): ON
--   HIDAPI                 (Wanted: OFF): OFF
--   INPUT_TSLIB            (Wanted: ON): OFF
--   JACK                   (Wanted: ON): ON
--   JACK_SHARED            (Wanted: ON): ON
--   KMSDRM_SHARED          (Wanted: ON): ON
--   LIBC                   (Wanted: ON): ON
--   LIBSAMPLERATE          (Wanted: ON): ON
--   LIBSAMPLERATE_SHARED   (Wanted: ON): ON
--   MMX                    (Wanted: ON): ON
--   NAS                    (Wanted: ON): ON
--   NAS_SHARED             (Wanted: ON): ON
--   OSS                    (Wanted: ON): ON
--   PTHREADS               (Wanted: ON): ON
--   PTHREADS_SEM           (Wanted: ON): ON
--   PULSEAUDIO             (Wanted: ON): ON
--   PULSEAUDIO_SHARED      (Wanted: ON): ON
--   RENDER_D3D             (Wanted: OFF): OFF
--   RPATH                  (Wanted: ON): ON
--   SDL_DLOPEN             (Wanted: ON): ON
--   SDL_STATIC_PIC         (Wanted: OFF): OFF
--   SDL_TEST               (Wanted: OFF): OFF
--   SNDIO                  (Wanted: ON): ON
--   SSE                    (Wanted: ON): ON
--   SSE2                   (Wanted: ON): ON
--   SSE3                   (Wanted: ON): ON
--   SSEMATH                (Wanted: ON): OFF
--   VIDEO_COCOA            (Wanted: OFF): OFF
--   VIDEO_DIRECTFB         (Wanted: OFF): OFF
--   VIDEO_DUMMY            (Wanted: ON): ON
--   VIDEO_KMSDRM           (Wanted: ON): ON
--   VIDEO_OPENGL           (Wanted: ON): ON
--   VIDEO_OPENGLES         (Wanted: ON): ON
--   VIDEO_RPI              (Wanted: ON): OFF
--   VIDEO_VIVANTE          (Wanted: ON): OFF
--   VIDEO_VULKAN           (Wanted: OFF): OFF
--   VIDEO_WAYLAND          (Wanted: OFF): OFF
--   VIDEO_WAYLAND_QT_TOUCH (Wanted: OFF): OFF
--   VIDEO_X11              (Wanted: ON): ON
--   VIDEO_X11_XCURSOR      (Wanted: ON): ON
--   VIDEO_X11_XINERAMA     (Wanted: ON): ON
--   VIDEO_X11_XINPUT       (Wanted: ON): ON
--   VIDEO_X11_XRANDR       (Wanted: ON): ON
--   VIDEO_X11_XSCRNSAVER   (Wanted: ON): ON
--   VIDEO_X11_XSHAPE       (Wanted: ON): ON
--   VIDEO_X11_XVM          (Wanted: ON): ON
--   WASAPI                 (Wanted: OFF): OFF
--   WAYLAND_SHARED         (Wanted: OFF): OFF
--   X11_SHARED             (Wanted: ON): ON
-- 
--  CFLAGS:         -idirafter /home/bram/src/lobster/dev/external/SDL/src/video/khronos -DHAVE_LINUX_VERSION_H
--  EXTRA_CFLAGS:  -I/usr/include/libdrm -I/usr/include -D_REENTRANT -msse3 -msse2 -msse -m3dnow -mmmx -Wshadow -fvisibility=hidden -Wdeclaration-after-statement -Werror=declaration-after-statement -fno-strict-aliasing -Wall 
--  EXTRA_LDFLAGS: -Wl,--no-undefined;-pthread
--  EXTRA_LIBS:    m;/usr/lib/x86_64-linux-gnu/libsndio.so;dbus-1;ibus-1.0;gio-2.0;gobject-2.0;glib-2.0
-- 
--  Build Shared Library: OFF
--  Build Static Library: ON
--  Build Static Library with Position Independent Code: OFF
-- 
-- If something was not detected, although the libraries
-- were installed, then make sure you have set the
-- CFLAGS and LDFLAGS environment variables correctly.
-- 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so   
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bram/src/lobster/build
stolk commented 1 year ago

Same results when using clang-13 instead of gcc-11.

Note: unit test is skipped when building RELEASE, so I am guessing most people never build as DEBUG? I will make a PR for this.

aardappel commented 1 year ago

Well that is curious, the code does:

    #ifndef __APPLE__  // Apple Clang, unlike Clang on Linux and all other compilers, decides to ignore pragma pack?
        assert(sizeof(small_vector<int, 2>) == 12);
    #endif

that code relies on #pragma pack(push, 2) doing the right thing, which has worked for Clang 12 and GCC 10.. are these newer compilers suddenly agreeing to ignore it?

aardappel commented 1 year ago

Ah our CI does run in Release, maybe it never worked..

stolk commented 1 year ago

This should have fired on windows, too.

struct packing rules in C:

For struct, other than the alignment need for each individual member, the size of whole struct itself will be aligned to a size divisible by strictest alignment requirement of any of its members, by padding at end.

I added a linux check to the APPLE one, but frankly, I would just remove the entire assert?

Visual C++ should have tripped on this too?

aardappel commented 1 year ago

VC++ still does work as intended, but yeah we can comment out the entire assert for now.. I'll need to think of a different way of doing this or just give up on trying to save 4 bytes :)

aardappel commented 1 year ago

Fixed here: https://github.com/aardappel/lobster/commit/3b2deb5289b87a8f1a67ef01ac0c448549b558b9