BUG: SystemABI C_LONG and C_LONGLONG are the same

Ty Young youngty1997 at gmail.com
Thu May 14 23:15:34 UTC 2020


Currently with the newest builds SystemABI C_LONG and C_LONGLONG are the 
same:


System.out.println(SystemABI.C_LONG.equals(SystemABI.C_LONGLONG));


prints true.


Since C_LONG can be 32-bit, it should, IMO, be decoupled from 
C_LONGLONG. This also breaks my abstraction layer as if ladders like 
this hit C_LONG always on Linux:


public static <T extends Number, E extends AbstractNativeNumber<T>> E 
fromLayout(ValueLayout layout)
     {
         if(layout.equals(SystemABI.C_CHAR))
             return (E)new NativeByte();
         else if(layout.equals(SystemABI.C_SHORT))
             return (E)new NativeShort();
         else if(layout.equals(SystemABI.C_INT))
             return (E)new NativeInteger();
         else if(layout.equals(SystemABI.C_FLOAT))
             return (E)new NativeFloat();
         else if(layout.equals(SystemABI.C_DOUBLE))
             return (E)new NativeDouble();
         else if(layout.equals(SystemABI.C_LONG))
             return (E)new NativeLong();
         else if(layout.equals(SystemABI.C_LONGLONG))
             return (E)new NativeLongLong();

         throw new UnsupportedOperationException();
     }



More information about the panama-dev mailing list