Re: Question re: Usage of JNICALL with varargs function with 32bit compilers

2019-06-21 Thread Steve Groeger
Hi Thomas,

Although this is just a warning and doesn't cause any issues, other than 
them being generated and possibly causing the builds to fail, are you 
saying we would not want to spend time removing these warnings? I know 
this is only an issue when building using 32bit platforms and these 
platforms are few and far between as most platforms are 64 bit and as such 
I wouldn't want to spend time looking at this if this is deemed 
unnecessary. 

Thanks
Steve Groeger
IBM Runtime Technologies
Hursley, Winchester
Tel: (44) 1962 816911  Mobex: 279990  Mobile: 07718 517 129
Fax (44) 1962 816800
Lotus Notes: Steve Groeger/UK/IBM
Internet: groe...@uk.ibm.com

Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU



From:   "Thomas Stüfe" 
To: Steve Groeger 
Cc: core-libs 
Date:   18/06/2019 13:01
Subject:    Re: Question re: Usage of JNICALL with varargs function 
with 32bit compilers



Hi Steve,

I always saw this as a harmless warning, safe to ignore, since both caller 
and callee are forced back to the same convention so it all works out in 
the end. Or can you envision a scenario where this would be harmfull?

Thank god Microsoft abandoned this calling convention circus with 64bit.

Cheers, Thomas


On Tue, Jun 18, 2019 at 1:31 PM Steve Groeger  wrote:
Hi all, 

I had a query regarding the use of JNICALL with varargs functions, which I 

am hoping someone can comment on.

As explained on MSDN at [1], all functions declared as __stdcall that have 

variable parameters (varargs) will be forced back to __cdecl by the MSVC. 
In such case, keeping JNICALL for varargs functions/function pointers 
turns out be inappropriate.
e.g.

include/jni.h
jobject (JNICALL *NewObject)
  (JNIEnv *env, jclass clazz, jmethodID methodID, ...);

According to [2], stdcall does not support variadic calls in C on 32-bit 
x86 targets. 

When compiling a JNI native (calling NewObject) with Clang, it ends up 
with the warning as follows:
...\include\jni.h:277:14: warning: stdcall calling convention ignored on 
variadic function [-Wignored-attributes]
jobject (JNICALL *NewObject)
 ^

So basically the compiler is saying it can't do what was requested, as 
such should we stop asking for JNICALL on varargs functions. 
Doing so will only improve the portability of code to a wider set of 
compilers.

Comments?

[1] https://msdn.microsoft.com/en-us/library/zxk0tw93.aspx
[2] https://clang.llvm.org/docs/AttributeReference.html#stdcall

Thanks
Steve Groeger
IBM Runtime Technologies
Hursley, Winchester
Tel: (44) 1962 816911  Mobex: 279990  Mobile: 07718 517 129
Fax (44) 1962 816800
Lotus Notes: Steve Groeger/UK/IBM
Internet: groe...@uk.ibm.com

Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU



Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU



Re: Question re: Usage of JNICALL with varargs function with 32bit compilers

2019-06-18 Thread Steve Groeger
Hi Thomas, 

There are not issues caused by this, as you state, the compile forces the 
callee and caller back to the same convention.
The only issue we had was with the amount of warning that were produced 
when we (IBM) compiled the jdk.
We avoided the error by adding -Wno-ignored-attributes in the makefile, 
but that was more of a work-around than an actual fix.

Thanks
Steve Groeger
IBM Runtime Technologies
Hursley, Winchester
Tel: (44) 1962 816911  Mobex: 279990  Mobile: 07718 517 129
Fax (44) 1962 816800
Lotus Notes: Steve Groeger/UK/IBM
Internet: groe...@uk.ibm.com

Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU



From:   "Thomas Stüfe" 
To: Steve Groeger 
Cc: core-libs 
Date:   18/06/2019 13:01
Subject:    Re: Question re: Usage of JNICALL with varargs function 
with 32bit compilers



Hi Steve,

I always saw this as a harmless warning, safe to ignore, since both caller 
and callee are forced back to the same convention so it all works out in 
the end. Or can you envision a scenario where this would be harmfull?

Thank god Microsoft abandoned this calling convention circus with 64bit.

Cheers, Thomas


On Tue, Jun 18, 2019 at 1:31 PM Steve Groeger  wrote:
Hi all, 

I had a query regarding the use of JNICALL with varargs functions, which I 

am hoping someone can comment on.

As explained on MSDN at [1], all functions declared as __stdcall that have 

variable parameters (varargs) will be forced back to __cdecl by the MSVC. 
In such case, keeping JNICALL for varargs functions/function pointers 
turns out be inappropriate.
e.g.

include/jni.h
jobject (JNICALL *NewObject)
  (JNIEnv *env, jclass clazz, jmethodID methodID, ...);

According to [2], stdcall does not support variadic calls in C on 32-bit 
x86 targets. 

When compiling a JNI native (calling NewObject) with Clang, it ends up 
with the warning as follows:
...\include\jni.h:277:14: warning: stdcall calling convention ignored on 
variadic function [-Wignored-attributes]
jobject (JNICALL *NewObject)
 ^

So basically the compiler is saying it can't do what was requested, as 
such should we stop asking for JNICALL on varargs functions. 
Doing so will only improve the portability of code to a wider set of 
compilers.

Comments?

[1] https://msdn.microsoft.com/en-us/library/zxk0tw93.aspx
[2] https://clang.llvm.org/docs/AttributeReference.html#stdcall

Thanks
Steve Groeger
IBM Runtime Technologies
Hursley, Winchester
Tel: (44) 1962 816911  Mobex: 279990  Mobile: 07718 517 129
Fax (44) 1962 816800
Lotus Notes: Steve Groeger/UK/IBM
Internet: groe...@uk.ibm.com

Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU



Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU



Re: Question re: Usage of JNICALL with varargs function with 32bit compilers

2019-06-18 Thread Thomas Stüfe
Hi Steve,

I always saw this as a harmless warning, safe to ignore, since both caller
and callee are forced back to the same convention so it all works out in
the end. Or can you envision a scenario where this would be harmfull?

Thank god Microsoft abandoned this calling convention circus with 64bit.

Cheers, Thomas


On Tue, Jun 18, 2019 at 1:31 PM Steve Groeger  wrote:

> Hi all,
>
> I had a query regarding the use of JNICALL with varargs functions, which I
> am hoping someone can comment on.
>
> As explained on MSDN at [1], all functions declared as __stdcall that have
> variable parameters (varargs) will be forced back to __cdecl by the MSVC.
> In such case, keeping JNICALL for varargs functions/function pointers
> turns out be inappropriate.
> e.g.
>
> include/jni.h
> jobject (JNICALL *NewObject)
>   (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
>
> According to [2], stdcall does not support variadic calls in C on 32-bit
> x86 targets.
>
> When compiling a JNI native (calling NewObject) with Clang, it ends up
> with the warning as follows:
> ...\include\jni.h:277:14: warning: stdcall calling convention ignored on
> variadic function [-Wignored-attributes]
> jobject (JNICALL *NewObject)
>  ^
>
> So basically the compiler is saying it can't do what was requested, as
> such should we stop asking for JNICALL on varargs functions.
> Doing so will only improve the portability of code to a wider set of
> compilers.
>
> Comments?
>
> [1] https://msdn.microsoft.com/en-us/library/zxk0tw93.aspx
> [2] https://clang.llvm.org/docs/AttributeReference.html#stdcall
>
> Thanks
> Steve Groeger
> IBM Runtime Technologies
> Hursley, Winchester
> Tel: (44) 1962 816911  Mobex: 279990  Mobile: 07718 517 129
> Fax (44) 1962 816800
> Lotus Notes: Steve Groeger/UK/IBM
> Internet: groe...@uk.ibm.com
>
> Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales with number
> 741598.
> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
> Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales with number
> 741598.
> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
>
>