Lists: | pgsql-bugs |
---|
From: | paul(dot)moore(at)centrify(dot)com |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #13788: compile error in generic_msvc.h |
Date: | 2015-12-01 16:54:57 |
Message-ID: | 20151201165457.2760.18019@wrigleys.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 13788
Logged by: paul moore
Email address: paul(dot)moore(at)centrify(dot)com
PostgreSQL version: 9.5beta1
Operating system: win server 2012
Description:
vs 2015, compiling spi execq sample
vc complains about this
1>c:\Program
Files\PostgreSQL\9.5\include\server\port/atomics/generic-msvc.h(91): error
C2664: 'LONG64 _InterlockedCompareExchange64(volatile LONG64
*,LONG64,LONG64)': cannot convert argument 1 from 'volatile uint64 *' to
'volatile LONG64 *'
same for the add64 function a few lines later
From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | paul(dot)moore(at)centrify(dot)com |
Cc: | pgsql-bugs(at)postgresql(dot)org, Andres Freund <andres(at)anarazel(dot)de> |
Subject: | Re: BUG #13788: compile error in generic_msvc.h |
Date: | 2015-12-01 21:35:01 |
Message-ID: | 5176.1449005701@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
paul(dot)moore(at)centrify(dot)com writes:
> Bug reference: 13788
> Logged by: paul moore
> Email address: paul(dot)moore(at)centrify(dot)com
> PostgreSQL version: 9.5beta1
> Operating system: win server 2012
> Description:
> vs 2015, compiling spi execq sample
> vc complains about this
> 1>c:\Program
> Files\PostgreSQL\9.5\include\server\port/atomics/generic-msvc.h(91): error
> C2664: 'LONG64 _InterlockedCompareExchange64(volatile LONG64
> *,LONG64,LONG64)': cannot convert argument 1 from 'volatile uint64 *' to
> 'volatile LONG64 *'
> same for the add64 function a few lines later
That's a bit weird. A perhaps plausible explanation would be that the
compiler is unhappy about passing an unsigned argument to a signed
parameter; but if they've tightened it up like that, why no similar
complaint for the 32-bit versions just above these?
Can you try inserting a cast to (volatile int64 *), just to see?
regards, tom lane
From: | Paul Moore <paul(dot)moore(at)centrify(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org>, Andres Freund <andres(at)anarazel(dot)de> |
Subject: | Re: BUG #13788: compile error in generic_msvc.h |
Date: | 2015-12-02 16:13:07 |
Message-ID: | BN4PR07MB2131DF8027DFBFD628475070F10E0@BN4PR07MB2131.namprd07.prod.outlook.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
The 32 bit functions are defined on unsigned types
From winbase.h
FORCEINLINE
unsigned
InterlockedCompareExchange(
_Inout_ _Interlocked_operand_ unsigned volatile *Destination,
_In_ unsigned Exchange,
_In_ unsigned Comperand
)
{
return (unsigned) _InterlockedCompareExchange((volatile long*) Destination, (long) Exchange, (long) Comperand);
}
The cast fixes the 64 bit case.
Full disclosure, I am compiling as c++. I think that might be the cause. I tried in a c project and did not get the same error
-----Original Message-----
From: Tom Lane [mailto:tgl(at)sss(dot)pgh(dot)pa(dot)us]
Sent: Tuesday, December 1, 2015 1:35 PM
To: Paul Moore <paul(dot)moore(at)centrify(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org; Andres Freund <andres(at)anarazel(dot)de>
Subject: Re: [BUGS] BUG #13788: compile error in generic_msvc.h
paul(dot)moore(at)centrify(dot)com writes:
> Bug reference: 13788
> Logged by: paul moore
> Email address: paul(dot)moore(at)centrify(dot)com
> PostgreSQL version: 9.5beta1
> Operating system: win server 2012
> Description:
> vs 2015, compiling spi execq sample
> vc complains about this
> 1>c:\Program
> Files\PostgreSQL\9.5\include\server\port/atomics/generic-msvc.h(91):
> error
> C2664: 'LONG64 _InterlockedCompareExchange64(volatile LONG64
> *,LONG64,LONG64)': cannot convert argument 1 from 'volatile uint64 *'
> to 'volatile LONG64 *'
> same for the add64 function a few lines later
That's a bit weird. A perhaps plausible explanation would be that the compiler is unhappy about passing an unsigned argument to a signed parameter; but if they've tightened it up like that, why no similar complaint for the 32-bit versions just above these?
Can you try inserting a cast to (volatile int64 *), just to see?
regards, tom lane
From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | Paul Moore <paul(dot)moore(at)centrify(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: BUG #13788: compile error in generic_msvc.h |
Date: | 2015-12-02 16:50:26 |
Message-ID: | 20151202165026.GK5136@alap3.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
On 2015-12-02 16:13:07 +0000, Paul Moore wrote:
> The 32 bit functions are defined on unsigned types
>
> From winbase.h
>
> FORCEINLINE
> unsigned
> InterlockedCompareExchange(
> _Inout_ _Interlocked_operand_ unsigned volatile *Destination,
> _In_ unsigned Exchange,
> _In_ unsigned Comperand
> )
> {
> return (unsigned) _InterlockedCompareExchange((volatile long*) Destination, (long) Exchange, (long) Comperand);
> }
>
> The cast fixes the 64 bit case.
>
> Full disclosure, I am compiling as c++. I think that might be the cause. I tried in a c project and did not get the same error
Given that win64 buildfarm members have happily been compiling this code
I suspect that's the cause. Are you including the headers with extern
"C" or not?
You're using SPI directly from C++? You got to be *very* careful doing
that - postgres uses longjmp which isn't necessarily compatible with C++
(doesn't call destructors to be called and such).
From: | Paul Moore <paul(dot)moore(at)centrify(dot)com> |
---|---|
To: | Andres Freund <andres(at)anarazel(dot)de> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: BUG #13788: compile error in generic_msvc.h |
Date: | 2015-12-03 17:02:31 |
Message-ID: | BN4PR07MB21318CFBCCED692610885141F10D0@BN4PR07MB2131.namprd07.prod.outlook.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
Yes on extern "C". I have other stuff working
Really what I am trying to do is invoke c# code. I am going to need to call SPI. I tried to find out if anybody else had done it and found nothing.
The c++ code is simply a thin shim from native c to c#
-----Original Message-----
From: Andres Freund [mailto:andres(at)anarazel(dot)de]
Sent: Wednesday, December 2, 2015 8:50 AM
To: Paul Moore <paul(dot)moore(at)centrify(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>; pgsql-bugs(at)postgresql(dot)org
Subject: Re: [BUGS] BUG #13788: compile error in generic_msvc.h
On 2015-12-02 16:13:07 +0000, Paul Moore wrote:
> The 32 bit functions are defined on unsigned types
>
> From winbase.h
>
> FORCEINLINE
> unsigned
> InterlockedCompareExchange(
> _Inout_ _Interlocked_operand_ unsigned volatile *Destination,
> _In_ unsigned Exchange,
> _In_ unsigned Comperand
> )
> {
> return (unsigned) _InterlockedCompareExchange((volatile long*)
> Destination, (long) Exchange, (long) Comperand); }
>
> The cast fixes the 64 bit case.
>
> Full disclosure, I am compiling as c++. I think that might be the
> cause. I tried in a c project and did not get the same error
Given that win64 buildfarm members have happily been compiling this code I suspect that's the cause. Are you including the headers with extern "C" or not?
You're using SPI directly from C++? You got to be *very* careful doing that - postgres uses longjmp which isn't necessarily compatible with C++ (doesn't call destructors to be called and such).
From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | Paul Moore <paul(dot)moore(at)centrify(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: BUG #13788: compile error in generic_msvc.h |
Date: | 2015-12-10 15:14:03 |
Message-ID: | 20151210151403.GB2551@alap3.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
Hi Paul,
As I don't have access to msvc: Could you try what Tom suggested in
http://archives.postgresql.org/message-id/5176.1449005701%40sss.pgh.pa.us ?
Regards,
Andres
On 2015-12-03 17:02:31 +0000, Paul Moore wrote:
> Yes on extern "C". I have other stuff working
>
> Really what I am trying to do is invoke c# code. I am going to need to call SPI. I tried to find out if anybody else had done it and found nothing.
>
> The c++ code is simply a thin shim from native c to c#
>
> -----Original Message-----
> From: Andres Freund [mailto:andres(at)anarazel(dot)de]
> Sent: Wednesday, December 2, 2015 8:50 AM
> To: Paul Moore <paul(dot)moore(at)centrify(dot)com>
> Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>; pgsql-bugs(at)postgresql(dot)org
> Subject: Re: [BUGS] BUG #13788: compile error in generic_msvc.h
>
> On 2015-12-02 16:13:07 +0000, Paul Moore wrote:
> > The 32 bit functions are defined on unsigned types
> >
> > From winbase.h
> >
> > FORCEINLINE
> > unsigned
> > InterlockedCompareExchange(
> > _Inout_ _Interlocked_operand_ unsigned volatile *Destination,
> > _In_ unsigned Exchange,
> > _In_ unsigned Comperand
> > )
> > {
> > return (unsigned) _InterlockedCompareExchange((volatile long*)
> > Destination, (long) Exchange, (long) Comperand); }
> >
> > The cast fixes the 64 bit case.
> >
> > Full disclosure, I am compiling as c++. I think that might be the
> > cause. I tried in a c project and did not get the same error
>
> Given that win64 buildfarm members have happily been compiling this code I suspect that's the cause. Are you including the headers with extern "C" or not?
>
> You're using SPI directly from C++? You got to be *very* careful doing that - postgres uses longjmp which isn't necessarily compatible with C++ (doesn't call destructors to be called and such).
>
>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs
Greetings,
Andres Freund
From: | Paul Moore <paul(dot)moore(at)centrify(dot)com> |
---|---|
To: | Andres Freund <andres(at)anarazel(dot)de> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: BUG #13788: compile error in generic_msvc.h |
Date: | 2015-12-10 17:27:08 |
Message-ID: | BN4PR07MB2131E7BF8BC8E8A443A5A0D3F1E90@BN4PR07MB2131.namprd07.prod.outlook.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
I put the cast in and it compiles with no complaint
-----Original Message-----
From: Andres Freund [mailto:andres(at)anarazel(dot)de]
Sent: Thursday, December 10, 2015 7:14 AM
To: Paul Moore <paul(dot)moore(at)centrify(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>; pgsql-bugs(at)postgresql(dot)org
Subject: Re: [BUGS] BUG #13788: compile error in generic_msvc.h
Hi Paul,
As I don't have access to msvc: Could you try what Tom suggested in http://archives.postgresql.org/message-id/5176.1449005701%40sss.pgh.pa.us ?
Regards,
Andres
On 2015-12-03 17:02:31 +0000, Paul Moore wrote:
> Yes on extern "C". I have other stuff working
>
> Really what I am trying to do is invoke c# code. I am going to need to call SPI. I tried to find out if anybody else had done it and found nothing.
>
> The c++ code is simply a thin shim from native c to c#
>
> -----Original Message-----
> From: Andres Freund [mailto:andres(at)anarazel(dot)de]
> Sent: Wednesday, December 2, 2015 8:50 AM
> To: Paul Moore <paul(dot)moore(at)centrify(dot)com>
> Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>; pgsql-bugs(at)postgresql(dot)org
> Subject: Re: [BUGS] BUG #13788: compile error in generic_msvc.h
>
> On 2015-12-02 16:13:07 +0000, Paul Moore wrote:
> > The 32 bit functions are defined on unsigned types
> >
> > From winbase.h
> >
> > FORCEINLINE
> > unsigned
> > InterlockedCompareExchange(
> > _Inout_ _Interlocked_operand_ unsigned volatile *Destination,
> > _In_ unsigned Exchange,
> > _In_ unsigned Comperand
> > )
> > {
> > return (unsigned) _InterlockedCompareExchange((volatile long*)
> > Destination, (long) Exchange, (long) Comperand); }
> >
> > The cast fixes the 64 bit case.
> >
> > Full disclosure, I am compiling as c++. I think that might be the
> > cause. I tried in a c project and did not get the same error
>
> Given that win64 buildfarm members have happily been compiling this code I suspect that's the cause. Are you including the headers with extern "C" or not?
>
> You're using SPI directly from C++? You got to be *very* careful doing that - postgres uses longjmp which isn't necessarily compatible with C++ (doesn't call destructors to be called and such).
>
>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs(at)postgresql(dot)org) To make
> changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs
Greetings,
Andres Freund