From f179ec4dac7a581f89c108bdae93dfcfba851964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Wed, 18 Oct 2023 14:21:40 -0400 Subject: [PATCH] Use __builtin_unreachable() to silent some GCC warnings This is cleaner than using exit() or assert() for that purpose. --- src/ExprNode.cc | 50 ++++++++++++---------------------- src/NumericalInitialization.cc | 2 +- src/Shocks.cc | 2 +- src/SubModel.cc | 3 +- 4 files changed, 20 insertions(+), 37 deletions(-) diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 7247f237..517ae6e7 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -997,8 +997,7 @@ VariableNode::computeDerivative(int deriv_id) cerr << "VariableNode::computeDerivative: Impossible case!" << endl; exit(EXIT_FAILURE); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } bool @@ -1514,8 +1513,7 @@ VariableNode::computeChainRuleDerivative(int deriv_id, cerr << "VariableNode::computeChainRuleDerivative: Impossible case" << endl; exit(EXIT_FAILURE); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } expr_t @@ -2366,8 +2364,7 @@ UnaryOpNode::composeDerivatives(expr_t darg, int deriv_id) cerr << "UnaryOpNode::composeDerivatives: not implemented on UnaryOpcode::adl" << endl; exit(EXIT_FAILURE); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } expr_t @@ -2509,7 +2506,7 @@ UnaryOpNode::cost(int cost, bool is_matlab) const cerr << "UnaryOpNode::cost: not implemented on UnaryOpcode::adl" << endl; exit(EXIT_FAILURE); } - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } void @@ -3165,8 +3162,7 @@ UnaryOpNode::eval_opcode(UnaryOpcode op_code, double v) noexcept(false) cerr << "UnaryOpNode::eval_opcode: not implemented on UnaryOpcode::adl" << endl; exit(EXIT_FAILURE); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } double @@ -3413,8 +3409,7 @@ UnaryOpNode::buildSimilarUnaryOpNode(expr_t alt_arg, DataTree &alt_datatree) con case UnaryOpcode::adl: return alt_datatree.AddAdl(alt_arg, adl_param_name, adl_lags); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } expr_t @@ -4149,8 +4144,7 @@ BinaryOpNode::composeDerivatives(expr_t darg1, expr_t darg2) t14 = datatree.AddTimes(t13, darg2); return datatree.AddPlus(t14, t12); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } expr_t @@ -4214,8 +4208,7 @@ BinaryOpNode::precedence(ExprNodeOutputType output_type, const temporary_terms_t case BinaryOpcode::max: return 100; } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } int @@ -4250,8 +4243,7 @@ BinaryOpNode::precedenceJson(const temporary_terms_t &temporary_terms) const case BinaryOpcode::max: return 100; } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } int @@ -4337,8 +4329,7 @@ BinaryOpNode::cost(int cost, bool is_matlab) const case BinaryOpcode::equal: return cost; } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } void @@ -4444,8 +4435,7 @@ BinaryOpNode::eval_opcode(double v1, BinaryOpcode op_code, double v2, int derivO case BinaryOpcode::equal: throw EvalException(); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } double @@ -5155,8 +5145,7 @@ BinaryOpNode::buildSimilarBinaryOpNode(expr_t alt_arg1, expr_t alt_arg2, DataTre case BinaryOpcode::powerDeriv: return alt_datatree.AddPowerDeriv(alt_arg1, alt_arg2, powerDerivOrder); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } expr_t @@ -5999,8 +5988,7 @@ TrinaryOpNode::composeDerivatives(expr_t darg1, expr_t darg2, expr_t darg3) // (this / sigma) * (((x - mu)/sigma) * (darg2 - darg1 + darg3 * (x - mu)/sigma) - darg3) return datatree.AddTimes(t11, t12); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } expr_t @@ -6026,8 +6014,7 @@ TrinaryOpNode::precedence([[maybe_unused]] ExprNodeOutputType output_type, case TrinaryOpcode::normpdf: return 100; } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } int @@ -6080,8 +6067,7 @@ TrinaryOpNode::cost(int cost, bool is_matlab) const case TrinaryOpcode::normpdf: return cost+1000; } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } void @@ -6144,8 +6130,7 @@ TrinaryOpNode::eval_opcode(double v1, TrinaryOpcode op_code, double v2, double v case TrinaryOpcode::normpdf: return (1/(v3*sqrt(2*numbers::pi)*exp(pow((v1-v2)/v3, 2)/2))); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } double @@ -6417,8 +6402,7 @@ TrinaryOpNode::buildSimilarTrinaryOpNode(expr_t alt_arg1, expr_t alt_arg2, expr_ case TrinaryOpcode::normpdf: return alt_datatree.AddNormpdf(alt_arg1, alt_arg2, alt_arg3); } - // Suppress GCC warning - exit(EXIT_FAILURE); + __builtin_unreachable(); // Silence GCC warning } expr_t diff --git a/src/NumericalInitialization.cc b/src/NumericalInitialization.cc index 116b923e..716abfb9 100644 --- a/src/NumericalInitialization.cc +++ b/src/NumericalInitialization.cc @@ -326,7 +326,7 @@ EndValLearntInStatement::typeToString(LearntEndValType type) case LearntEndValType::multiply: return "multiply"; } - exit(EXIT_FAILURE); // Silence GCC warning + __builtin_unreachable(); // Silence GCC warning } void diff --git a/src/Shocks.cc b/src/Shocks.cc index 3924c1a4..1218c6c9 100644 --- a/src/Shocks.cc +++ b/src/Shocks.cc @@ -527,7 +527,7 @@ ShocksLearntInStatement::typeToString(LearntShockType type) case LearntShockType::multiplySteadyState: return "multiply_steady_state"; } - exit(EXIT_FAILURE); // Silence GCC warning + __builtin_unreachable(); // Silence GCC warning } void diff --git a/src/SubModel.cc b/src/SubModel.cc index 38d3733b..ef4d1383 100644 --- a/src/SubModel.cc +++ b/src/SubModel.cc @@ -1714,8 +1714,7 @@ PacModelTable::kindToString(PacTargetKind kind) case PacTargetKind::dd: return "dd"; } - // Silent GCC warning - assert(false); + __builtin_unreachable(); // Silence GCC warning } void -- GitLab