mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
ZAM fix for inlining bug when a local is assigned to a function parameter
This commit is contained in:
parent
8f92e0d39b
commit
cbc3d9c739
2 changed files with 7 additions and 6 deletions
10
src/Expr.h
10
src/Expr.h
|
@ -304,11 +304,11 @@ public:
|
|||
// True if this expression can be the RHS for a field assignment.
|
||||
bool IsFieldAssignable(const Expr* e) const;
|
||||
|
||||
// True if the expression will transform to one of another type
|
||||
// upon reduction, for non-constant operands. "Transform" means
|
||||
// something beyond assignment to a temporary. Necessary so that
|
||||
// we know to fully reduce such expressions if they're the RHS
|
||||
// of an assignment.
|
||||
// True if the expression will transform to one of another AST node
|
||||
// (perhaps of the same type) upon reduction, for non-constant
|
||||
// operands. "Transform" means something beyond assignment to a
|
||||
// temporary. Necessary so that we know to fully reduce such
|
||||
// expressions if they're the RHS of an assignment.
|
||||
virtual bool WillTransform(Reducer* c) const { return false; }
|
||||
|
||||
// The same, but for the expression when used in a conditional context.
|
||||
|
|
|
@ -1812,8 +1812,9 @@ ExprPtr AssignExpr::Reduce(Reducer* c, StmtPtr& red_stmt)
|
|||
if ( op2->WillTransform(c) )
|
||||
{
|
||||
StmtPtr xform_stmt;
|
||||
StmtPtr lhs_stmt = lhs_ref->ReduceToLHS(c);
|
||||
op2 = op2->ReduceToSingleton(c, xform_stmt);
|
||||
red_stmt = MergeStmts(rhs_reduce, xform_stmt);
|
||||
red_stmt = MergeStmts(lhs_stmt, rhs_reduce, xform_stmt);
|
||||
return ThisPtr();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue