2016-09-10 17 views
5

Tôi tìm thấy lỗi trong GCC 6 và 7 (không phải trong GCC 5) bên trong hàm constexpr, dẫn đến kết quả khác nhau nếu hàm được đánh giá tại thời gian biên dịch (kết quả sai) hoặc thời gian chạy (kết quả chính xác).Lỗi GCC - Truy cập mảng vào/giảm trong 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

Vấn đề là thặng dư (cũng xảy ra đối với giảm) hoạt động bên trong truy cập mảng.

Kết quả thời gian biên dịch của biểu thức liên tục là 0 (sai) và kết quả thời gian chạy là 1 (đúng).

bất cứ ai có thể xác nhận lỗi này và báo cáo này để: https://gcc.gnu.org/bugzilla/

tôi không thể tạo một tài khoản có User account creation has been restricted.. Tôi liên lạc với quản trị viên, nhưng lỗi cho tôi là vấn đề quan trọng. Vì vậy, nó cũng muốn thông báo cho bạn. Cảm ơn bạn!

Trả lời

Các vấn đề liên quan