blob: 950b46e759b3a6c439388d29937c54bd555af422 [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-O3 -std=c++11" } */
extern "C" int printf(const char *fmt, ...);
extern "C" void abort(void);
struct Side {
enum _Value { Left, Right, Invalid };
constexpr Side() : _value(Invalid) {}
constexpr Side(_Value value) : _value(value) {}
operator _Value() const { return (_Value)_value; }
private:
char _value;
};
struct A {
void init();
void adjust(Side side, bool final);
void move(Side side);
};
void A::init()
{
adjust(Side::Invalid, false);
}
static void __attribute__((noinline))
check (int v, int final)
{
if (v != 0)
abort();
}
__attribute__((noinline))
void A::adjust(Side side, bool final)
{
check ((int)side, final);
}
void A::move(Side side)
{
adjust(side, false);
adjust(side, true);
}
int main()
{
A t;
t.move(Side::Left);
return 0;
}