[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