diff --git a/src/ExprNode.cc b/src/ExprNode.cc
index 7247f237492ced7aa7b7895ee23c47ad7e919e46..517ae6e74efd6180d8e15b7ad8f5d07b56a2eb92 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 116b923ea5001c2b367d8d3d9f3f228105a2b38f..716abfb9079b42ac1fc428bbbd87e9429ec1d31e 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 3924c1a411e6c0c3c33ee4dfe1d6a9ea4772a580..1218c6c9884632ae3eadca241f1ad8693eb3015e 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 38d3733becca219a34c5101c442d93c5bf6b916f..ef4d13838b1677c20c71cf1e002f2403533bba93 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