CBMC
cpp_typecheck_static_assert.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: C++ Language Type Checking
4 
5 Author: Daniel Kroening, kroening@cs.cmu.edu
6 
7 \*******************************************************************/
8 
11 
12 #include "cpp_typecheck.h"
13 
14 #include <util/string_constant.h>
15 
17 {
18  typecheck_expr(cpp_static_assert.op0());
19  typecheck_expr(cpp_static_assert.op1());
20 
21  implicit_typecast_bool(cpp_static_assert.op0());
22  make_constant(cpp_static_assert.op0());
23 
24  if(cpp_static_assert.op0().is_false())
25  {
26  // failed
27  error().source_location=cpp_static_assert.source_location();
28  error() << "static assertion failed";
29  if(cpp_static_assert.op1().id()==ID_string_constant)
30  error() << ": " << to_string_constant(cpp_static_assert.op1()).value();
31  error() << eom;
32  throw 0;
33  }
34 }
exprt & op1()
Definition: expr.h:136
exprt & op0()
Definition: expr.h:133
virtual void make_constant(exprt &expr)
virtual void implicit_typecast_bool(exprt &expr)
void convert(cpp_linkage_spect &)
void typecheck_expr(exprt &) override
const source_locationt & source_location() const
Definition: expr.h:231
bool is_false() const
Return whether the expression is a constant representing false.
Definition: expr.cpp:34
const irep_idt & id() const
Definition: irep.h:388
source_locationt source_location
Definition: message.h:239
mstreamt & error() const
Definition: message.h:391
static eomt eom
Definition: message.h:289
void value(const irep_idt &)
C++ Language Type Checking.
const string_constantt & to_string_constant(const exprt &expr)