155 changes: 0 additions & 155 deletions clang/test/AST/Interp/literals.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -469,160 +469,5 @@ namespace IncDec {
return (a -= a);
}
static_assert(subAll(213) == 0, "");

constexpr bool BoolOr(bool b1, bool b2) {
bool a;
a = b1;
a |= b2;
return a;
}
static_assert(BoolOr(true, true), "");
static_assert(BoolOr(true, false), "");
static_assert(BoolOr(false, true), "");
static_assert(!BoolOr(false, false), "");

constexpr int IntOr(unsigned a, unsigned b) {
unsigned r;
r = a;
r |= b;
return r;
}
static_assert(IntOr(10, 1) == 11, "");
static_assert(IntOr(1337, -1) == -1, "");
static_assert(IntOr(0, 12) == 12, "");

constexpr bool BoolAnd(bool b1, bool b2) {
bool a;
a = b1;
a &= b2;
return a;
}
static_assert(BoolAnd(true, true), "");
static_assert(!BoolAnd(true, false), "");
static_assert(!BoolAnd(false, true), "");
static_assert(!BoolAnd(false, false), "");

constexpr int IntAnd(unsigned a, unsigned b) {
unsigned r;
r = a;
r &= b;
return r;
}
static_assert(IntAnd(10, 1) == 0, "");
static_assert(IntAnd(1337, -1) == 1337, "");
static_assert(IntAnd(0, 12) == 0, "");

constexpr bool BoolXor(bool b1, bool b2) {
bool a;
a = b1;
a ^= b2;
return a;
}
static_assert(!BoolXor(true, true), "");
static_assert(BoolXor(true, false), "");
static_assert(BoolXor(false, true), "");
static_assert(!BoolXor(false, false), "");

constexpr int IntXor(unsigned a, unsigned b) {
unsigned r;
r = a;
r ^= b;
return r;
}
static_assert(IntXor(10, 1) == 11, "");
static_assert(IntXor(10, 10) == 0, "");
static_assert(IntXor(12, true) == 13, "");

constexpr bool BoolRem(bool b1, bool b2) {
bool a;
a = b1;
a %= b2;
return a;
}
static_assert(!BoolRem(true, true), "");
static_assert(!BoolRem(false, true), "");

constexpr int IntRem(int a, int b) {
int r;
r = a;
r %= b; // expected-note {{division by zero}} \
// ref-note {{division by zero}} \
// expected-note {{outside the range of representable values}} \
// ref-note {{outside the range of representable values}}
return r;
}
static_assert(IntRem(2, 2) == 0, "");
static_assert(IntRem(2, 1) == 0, "");
static_assert(IntRem(9, 7) == 2, "");
static_assert(IntRem(5, 0) == 0, ""); // expected-error {{not an integral constant expression}} \
// expected-note {{in call to 'IntRem(5, 0)'}} \
// ref-error {{not an integral constant expression}} \
// ref-note {{in call to 'IntRem(5, 0)'}}

static_assert(IntRem(INT_MIN, -1) == 0, ""); // expected-error {{not an integral constant expression}} \
// expected-note {{in call to 'IntRem}} \
// ref-error {{not an integral constant expression}} \
// ref-note {{in call to 'IntRem}}



constexpr bool BoolDiv(bool b1, bool b2) {
bool a;
a = b1;
a /= b2;
return a;
}
static_assert(BoolDiv(true, true), "");
static_assert(!BoolDiv(false, true), "");

constexpr int IntDiv(int a, int b) {
int r;
r = a;
r /= b; // expected-note {{division by zero}} \
// ref-note {{division by zero}} \
// expected-note {{outside the range of representable values}} \
// ref-note {{outside the range of representable values}}
return r;
}
static_assert(IntDiv(2, 2) == 1, "");
static_assert(IntDiv(12, 20) == 0, "");
static_assert(IntDiv(2, 1) == 2, "");
static_assert(IntDiv(9, 7) == 1, "");
static_assert(IntDiv(5, 0) == 0, ""); // expected-error {{not an integral constant expression}} \
// expected-note {{in call to 'IntDiv(5, 0)'}} \
// ref-error {{not an integral constant expression}} \
// ref-note {{in call to 'IntDiv(5, 0)'}}

static_assert(IntDiv(INT_MIN, -1) == 0, ""); // expected-error {{not an integral constant expression}} \
// expected-note {{in call to 'IntDiv}} \
// ref-error {{not an integral constant expression}} \
// ref-note {{in call to 'IntDiv}}

constexpr bool BoolMul(bool b1, bool b2) {
bool a;
a = b1;
a *= b2;
return a;
}
static_assert(BoolMul(true, true), "");
static_assert(!BoolMul(true, false), "");
static_assert(!BoolMul(false, true), "");
static_assert(!BoolMul(false, false), "");

constexpr int IntMul(int a, int b) {
int r;
r = a;
r *= b; // expected-note {{is outside the range of representable values of type 'int'}} \
// ref-note {{is outside the range of representable values of type 'int'}}
return r;
}
static_assert(IntMul(2, 2) == 4, "");
static_assert(IntMul(12, 20) == 240, "");
static_assert(IntMul(2, 1) == 2, "");
static_assert(IntMul(9, 7) == 63, "");
static_assert(IntMul(INT_MAX, 2) == 0, ""); // expected-error {{not an integral constant expression}} \
// expected-note {{in call to 'IntMul}} \
// ref-error {{not an integral constant expression}} \
// ref-note {{in call to 'IntMul}}
};
#endif