2016-09-10 25 views
5

Znalazłem błąd w GCC 6 i 7 (nie w GCC 5) wewnątrz funkcji constexpr, co prowadzi do różnych wyników, jeśli funkcja zostanie oceniona w czasie kompilacji (zły wynik) lub środowisko wykonawcze (poprawny wynik).GCC Bug - Dostęp do tablicy w/constrepr w 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; 
} 

Live Example

Problemem jest przyrost (dzieje się również ubytek) czynności wewnątrz dostępu do tablicy.

Wynik czasu kompilacji wyrażenia stałowego wynosi 0 (niepoprawnie), a wynik w czasie wykonywania to 1 (poprawny).

Czy ktoś może potwierdzić ten błąd i zgłosić to: https://gcc.gnu.org/bugzilla/

Nie mogę utworzyć tam User account creation has been restricted. konto. Skontaktowałem się z administratorem, ale błąd dla mnie jest istotny dla krytyki. Tak więc chciałem Cię również poinformować. Dziękuję Ci!

Odpowiedz