On Wednesday, 13 May 2026 at 01:23:38 UTC, Alex wrote:

If the writelns are uncommented out, get a FileException correctly as before.

So what I've been using is a feature of the compiler that prints out a string representation of the AST. This is the `-vcg-ast` switch.

Looking at that, the catch clauses for `FileException` and `Exception` are missing when `writeln` is in the loop.

I have also discovered that it's not specific to writeln, and that *any* throwing (or possibly throwing) function will do.

For example:

```d
void foo() {} // not nothrow
void fooNothrow() nothrow {}

// this will catch the FileException:
        try
        {
            foo();
            if (entry.isDir)
                scan(entry.name);
        }

// this will catch the Throwable:
        try
        {
            fooNothrow();
            if (entry.isDir)
                scan(entry.name);
        }

```

Clearly, the compiler is misjudging this code as nothrow.

I think I can get a small reproducible example that does not need all the extra complication. But need some time to narrow it down.

-Steve

Reply via email to