Skip to content

Commit 429a282

Browse files
committed
don't attempt to expand functions that have no definition
Uninterpreted functions don't have a definition, which has previously caused a crash.
1 parent 5187a24 commit 429a282

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/solvers/smt2/smt2_solver.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,22 @@ void smt2_solvert::expand_function_applications(exprt &expr)
102102
domain.size() == app.arguments().size(),
103103
"number of parameters must match number of arguments");
104104

105-
replace_symbolt replace_symbol;
106-
107-
for(std::size_t i = 0; i < domain.size(); i++)
105+
// Does it have a definition? It's otherwise uninterpreted.
106+
if(!f.definition.is_nil())
108107
{
109-
replace_symbol.insert(
110-
symbol_exprt(f.parameters[i], domain[i]), app.arguments()[i]);
108+
replace_symbolt replace_symbol;
109+
110+
for(std::size_t i = 0; i < domain.size(); i++)
111+
{
112+
replace_symbol.insert(
113+
symbol_exprt(f.parameters[i], domain[i]), app.arguments()[i]);
114+
}
115+
116+
exprt body = f.definition;
117+
replace_symbol(body);
118+
expand_function_applications(body);
119+
expr = body;
111120
}
112-
113-
exprt body = f.definition;
114-
replace_symbol(body);
115-
expand_function_applications(body);
116-
expr = body;
117121
}
118122
}
119123
}

0 commit comments

Comments
 (0)