Skip to content
  • Danylo Piliaiev's avatar
    glsl/list: Fix undefined behaviour of foreach_* macros · 600c91fe
    Danylo Piliaiev authored
    
    
    These macros produced a lot of errors with ubsan preventing us from
    expanding the ubsan coverage on CIs.
    
    C++ spec has such clause:
    
     "If the prvalue of type "pointer to cv1 B" points to a B that is
      actually a subobject of an object of type D, the resulting pointer
      points to the enclosing object of type D. Otherwise, the result
      of the cast is undefined."
    
    Ubsan error example:
    
     ../src/compiler/glsl/builtin_functions.cpp:4945:4: runtime error: downcast of address 0x559b926abb50 which does not point to an object of type 'ir_instruction'
     0x559b926abb50: note: object has invalid vptr
      9b 55 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  58 ba 6a 92 9b 55 00 00  01 00 00 00
                   ^~~~~~~~~~~~~~~~~~~~~~~
                   invalid vptr
         #0 0x559b914dbe1a in call ../src/compiler/glsl/builtin_functions.cpp:4945
    
    Signed-off-by: default avatarDanylo Piliaiev <danylo.piliaiev@globallogic.com>
    Acked-by: default avatarMatt Turner <mattst88@gmail.com>
    Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4129>
    600c91fe