[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master cc85be94 6/8: Resolve another issue identifie
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master cc85be94 6/8: Resolve another issue identified by UBSAN |
Date: |
Mon, 6 Jun 2022 18:40:33 -0400 (EDT) |
branch: master
commit cc85be945f46bbb4f0948cf322f9ccaa792b2565
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Resolve another issue identified by UBSAN
See:
https://lists.nongnu.org/archive/html/lmi/2022-06/msg00007.html
| The field is initialized once mec_state ctor finishes executing. But the
| "uninitialized" access happens while it's executing and, in fact, while
| it's initializing the field. This explains why it's not really a problem:
| the field will get initialized during the very next access, but reading it
| initially in any_member.hpp uses the value that hasn't been initialized
| just yet.
Although UBSAN found a problem in only one of these files, that's just
because the other isn't used in any unit test, and UBSAN has so far been
used only with unit tests.
---
gpt_state.hpp | 144 +++++++++++++++++++++++++++++-----------------------------
mec_state.hpp | 126 +++++++++++++++++++++++++-------------------------
2 files changed, 135 insertions(+), 135 deletions(-)
diff --git a/gpt_state.hpp b/gpt_state.hpp
index 749115ee..c889b022 100644
--- a/gpt_state.hpp
+++ b/gpt_state.hpp
@@ -69,78 +69,78 @@ class LMI_SO gpt_state final
// xml_serializable overrides.
bool is_detritus(std::string const&) const override;
- int B0_deduced_policy_year;
- int B1_deduced_contract_year;
- double B2_deduced_px7_rate;
- double B3_deduced_nsp_rate;
- double B4_deduced_target_premium;
- double B5_deduced_target_load;
- double B6_deduced_excess_load;
-
- double C0_init_bft;
- double C1_init_ldb;
- double C2_init_amt_pd;
- bool C3_init_is_mc;
- double C4_init_dcv;
- double C5_init_px7;
- bool C6_init_mec;
-
- double D0_incr_bft;
- double D1_incr_ldb;
- double D2_incr_amt_pd;
- bool D3_incr_is_mc;
- double D4_incr_dcv;
- double D5_incr_px7;
- bool D6_incr_mec;
-
- double E0_decr_bft;
- double E1_decr_ldb;
- double E2_decr_amt_pd;
- bool E3_decr_is_mc;
- double E4_decr_dcv;
- double E5_decr_px7;
- bool E6_decr_mec;
-
- double F0_nec_pm_bft;
- double F1_nec_pm_ldb;
- double F2_nec_pm_amt_pd;
- bool F3_nec_pm_is_mc;
- double F4_nec_pm_dcv;
- double F5_nec_pm_px7;
- bool F6_nec_pm_mec;
-
- double G0_do_mc_bft;
- double G1_do_mc_ldb;
- double G2_do_mc_amt_pd;
- bool G3_do_mc_is_mc;
- double G4_do_mc_dcv;
- double G5_do_mc_px7;
- bool G6_do_mc_mec;
-
- double H0_unnec_pm_bft;
- double H1_unnec_pm_ldb;
- double H2_unnec_pm_amt_pd;
- bool H3_unnec_pm_is_mc;
- double H4_unnec_pm_dcv;
- double H5_unnec_pm_px7;
- bool H6_unnec_pm_mec;
-
- double Q0_net_1035;
- double Q1_max_nec_prem_net;
- double Q2_max_nec_prem_gross;
- double Q3_cv_before_last_mc;
- double Q4_cum_px7;
- double Q5_cum_amt_pd;
- double Q6_max_non_mec_prem;
-
- double X0_glp;
- double X1_gsp;
- double X2_glp_a;
- double X3_gsp_a;
- double X4_glp_b;
- double X5_gsp_b;
- double X6_glp_c;
- double X7_gsp_c;
+ int B0_deduced_policy_year {0};
+ int B1_deduced_contract_year {0};
+ double B2_deduced_px7_rate {0.0};
+ double B3_deduced_nsp_rate {0.0};
+ double B4_deduced_target_premium {0.0};
+ double B5_deduced_target_load {0.0};
+ double B6_deduced_excess_load {0.0};
+
+ double C0_init_bft {0.0};
+ double C1_init_ldb {0.0};
+ double C2_init_amt_pd {0.0};
+ bool C3_init_is_mc {false};
+ double C4_init_dcv {0.0};
+ double C5_init_px7 {0.0};
+ bool C6_init_mec {false};
+
+ double D0_incr_bft {0.0};
+ double D1_incr_ldb {0.0};
+ double D2_incr_amt_pd {0.0};
+ bool D3_incr_is_mc {false};
+ double D4_incr_dcv {0.0};
+ double D5_incr_px7 {0.0};
+ bool D6_incr_mec {false};
+
+ double E0_decr_bft {0.0};
+ double E1_decr_ldb {0.0};
+ double E2_decr_amt_pd {0.0};
+ bool E3_decr_is_mc {false};
+ double E4_decr_dcv {0.0};
+ double E5_decr_px7 {0.0};
+ bool E6_decr_mec {false};
+
+ double F0_nec_pm_bft {0.0};
+ double F1_nec_pm_ldb {0.0};
+ double F2_nec_pm_amt_pd {0.0};
+ bool F3_nec_pm_is_mc {false};
+ double F4_nec_pm_dcv {0.0};
+ double F5_nec_pm_px7 {0.0};
+ bool F6_nec_pm_mec {false};
+
+ double G0_do_mc_bft {0.0};
+ double G1_do_mc_ldb {0.0};
+ double G2_do_mc_amt_pd {0.0};
+ bool G3_do_mc_is_mc {false};
+ double G4_do_mc_dcv {0.0};
+ double G5_do_mc_px7 {0.0};
+ bool G6_do_mc_mec {false};
+
+ double H0_unnec_pm_bft {0.0};
+ double H1_unnec_pm_ldb {0.0};
+ double H2_unnec_pm_amt_pd {0.0};
+ bool H3_unnec_pm_is_mc {false};
+ double H4_unnec_pm_dcv {0.0};
+ double H5_unnec_pm_px7 {0.0};
+ bool H6_unnec_pm_mec {false};
+
+ double Q0_net_1035 {0.0};
+ double Q1_max_nec_prem_net {0.0};
+ double Q2_max_nec_prem_gross {0.0};
+ double Q3_cv_before_last_mc {0.0};
+ double Q4_cum_px7 {0.0};
+ double Q5_cum_amt_pd {0.0};
+ double Q6_max_non_mec_prem {0.0};
+
+ double X0_glp {0.0};
+ double X1_gsp {0.0};
+ double X2_glp_a {0.0};
+ double X3_gsp_a {0.0};
+ double X4_glp_b {0.0};
+ double X5_gsp_b {0.0};
+ double X6_glp_c {0.0};
+ double X7_gsp_c {0.0};
};
#endif // gpt_state_hpp
diff --git a/mec_state.hpp b/mec_state.hpp
index 997b952d..07f577c3 100644
--- a/mec_state.hpp
+++ b/mec_state.hpp
@@ -65,69 +65,69 @@ class LMI_SO mec_state final
// xml_serializable overrides.
bool is_detritus(std::string const&) const override;
- int B0_deduced_policy_year;
- int B1_deduced_contract_year;
- double B2_deduced_px7_rate;
- double B3_deduced_nsp_rate;
- double B4_deduced_target_premium;
- double B5_deduced_target_load;
- double B6_deduced_excess_load;
-
- double C0_init_bft;
- double C1_init_ldb;
- double C2_init_amt_pd;
- bool C3_init_is_mc;
- double C4_init_dcv;
- double C5_init_px7;
- bool C6_init_mec;
-
- double D0_incr_bft;
- double D1_incr_ldb;
- double D2_incr_amt_pd;
- bool D3_incr_is_mc;
- double D4_incr_dcv;
- double D5_incr_px7;
- bool D6_incr_mec;
-
- double E0_decr_bft;
- double E1_decr_ldb;
- double E2_decr_amt_pd;
- bool E3_decr_is_mc;
- double E4_decr_dcv;
- double E5_decr_px7;
- bool E6_decr_mec;
-
- double F0_nec_pm_bft;
- double F1_nec_pm_ldb;
- double F2_nec_pm_amt_pd;
- bool F3_nec_pm_is_mc;
- double F4_nec_pm_dcv;
- double F5_nec_pm_px7;
- bool F6_nec_pm_mec;
-
- double G0_do_mc_bft;
- double G1_do_mc_ldb;
- double G2_do_mc_amt_pd;
- bool G3_do_mc_is_mc;
- double G4_do_mc_dcv;
- double G5_do_mc_px7;
- bool G6_do_mc_mec;
-
- double H0_unnec_pm_bft;
- double H1_unnec_pm_ldb;
- double H2_unnec_pm_amt_pd;
- bool H3_unnec_pm_is_mc;
- double H4_unnec_pm_dcv;
- double H5_unnec_pm_px7;
- bool H6_unnec_pm_mec;
-
- double Q0_net_1035;
- double Q1_max_nec_prem_net;
- double Q2_max_nec_prem_gross;
- double Q3_cv_before_last_mc;
- double Q4_cum_px7;
- double Q5_cum_amt_pd;
- double Q6_max_non_mec_prem;
+ int B0_deduced_policy_year {0};
+ int B1_deduced_contract_year {0};
+ double B2_deduced_px7_rate {0.0};
+ double B3_deduced_nsp_rate {0.0};
+ double B4_deduced_target_premium {0.0};
+ double B5_deduced_target_load {0.0};
+ double B6_deduced_excess_load {0.0};
+
+ double C0_init_bft {0.0};
+ double C1_init_ldb {0.0};
+ double C2_init_amt_pd {0.0};
+ bool C3_init_is_mc {false};
+ double C4_init_dcv {0.0};
+ double C5_init_px7 {0.0};
+ bool C6_init_mec {false};
+
+ double D0_incr_bft {0.0};
+ double D1_incr_ldb {0.0};
+ double D2_incr_amt_pd {0.0};
+ bool D3_incr_is_mc {false};
+ double D4_incr_dcv {0.0};
+ double D5_incr_px7 {0.0};
+ bool D6_incr_mec {false};
+
+ double E0_decr_bft {0.0};
+ double E1_decr_ldb {0.0};
+ double E2_decr_amt_pd {0.0};
+ bool E3_decr_is_mc {false};
+ double E4_decr_dcv {0.0};
+ double E5_decr_px7 {0.0};
+ bool E6_decr_mec {false};
+
+ double F0_nec_pm_bft {0.0};
+ double F1_nec_pm_ldb {0.0};
+ double F2_nec_pm_amt_pd {0.0};
+ bool F3_nec_pm_is_mc {false};
+ double F4_nec_pm_dcv {0.0};
+ double F5_nec_pm_px7 {0.0};
+ bool F6_nec_pm_mec {false};
+
+ double G0_do_mc_bft {0.0};
+ double G1_do_mc_ldb {0.0};
+ double G2_do_mc_amt_pd {0.0};
+ bool G3_do_mc_is_mc {false};
+ double G4_do_mc_dcv {0.0};
+ double G5_do_mc_px7 {0.0};
+ bool G6_do_mc_mec {false};
+
+ double H0_unnec_pm_bft {0.0};
+ double H1_unnec_pm_ldb {0.0};
+ double H2_unnec_pm_amt_pd {0.0};
+ bool H3_unnec_pm_is_mc {false};
+ double H4_unnec_pm_dcv {0.0};
+ double H5_unnec_pm_px7 {0.0};
+ bool H6_unnec_pm_mec {false};
+
+ double Q0_net_1035 {0.0};
+ double Q1_max_nec_prem_net {0.0};
+ double Q2_max_nec_prem_gross {0.0};
+ double Q3_cv_before_last_mc {0.0};
+ double Q4_cum_px7 {0.0};
+ double Q5_cum_amt_pd {0.0};
+ double Q6_max_non_mec_prem {0.0};
};
#endif // mec_state_hpp
- [lmi-commits] [lmi] master updated (a0472892 -> 9be3fe4e), Greg Chicares, 2022/06/06
- [lmi-commits] [lmi] master 43c26210 2/8: Make a unit test more thorough, Greg Chicares, 2022/06/06
- [lmi-commits] [lmi] master 9be3fe4e 8/8: Update dotfiles, Greg Chicares, 2022/06/06
- [lmi-commits] [lmi] master 4d1b7487 3/8: Improve a local name, Greg Chicares, 2022/06/06
- [lmi-commits] [lmi] master d7249cec 1/8: Test whether macros were already defined, Greg Chicares, 2022/06/06
- [lmi-commits] [lmi] master 8f25a9bd 5/8: Resolve an issue identified by UBSAN, Greg Chicares, 2022/06/06
- [lmi-commits] [lmi] master fe203b1e 4/8: Use undefined-behavior sanitizer, Greg Chicares, 2022/06/06
- [lmi-commits] [lmi] master cc85be94 6/8: Resolve another issue identified by UBSAN,
Greg Chicares <=
- [lmi-commits] [lmi] master 7ae73fae 7/8: Localize an 'f2c' global, Greg Chicares, 2022/06/06