Isn't there an `else` block missing here? I'm seeing the source as:

```cpp
Expression *NegExp::optimize(int result, bool keepLvalue)
{   Expression *e;

    e1 = e1->optimize(result);
    if (e1->isConst() == 1)
    {
        e = Neg(type, e1);
    }
    else  // <= here
        e = this;
    return e;
}
```