return call;
}
+/* Set up built-ins for contracts. */
+
+void
+init_contract_processing (void)
+{
+ /* std::contract_violation */
+ tree tmp = build_function_type_list (integer_type_node,
+ boolean_type_node,
+ integer_type_node,
+ const_string_type_node,
+ const_string_type_node,
+ const_string_type_node,
+ const_string_type_node,
+ const_string_type_node,
+ integer_type_node,
+ NULL_TREE);
+ on_contract_violation_fn =
+ build_cp_library_fn_ptr ("__on_contract_violation", tmp, ECF_COLD);
+ on_contract_violation_never_fn =
+ build_cp_library_fn_ptr ("__on_contract_violation", tmp,
+ ECF_COLD | ECF_NORETURN);
+}
+
#include "gt-cp-contracts.h"
cmc_override
};
+extern void init_contract_processing ();
extern tree invalidate_contract (tree);
extern tree make_postcondition_variable (cp_expr);
extern tree make_postcondition_variable (cp_expr, tree);
if (flag_exceptions)
init_exception_processing ();
+ if (flag_contracts)
+ init_contract_processing ();
+
if (modules_p ())
init_modules (parse_in);
&& TREE_NOTHROW (terminate_fn));
pop_nested_namespace (std_node);
- tmp = build_function_type_list (integer_type_node,
- boolean_type_node,
- integer_type_node,
- const_string_type_node,
- const_string_type_node,
- const_string_type_node,
- const_string_type_node,
- const_string_type_node,
- integer_type_node,
- NULL_TREE);
- on_contract_violation_fn =
- build_cp_library_fn_ptr ("__on_contract_violation", tmp, ECF_COLD);
- on_contract_violation_never_fn =
- build_cp_library_fn_ptr ("__on_contract_violation", tmp,
- ECF_COLD | ECF_NORETURN);
-
/* void __cxa_call_unexpected(void *); */
tmp = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
call_unexpected_fn