This is something i think we have no discussed, with a record pattern, the switch has to call the record accessors, and those can do side effects, revealing the order of the calls to the accessors.
So by example, with a code like this record Foo(Object o1, Object o2) { public Object o2() { throw new AssertionError(); } } void int m(Foo foo) { return switch(foo) { case Foo(String s, Object o2) -> 1 case Foo foo -> 2 }; } m(new Foo(3, 4)); // throw AssertionError ? Do the call throw an AssertionError ? I believe the answer is no, because 3 is not a String, so Foo::o2() is not called. RĂ©mi