RFR: 8301580: Error recovery does not clear returnResult

Jan Lahoda jlahoda at openjdk.org
Wed Feb 1 12:07:39 UTC 2023


Considering code like:

class C {
    void m
    {
        return;
    }
}


`void m` is wrapped in an erroneous tree (which is good), and if/when `Attr` is processing it in `visitErroneous`, it will create a new `Env` to attribute the erroneous part.

But, `Attr` will set a `returnResult` into the `Env`'s info - and that info is shared with the outter `Env`, so there will be a `returnResult` set after `visitErroneous`. `{ return ; }` is interpreted as an initializer, and there should be an error for the `return` there, but this error is missing, due to the set `returnResult`. This will then fail later in `Flow` with an exception:


$ javac -XDshould-stop.at=FLOW -XDdev /tmp/C.java

-------------

Commit messages:
 - 8301580: Error recovery does not clear returnResult

Changes: https://git.openjdk.org/jdk/pull/12361/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12361&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8301580
  Stats: 115 lines in 3 files changed: 109 ins; 0 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/12361.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12361/head:pull/12361

PR: https://git.openjdk.org/jdk/pull/12361


More information about the compiler-dev mailing list