diff --git a/ldpc_decoder.hh b/ldpc_decoder.hh index 010ae96..c5c52a9 100644 --- a/ldpc_decoder.hh +++ b/ldpc_decoder.hh @@ -117,7 +117,7 @@ class LDPCDecoder int cnt = cnc[i]; int deg = cnt + 2; for (int j = 0; j < W; ++j) { - TYPE mags[deg], inps[deg]; + TYPE mags[CNC+2], inps[CNC+2]; TYPE min0 = vdup(127); TYPE min1 = vdup(127); TYPE signs = vdup(127); @@ -236,7 +236,7 @@ public: Loc *lo = loc; for (int i = 0; i < q; ++i) { int cnt = cnc[i]; - int offset[cnt], shift[cnt]; + int offset[CNC], shift[CNC]; for (int c = 0; c < cnt; ++c) { shift[c] = pos[CNC*i+c] % M; offset[c] = pos[CNC*i+c] - shift[c]; diff --git a/ldpc_encoder.hh b/ldpc_encoder.hh index 32dea6e..c5b5d6d 100644 --- a/ldpc_encoder.hh +++ b/ldpc_encoder.hh @@ -41,7 +41,7 @@ public: } for (int i = 0; i < q; ++i) { int cnt = cnc[i]; - int offset[cnt], shift[cnt]; + int offset[CNC], shift[CNC]; for (int c = 0; c < cnt; ++c) { shift[c] = pos[CNC*i+c] % M; offset[c] = pos[CNC*i+c] - shift[c]; diff --git a/pac_list_decoder.hh b/pac_list_decoder.hh index 9aef402..ec4eae8 100644 --- a/pac_list_decoder.hh +++ b/pac_list_decoder.hh @@ -32,7 +32,7 @@ struct PACListLeaf { TYPE sft = soft[1]; for (int k = 0; k < TYPE::SIZE; ++k) - if (conv(state+k, 0) != sft.v[k] < 0) + if (conv(state+k, 0) != (sft.v[k] < 0)) metric[k] += std::abs(sft.v[k]); TYPE hrd; for (int k = 0; k < TYPE::SIZE; ++k) @@ -53,7 +53,7 @@ struct PACListLeaf for (int k = 0; k < TYPE::SIZE; ++k) sfork[2*k] = sfork[2*k+1] = state[k]; for (int k = 0; k < 2*TYPE::SIZE; ++k) - if (conv(sfork+k, k&1) != sft.v[k>>1] < 0) + if (conv(sfork+k, k&1) != (sft.v[k>>1] < 0)) mfork[k] += std::abs(sft.v[k>>1]); int perm[2*TYPE::SIZE]; CODE::insertion_sort(perm, mfork, 2*TYPE::SIZE); diff --git a/reed_solomon_error_correction.hh b/reed_solomon_error_correction.hh index 4796adf..edc8008 100644 --- a/reed_solomon_error_correction.hh +++ b/reed_solomon_error_correction.hh @@ -16,7 +16,7 @@ struct Chien typedef typename GF::IndexType IndexType; static int search(const ValueType *locator, int locator_degree, IndexType *locations) { - ValueType tmp[locator_degree+1]; + ValueType tmp[NR+1]; for (int i = 0; i <= locator_degree; ++i) tmp[i] = locator[i]; int count = 0; diff --git a/tests/bch_regression_test.cc b/tests/bch_regression_test.cc index 706c8ea..958a507 100644 --- a/tests/bch_regression_test.cc +++ b/tests/bch_regression_test.cc @@ -25,10 +25,10 @@ void bch_test(ENC *encode, DEC *decode, int trials) int data_len = rnd_len(); auto rnd_pos = std::bind(distribution(0, data_len + ENC::NP - 1), generator); int D = (data_len + 7) / 8; - uint8_t data[D], orig_data[D]; + uint8_t data[ENC::K], orig_data[ENC::K]; for (int i = 0; i < D; ++i) data[i] = orig_data[i] = rnd_val(); - int P = (ENC::NP + 7) / 8; + const int P = (ENC::NP + 7) / 8; uint8_t parity[P]; (*encode)(data, parity, data_len); for (int i = 0; i < D; ++i) @@ -53,7 +53,7 @@ void bch_test(ENC *encode, DEC *decode, int trials) CODE::xor_be_bit(parity, pos-data_len, 1); } int erasures_count = DEC::NR - 2 * error_count; - typename DEC::value_type erasures[erasures_count]; + typename DEC::value_type erasures[DEC::NR]; for (int i = 0; i < erasures_count; ++i) { int pos = rnd_pos(); for (int j = 0; j < error_count + i; ++j) { @@ -90,7 +90,7 @@ void bch_reference_test(ENC *encode, DEC *decode, int trials) while (--trials) { int data_len = rnd_len(); auto rnd_pos = std::bind(distribution(0, data_len + ENC::NP - 1), generator); - typename ENC::value_type data[data_len], orig_data[data_len]; + typename ENC::value_type data[ENC::K], orig_data[ENC::K]; for (int i = 0; i < data_len; ++i) data[i] = orig_data[i] = rnd_val(); typename ENC::value_type parity[ENC::NP]; @@ -117,7 +117,7 @@ void bch_reference_test(ENC *encode, DEC *decode, int trials) parity[pos-data_len] ^= 1; } int erasures_count = ENC::NR - 2 * error_count; - typename ENC::value_type erasures[erasures_count]; + typename ENC::value_type erasures[ENC::NR]; for (int i = 0; i < erasures_count; ++i) { int pos = rnd_pos(); for (int j = 0; j < error_count + i; ++j) { diff --git a/tests/rs_regression_test.cc b/tests/rs_regression_test.cc index be91edb..db8f3cc 100644 --- a/tests/rs_regression_test.cc +++ b/tests/rs_regression_test.cc @@ -24,7 +24,7 @@ void rs_test(ENC *encode, DEC *decode, int trials) while (--trials) { int data_len = rnd_len(); auto rnd_pos = std::bind(distribution(0, data_len + ENC::NP - 1), generator); - typename ENC::value_type data[data_len], orig_data[data_len]; + typename ENC::value_type data[ENC::K], orig_data[ENC::K]; for (int i = 0; i < data_len; ++i) data[i] = orig_data[i] = rnd_val(); typename ENC::value_type parity[ENC::NP]; @@ -51,7 +51,7 @@ void rs_test(ENC *encode, DEC *decode, int trials) parity[pos-data_len] = rnd_val(); } int erasures_count = ENC::NR - 2 * error_count; - typename ENC::value_type erasures[erasures_count]; + typename ENC::value_type erasures[ENC::NR]; for (int i = 0; i < erasures_count; ++i) { int pos = rnd_pos(); for (int j = 0; j < error_count + i; ++j) { diff --git a/tests/xorshift_test.cc b/tests/xorshift_test.cc index f929678..528bc71 100644 --- a/tests/xorshift_test.cc +++ b/tests/xorshift_test.cc @@ -4,6 +4,7 @@ Test for xorshift Copyright 2025 Ahmet Inan */ +#include #include #include #include "xorshift.hh"