Skip to content

Commit d683507

Browse files
authored
Merge pull request #6390 from diffblue/frontend_assume_and_assert
code_assumet and code_assertt are frontend only
2 parents 0805702 + 16b242c commit d683507

File tree

2 files changed

+105
-105
lines changed

2 files changed

+105
-105
lines changed

src/util/goto_instruction_code.h

Lines changed: 0 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -321,111 +321,6 @@ inline code_function_callt &to_code_function_call(codet &code)
321321
return static_cast<code_function_callt &>(code);
322322
}
323323

324-
/// An assumption, which must hold in subsequent code.
325-
class code_assumet : public codet
326-
{
327-
public:
328-
explicit code_assumet(exprt expr) : codet(ID_assume, {std::move(expr)})
329-
{
330-
}
331-
332-
const exprt &assumption() const
333-
{
334-
return op0();
335-
}
336-
337-
exprt &assumption()
338-
{
339-
return op0();
340-
}
341-
342-
protected:
343-
using codet::op0;
344-
using codet::op1;
345-
using codet::op2;
346-
using codet::op3;
347-
};
348-
349-
template <>
350-
inline bool can_cast_expr<code_assumet>(const exprt &base)
351-
{
352-
return detail::can_cast_code_impl(base, ID_assume);
353-
}
354-
355-
inline void validate_expr(const code_assumet &x)
356-
{
357-
validate_operands(x, 1, "assume must have one operand");
358-
}
359-
360-
inline const code_assumet &to_code_assume(const codet &code)
361-
{
362-
PRECONDITION(code.get_statement() == ID_assume);
363-
const code_assumet &ret = static_cast<const code_assumet &>(code);
364-
validate_expr(ret);
365-
return ret;
366-
}
367-
368-
inline code_assumet &to_code_assume(codet &code)
369-
{
370-
PRECONDITION(code.get_statement() == ID_assume);
371-
code_assumet &ret = static_cast<code_assumet &>(code);
372-
validate_expr(ret);
373-
return ret;
374-
}
375-
376-
/// A non-fatal assertion, which checks a condition then permits execution to
377-
/// continue.
378-
class code_assertt : public codet
379-
{
380-
public:
381-
explicit code_assertt(exprt expr) : codet(ID_assert, {std::move(expr)})
382-
{
383-
}
384-
385-
const exprt &assertion() const
386-
{
387-
return op0();
388-
}
389-
390-
exprt &assertion()
391-
{
392-
return op0();
393-
}
394-
395-
protected:
396-
using codet::op0;
397-
using codet::op1;
398-
using codet::op2;
399-
using codet::op3;
400-
};
401-
402-
template <>
403-
inline bool can_cast_expr<code_assertt>(const exprt &base)
404-
{
405-
return detail::can_cast_code_impl(base, ID_assert);
406-
}
407-
408-
inline void validate_expr(const code_assertt &x)
409-
{
410-
validate_operands(x, 1, "assert must have one operand");
411-
}
412-
413-
inline const code_assertt &to_code_assert(const codet &code)
414-
{
415-
PRECONDITION(code.get_statement() == ID_assert);
416-
const code_assertt &ret = static_cast<const code_assertt &>(code);
417-
validate_expr(ret);
418-
return ret;
419-
}
420-
421-
inline code_assertt &to_code_assert(codet &code)
422-
{
423-
PRECONDITION(code.get_statement() == ID_assert);
424-
code_assertt &ret = static_cast<code_assertt &>(code);
425-
validate_expr(ret);
426-
return ret;
427-
}
428-
429324
/// A `codet` representing the declaration that an input of a particular
430325
/// description has a value which corresponds to the value of a given expression
431326
/// (or expressions).

src/util/std_code.h

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,111 @@ inline code_blockt &to_code_block(codet &code)
372372
return static_cast<code_blockt &>(code);
373373
}
374374

375+
/// An assumption, which must hold in subsequent code.
376+
class code_assumet : public codet
377+
{
378+
public:
379+
explicit code_assumet(exprt expr) : codet(ID_assume, {std::move(expr)})
380+
{
381+
}
382+
383+
const exprt &assumption() const
384+
{
385+
return op0();
386+
}
387+
388+
exprt &assumption()
389+
{
390+
return op0();
391+
}
392+
393+
protected:
394+
using codet::op0;
395+
using codet::op1;
396+
using codet::op2;
397+
using codet::op3;
398+
};
399+
400+
template <>
401+
inline bool can_cast_expr<code_assumet>(const exprt &base)
402+
{
403+
return detail::can_cast_code_impl(base, ID_assume);
404+
}
405+
406+
inline void validate_expr(const code_assumet &x)
407+
{
408+
validate_operands(x, 1, "assume must have one operand");
409+
}
410+
411+
inline const code_assumet &to_code_assume(const codet &code)
412+
{
413+
PRECONDITION(code.get_statement() == ID_assume);
414+
const code_assumet &ret = static_cast<const code_assumet &>(code);
415+
validate_expr(ret);
416+
return ret;
417+
}
418+
419+
inline code_assumet &to_code_assume(codet &code)
420+
{
421+
PRECONDITION(code.get_statement() == ID_assume);
422+
code_assumet &ret = static_cast<code_assumet &>(code);
423+
validate_expr(ret);
424+
return ret;
425+
}
426+
427+
/// A non-fatal assertion, which checks a condition then permits execution to
428+
/// continue.
429+
class code_assertt : public codet
430+
{
431+
public:
432+
explicit code_assertt(exprt expr) : codet(ID_assert, {std::move(expr)})
433+
{
434+
}
435+
436+
const exprt &assertion() const
437+
{
438+
return op0();
439+
}
440+
441+
exprt &assertion()
442+
{
443+
return op0();
444+
}
445+
446+
protected:
447+
using codet::op0;
448+
using codet::op1;
449+
using codet::op2;
450+
using codet::op3;
451+
};
452+
453+
template <>
454+
inline bool can_cast_expr<code_assertt>(const exprt &base)
455+
{
456+
return detail::can_cast_code_impl(base, ID_assert);
457+
}
458+
459+
inline void validate_expr(const code_assertt &x)
460+
{
461+
validate_operands(x, 1, "assert must have one operand");
462+
}
463+
464+
inline const code_assertt &to_code_assert(const codet &code)
465+
{
466+
PRECONDITION(code.get_statement() == ID_assert);
467+
const code_assertt &ret = static_cast<const code_assertt &>(code);
468+
validate_expr(ret);
469+
return ret;
470+
}
471+
472+
inline code_assertt &to_code_assert(codet &code)
473+
{
474+
PRECONDITION(code.get_statement() == ID_assert);
475+
code_assertt &ret = static_cast<code_assertt &>(code);
476+
validate_expr(ret);
477+
return ret;
478+
}
479+
375480
/// A \ref codet representing a `skip` statement.
376481
class code_skipt:public codet
377482
{

0 commit comments

Comments
 (0)