[code-reflection] RFR: Missing conversion for some unary operators
Maurizio Cimadamore
mcimadamore at openjdk.org
Thu Apr 18 16:39:33 UTC 2024
On Thu, 18 Apr 2024 16:34:50 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:
> `ReflectMethods` is missing the logic for converting operands for unary operators `!` and `-`.
>
> I've fixed calling the correct `value` method (the one with a target type).
>
> When running tests, it seems like the test `CoreBinaryOpsTest` fails.
>
> This failure also occurs w/o my patch, so it seems unrelated.
>
> The problem is likely due to another missing conversion - e.g. for this code:
>
>
> @CodeReflection
> static int leftShiftIL(int left, long right) {
> return left << right;
> }
>
>
> We get this model:
>
>
> func @"leftShiftIL" (%0 : int, %1 : long)int -> {
> %2 : Var<int> = var %0 @"left";
> %3 : Var<long> = var %1 @"right";
> %4 : int = var.load %2;
> %5 : long = var.load %3;
> %6 : int = lshl %4 %5;
> return %6;
> };
>
>
> This seems to want to do a shift between an int and a long (so should use a long shift, whose result is also long). But there's no conversion on the way in and also on the way out.
>
> Since this is unrelated with the fix here, I'd suggest to integrate this in the meantime.
test/langtools/tools/javac/reflect/quoted/TestCaptureQuotable.java line 66:
> 64: Quoted quoted = quotable.quoted();
> 65: assertEquals(quoted.capturedValues().size(), 2);
> 66: Iterator<Object> it = quoted.capturedValues().values().iterator();
This test had a bug and was testing the wrong captured values. This is now fixed.
-------------
PR Review Comment: https://git.openjdk.org/babylon/pull/55#discussion_r1571068283
More information about the babylon-dev
mailing list