GCC Bug — In / Decrement доступ к массиву в constexpr

Я обнаружил ошибку в GCC 6 и 7 (не в GCC 5) внутри функций constexpr, которая приводит к разным результатам, если функция получает оценки во время компиляции (неверный результат) или во время выполнения (правильный результат).

#include <iostream>

constexpr int bar(int *b) {
int i = 0;
b[i++] = 1; // GCC produce here an failure.

return 0;
}

constexpr int foo()
{
int tmp[] = {0};
bar(tmp);

return tmp[0];
}

constexpr int cexprI = foo();

int main()
{
std::cout << cexprI << " " << foo() << "\n";

return 0;
}

Живой пример

Проблема заключается в операции увеличения (также происходит для уменьшения) внутри доступа к массиву.

Результат времени компиляции константного выражения равен 0 (неверно), а результат времени выполнения равен 1 (правильно).

Может ли кто-нибудь подтвердить эту ошибку и сообщить об этом: https://gcc.gnu.org/bugzilla/

Я не могу создать там аккаунт User account creation has been restricted., Я связался с администратором, но ошибка для меня является серьезной для критической. Так что он хотел также сообщить вам. Спасибо!

5

Решение

Я открыла https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77553 .
Спасибо за сообщение о проблеме.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]