GCC now compiles AND evaluates constexpr during compilation.

This commit is contained in:
Camille Monière 2022-02-14 12:13:43 +01:00
parent 9e21f49577
commit e3f9a2e1e5
Signed by: moniere
GPG key ID: 188DD5B072181C0F
2 changed files with 6 additions and 5 deletions

View file

@ -25,7 +25,7 @@ class CCordicRotateRomHalfPi {
static_assert(TNStages > 1, "2 stages of CORDIC is the minimum."); static_assert(TNStages > 1, "2 stages of CORDIC is the minimum.");
public: public:
static constexpr const CRomGeneratorConst<TIn_W, TNStages, Tq> & rom_cordic = CRomGeneratorConst<TIn_W, TNStages, Tq>(); static constexpr const CRomGeneratorConst<TIn_W, TNStages, Tq> & rom_cordic{};
static constexpr unsigned In_W = TIn_W; static constexpr unsigned In_W = TIn_W;
static constexpr unsigned In_I = TIn_I; static constexpr unsigned In_I = TIn_I;

View file

@ -317,9 +317,10 @@ TEST_CASE("ROM-based Cordic constexpr are evaluated during compilation.", "[CORD
double results_re[n_lines]; double results_re[n_lines];
double results_im[n_lines]; double results_im[n_lines];
constexpr complex<int64_t> res = cordic.cordic(value_in, angle); constexpr complex<int64_t> res1 = cordic.cordic(value_in, angle);
static_assert(res == cordic.cordic(value_in, angle), "Test"); constexpr complex<int64_t> res2 = cordic.cordic(value_in, angle);
REQUIRE_FALSE(res == cordic.cordic(complex<int64_t>(1, 0), angle)); static_assert(res1 == res2, "Test");
REQUIRE(res == cordic.cordic(value_in, angle)); REQUIRE_FALSE(res1 == cordic.cordic(complex<int64_t>(1, 0), angle));
REQUIRE(res1 == cordic.cordic(value_in, angle));
} }
} }