• Davi Arnaut's avatar
    Bug#42733: Type-punning warnings when compiling MySQL -- · f317d3a6
    Davi Arnaut authored
               strict aliasing violations.
    
    Another rather noisy violation of strict aliasing rules
    is the spatial code which makes use of stack-based memory
    (of type Geometry_buffer) to provide placement for Geometry
    objects. Although a placement new is allowed to dynamically
    change the type of a object, the object returned by the
    new placement was being ignored and the original stack-based
    object was being casted to the new type, thus violating strict
    aliasing rules.
    
    The solution is to reorganize the code so that the object
    returned by the new placement is used instead of casting the
    original object. Also, to ensure that the stack-based object
    is properly aligned with respect to the objects it provides
    placement for, a set of compiler-dependent macros and types
    are introduced so that the alignment of objects can be inquired
    and specified.
    
    include/Makefile.am:
      Add new header.
    include/my_compiler.h:
      Add new header.
    include/my_global.h:
      Remove now-unnecessary macros.
    sql/spatial.cc:
      Make object creation functions return the object whose type
      was dynamically changed by the new placement.
      
      Move static method from the header in order to avoid having
      to access a forward declaration.
    sql/spatial.h:
      Object creation callbacks now take a array of chars as the
      storage area.
      
      Move create_by_typeid to a source file as to not access the
      forward declaration of Geometry_buffer.
      
      Ensure that Geometry_buffer is properly aligned.
    sql/sql_show.cc:
      Use newly added aligned storage helper.
    f317d3a6
my_compiler.h 3.48 KB