I see. But the intention is a little difficult to understand.
I'd like to propose to make the code more clear, such as:

```
void EnumDeclaration::semantic(Scope *sc)
{
    ...

    Scope *sce;                 // keep local `sce` variable
    if (isAnonymous())
        sce = sc;
    else
    {   sce = sc->push(this);
        sce->parent = this;
    }
    this->sce = sce;            // explicitly store to this->sce
    this->sce->setNoFree();     // and use it later
    sce = sce->startCTFE();

    ...

    sce = sce->endCTFE();
```

How about?