[VC8][VC9][BUG] ошибка оптимизатора, libpng affected
От: Alexander G Украина  
Дата: 22.02.10 16:58
Оценка: 167 (14) +2
Минимальный пример, собирать с дефолтными настройками релиза, т.е. с оптимизацией и с /LTCG
"Hello world" пишется два раза.

__declspec(noinline) void test(size_t s)
{
  if (1 > s)
    printf("Hello world\n");
}

void zero()
{
  test(0);
}

void full()
{
  test(1);
}

int main()
{
  zero();
  full();
}


Это место в libpng:

void PNGAPI
png_info_init_3(png_infopp ptr_ptr, png_size_t png_info_struct_size)
{
   png_infop info_ptr = *ptr_ptr;

   if (info_ptr == NULL) return;

   png_debug(1, "in png_info_init_3");

   if (png_sizeof(png_info) > png_info_struct_size) // всегда выполняется в релизе
     {
       png_destroy_struct(info_ptr); // и вот это нам явно не подходит, если менеджер памяти подменен
       info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO);
       *ptr_ptr = info_ptr;
     }

   /* set everything to 0 */
   png_memset(info_ptr, 0, png_sizeof(png_info));
}
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.