http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57557
Bug ID: 57557
Summary: can't reference static const int member with
optimizations on
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: pavel.v.chupin at gmail dot com
Test case:
#include <iostream>
using namespace std;
template<class A, class B> bool Compare_GT(const A &a, const B &b) { if (a > b)
return true; else return false; }
struct A {
bool foo(int a) {
Compare_GT(VARIABLE, a);
}
private:
static const int VARIABLE;
};
const int A::VARIABLE = 30;
int main() {
A *obj;
// cout << "30>20 ? " << obj->foo(20) << "\n";
// cout << "30>40 ? " << obj->foo(40) << "\n";
return !obj->foo(20);
}
Compiled with -O1 and higher produce:
$ g++ -O1 t.cpp; ./a.out ; echo $?
1
000000000040068c <main>:
40068c: b8 01 00 00 00 mov $0x1,%eax
400691: c3 retq
If compiled with -O0 code is correct and test returns 0:
$ g++ -O0 t.cpp; ./a.out ; echo $?
0
Is it a bug or some sort of undefined behavior by standard?