[devel] slang2 (Re: rpm-build и не самый последний gcc)

Aleksei Nikiforov darktemplar на altlinux.org
Вт Мар 26 15:04:03 MSK 2019


26.03.2019 13:52, Sergey Afonin пишет:
> On Tuesday 26 March 2019, Aleksei Nikiforov wrote:
> 
>> Какие-нибудь предупреждения при сборке этих непроходящих тестов есть?
> 
> У тестов нет. А вот у slang есть два:
> src/slang.c:5743:9: warning: 'test' may be used uninitialized in this function [-Wmaybe-uninitialized]
> src/slarrfun.c:966:7: warning: 'w[<unknown>]' may be used uninitialized in this function [-Wmaybe-uninitialized]
> 
> Тесты падающие такие:
> 2 tests failed:  array.sl array.slc
> 
> И оба в одном месте:
> 
> Testing array functions ...Unable to create a multi-dimensional array of the desired size
> ./array.sl:166:<top-level>:Invalid Parameter
> 
> Вообще, какая-то корреляция между название slarrfun и названиями
> тестов есть. Строка там "wk = w[k];", на первый взгляд мне не очень
> понятно, чем там k не нравится. Вроде нулём инициализируется, потом
> есть присвоение
> 
>          if (use_this_dim != NULL)
>            {
>               k = *use_this_dim;
>               use_all_dims = 0;
>            }
> 
> Но я не программист, если что-то есть неочевидное, сходу могу и не
> увидеть.
> 

Вполне возможно, что k >= old_num_dims может быть при некоторых 
условиях, тогда w[k] действительно не будет инициализировано. Но даже 
исправление этого предупреждения может не помочь.

Посмотрел array.sl, на строке 166:

    SS = Long_Type[10000,10000,10000,10000,10000,10000];

Если я правильно понял, это создание многомерного массива размером 
10000x10000x10000x10000x10000x10000x10000. Суммарный размер массива 
является числом, которое не влезет в 32 бита. Возможно, где-то при 
расчёте размера массива идут целочисленные переполнения или ещё что-то, 
и gcc-8 может сгенерировать код, поведение которого отличается от кода, 
сгенерированного с помощью gcc-7.

>> А если выкрутить предупреждения на максимум?
> 
> Пока не пробовал.
> 


Подробная информация о списке рассылки Devel