Skip to content

Commit 9fd95ed

Browse files
author
Remi Delmas
committed
CONTRACTS: drop function pointer contract support
Dropping support for function pointer contract clauses in the old contract system (now only supported with DFCC).
1 parent 0060417 commit 9fd95ed

File tree

3 files changed

+10
-30
lines changed

3 files changed

+10
-30
lines changed

regression/contracts/function-pointer-contracts-enforce/test.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CORE
22
main.c
33
--enforce-contract foo --restrict-function-pointer foo.function_pointer_call.1/contract --replace-call-with-contract contract --replace-call-with-contract bar
4-
^EXIT=0$
4+
^file main.c line 23: require_contracts or ensures_contract clauses are not supported$
5+
^EXIT=6$
56
^SIGNAL=0$
6-
^VERIFICATION SUCCESSFUL$
77
--
88
--
99
This test checks that we can require that a function pointer satisfies some named

regression/contracts/function-pointer-contracts-replace/test.desc

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
CORE
22
main.c
33
--replace-call-with-contract foo
4-
^\[foo.precondition.\d+] line 19 Assert function pointer 'infun' obeys contract 'contract': SUCCESS$
5-
^\[main.assertion.\d+].* assertion outfun1 == contract: SUCCESS$
6-
^\[main.assertion.\d+].* assertion outfun2 == contract: SUCCESS$
7-
^EXIT=0$
4+
^file main.c line 19 function foo: require_contracts or ensures_contract clauses are not supported$
5+
^EXIT=6$
86
^SIGNAL=0$
9-
^VERIFICATION SUCCESSFUL$
107
--
118
--
129
This test checks that, when replacing a call by its contract,

src/goto-instrument/contracts/contracts.cpp

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,36 +1204,19 @@ void code_contractst::assert_function_pointer_obeys_contract(
12041204
const irep_idt &mode,
12051205
goto_programt &dest)
12061206
{
1207-
source_locationt loc(expr.source_location());
1208-
loc.set_property_class(property_class);
1209-
std::stringstream comment;
1210-
comment << "Assert function pointer '"
1211-
<< from_expr_using_mode(ns, mode, expr.function_pointer())
1212-
<< "' obeys contract '"
1213-
<< from_expr_using_mode(ns, mode, expr.address_of_contract()) << "'";
1214-
loc.set_comment(comment.str());
1215-
code_assertt assert_expr(
1216-
equal_exprt{expr.function_pointer(), expr.address_of_contract()});
1217-
assert_expr.add_source_location() = loc;
1218-
goto_programt instructions;
1219-
converter.goto_convert(assert_expr, instructions, mode);
1220-
dest.destructive_append(instructions);
1207+
throw invalid_source_file_exceptiont(
1208+
"require_contracts or ensures_contract clauses are not supported",
1209+
expr.source_location());
12211210
}
12221211

12231212
void code_contractst::assume_function_pointer_obeys_contract(
12241213
const function_pointer_obeys_contract_exprt &expr,
12251214
const irep_idt &mode,
12261215
goto_programt &dest)
12271216
{
1228-
source_locationt loc(expr.source_location());
1229-
std::stringstream comment;
1230-
comment << "Assume function pointer '"
1231-
<< from_expr_using_mode(ns, mode, expr.function_pointer())
1232-
<< "' obeys contract '"
1233-
<< from_expr_using_mode(ns, mode, expr.address_of_contract()) << "'";
1234-
loc.set_comment(comment.str());
1235-
dest.add(goto_programt::make_assignment(
1236-
expr.function_pointer(), expr.address_of_contract(), loc));
1217+
throw invalid_source_file_exceptiont(
1218+
"require_contracts or ensures_contract clauses are not supported",
1219+
expr.source_location());
12371220
}
12381221

12391222
void code_contractst::add_contract_check(

0 commit comments

Comments
 (0)