On 10/27/17 9:37 AM, David Holmes wrote:
src/hotspot/share/c1/c1_LinearScan.cpp

 ConstantIntValue((jint)0);

why is this cast needed? what causes the ambiguity? (If this was a template I'd understand ;-) ). Also didn't you change that constructor to take an int anyway - not that I think it should - see below.

Yes, it caused an ambiguity.  0 matches 'int' but it doesn't match 'long' better than any pointer type.  So this cast is needed.

But you changed the constructor to take an int!

 class ConstantIntValue: public ScopeValue {
  private:
-  jint _value;
+  int _value;
  public:
-  ConstantIntValue(jint value)         { _value = value; }
+  ConstantIntValue(int value)          { _value = value; }

I changed this back to not take an int and changed c1_LinearScan.cpp to have the (jint)0 cast and output.cp needed (jint)0 casts.  0L doesn't work for platforms where jint is an 'int' rather than a long because it's ambiguous with the functions that take a pointer type. Probably better to keep the type of ConstantIntValue consistent with j types.

Thanks,
Coleen

Reply via email to