tree build_must_not_throw_expr (tree body, tree cond) { tree type = body ? TREE_TYPE (body) : void_type_node; if (!flag_exceptions) return body; if (!cond) /* OK, unconditional. */; else { tree conv = NULL_TREE; if (!type_dependent_expression_p (cond)) conv = perform_implicit_conversion_flags (boolean_type_node, cond, tf_warning_or_error, LOOKUP_NORMAL); if (tree inst = instantiate_non_dependent_or_null (conv)) cond = cxx_constant_value (inst); else require_constant_expression (cond); if (integer_zerop (cond)) return body; else if (integer_onep (cond)) cond = NULL_TREE; } return build2 (MUST_NOT_THROW_EXPR, type, body, cond); }
tree build_must_not_throw_expr (tree body, tree cond) { tree type = body ? TREE_TYPE (body) : void_type_node; if (cond && !value_dependent_expression_p (cond)) { cond = cxx_constant_value (cond); if (integer_zerop (cond)) return body; else if (integer_onep (cond)) cond = NULL_TREE; } return build2 (MUST_NOT_THROW_EXPR, type, body, cond); }