Index: sandbox/linux/bpf_dsl/bpf_dsl.cc |
diff --git a/sandbox/linux/bpf_dsl/bpf_dsl.cc b/sandbox/linux/bpf_dsl/bpf_dsl.cc |
index 0363be068e72532092e437f1562f61e239890ad5..3772efb2c703d4756746ff3cdf137a8d7d943177 100644 |
--- a/sandbox/linux/bpf_dsl/bpf_dsl.cc |
+++ b/sandbox/linux/bpf_dsl/bpf_dsl.cc |
@@ -118,8 +118,11 @@ class IfThenResultExprImpl : public internal::ResultExprImpl { |
: cond_(cond), then_result_(then_result), else_result_(else_result) {} |
CodeGen::Node Compile(PolicyCompiler* pc) const override { |
- return cond_->Compile( |
- pc, then_result_->Compile(pc), else_result_->Compile(pc)); |
+ // We compile the "then" and "else" expressions in separate statements so |
+ // they have a defined sequencing. See https://crbug.com/529480. |
+ CodeGen::Node then_node = then_result_->Compile(pc); |
+ CodeGen::Node else_node = else_result_->Compile(pc); |
+ return cond_->Compile(pc, then_node, else_node); |
} |
bool HasUnsafeTraps() const override { |