[code-reflection] Integrated: Missing conversion for some unary operators

Maurizio Cimadamore mcimadamore at openjdk.org
Thu Apr 18 18:03:08 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.

This pull request has now been integrated.

Changeset: 8408a32d
Author:    Maurizio Cimadamore <mcimadamore at openjdk.org>
URL:       https://git.openjdk.org/babylon/commit/8408a32d201434408acf15420ff690575cd27c47
Stats:     67 lines in 3 files changed: 64 ins; 0 del; 3 mod

Missing conversion for some unary operators

Reviewed-by: psandoz

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

PR: https://git.openjdk.org/babylon/pull/55


More information about the babylon-dev mailing list