• Davi Arnaut's avatar
    Bug#42733: Type-punning warnings when compiling MySQL -- · 0f9ddfa9
    Davi Arnaut authored
                strict aliasing violations.
    
    One somewhat major source of strict-aliasing violations and
    related warnings is the SQL_LIST structure. For example,
    consider its member function `link_in_list` which takes
    a pointer to pointer of type T (any type) as a pointer to
    pointer to unsigned char. Dereferencing this pointer, which
    is done to reset the next field, violates strict-aliasing
    rules and might cause problems for surrounding code that
    uses the next field of the object being added to the list.
    
    The solution is to use templates to parametrize the SQL_LIST
    structure in order to deference the pointers with compatible
    types. As a side bonus, it becomes possible to remove quite
    a few casts related to acessing data members of SQL_LIST.
    
    sql/handler.h:
      Use the appropriate template type argument.
    sql/item.cc:
      Remove now-unnecessary cast.
    sql/item_subselect.cc:
      Remove now-unnecessary casts.
    sql/item_sum.cc:
      Use the appropriate template type argument.
      Remove now-unnecessary cast.
    sql/mysql_priv.h:
      Move SQL_LIST structure to sql_list.h
      Use the appropriate template type argument.
    sql/sp.cc:
      Remove now-unnecessary casts.
    sql/sql_delete.cc:
      Use the appropriate template type argument.
      Remove now-unnecessary casts.
    sql/sql_derived.cc:
      Remove now-unnecessary casts.
    sql/sql_lex.cc:
      Remove now-unnecessary casts.
    sql/sql_lex.h:
      SQL_LIST now takes a template type argument which must
      match the type of the elements of the list. Use forward
      declaration when the type is not available, it is used
      in pointers anyway.
    sql/sql_list.h:
      Rename SQL_LIST to SQL_I_List. The template parameter is
      the type of object that is stored in the list.
    sql/sql_olap.cc:
      Remove now-unnecessary casts.
    sql/sql_parse.cc:
      Remove now-unnecessary casts.
    sql/sql_prepare.cc:
      Remove now-unnecessary casts.
    sql/sql_select.cc:
      Remove now-unnecessary casts.
    sql/sql_show.cc:
      Remove now-unnecessary casts.
    sql/sql_table.cc:
      Remove now-unnecessary casts.
    sql/sql_trigger.cc:
      Remove now-unnecessary casts.
    sql/sql_union.cc:
      Remove now-unnecessary casts.
    sql/sql_update.cc:
      Remove now-unnecessary casts.
    sql/sql_view.cc:
      Remove now-unnecessary casts.
    sql/sql_yacc.yy:
      Remove now-unnecessary casts.
    storage/myisammrg/ha_myisammrg.cc:
      Remove now-unnecessary casts.
    0f9ddfa9
sql_list.h 16.7 KB