diff --git a/src/goto-programs/builtin_functions.cpp b/src/goto-programs/builtin_functions.cpp index cbe45869e06..0d258c3cb6b 100644 --- a/src/goto-programs/builtin_functions.cpp +++ b/src/goto-programs/builtin_functions.cpp @@ -17,6 +17,7 @@ Author: Daniel Kroening, kroening@kroening.com #include #include #include +#include #include #include #include @@ -615,20 +616,6 @@ void goto_convertt::do_array_op( copy(array_op_statement, OTHER, dest); } -bool is_lvalue(const exprt &expr) -{ - if(expr.id()==ID_index) - return is_lvalue(to_index_expr(expr).op0()); - else if(expr.id()==ID_member) - return is_lvalue(to_member_expr(expr).op0()); - else if(expr.id()==ID_dereference) - return true; - else if(expr.id()==ID_symbol) - return true; - else - return false; -} - exprt make_va_list(const exprt &expr) { // we first strip any typecast diff --git a/src/util/expr_util.cpp b/src/util/expr_util.cpp index 8d3c3ca3d59..0fd9f6dd5dc 100644 --- a/src/util/expr_util.cpp +++ b/src/util/expr_util.cpp @@ -19,6 +19,19 @@ Author: Daniel Kroening, kroening@kroening.com #include "namespace.h" #include "arith_tools.h" +bool is_lvalue(const exprt &expr) +{ + if(expr.id() == ID_index) + return is_lvalue(to_index_expr(expr).array()); + else if(expr.id() == ID_member) + return is_lvalue(to_member_expr(expr).compound()); + else if(expr.id() == ID_dereference) + return true; + else if(expr.id() == ID_symbol) + return true; + else + return false; +} exprt make_binary(const exprt &expr) { const exprt::operandst &operands=expr.operands(); diff --git a/src/util/expr_util.h b/src/util/expr_util.h index 5c7d37b0b95..aea069e5ee1 100644 --- a/src/util/expr_util.h +++ b/src/util/expr_util.h @@ -30,6 +30,9 @@ class symbolt; class typet; class namespacet; +/// Returns true iff the argument is (syntactically) an lvalue. +bool is_lvalue(const exprt &expr); + /// splits an expression with >=3 operands into nested binary expressions exprt make_binary(const exprt &);