cannot to compile PL/V8 on Fedora 20

Started by Pavel Stehuleover 11 years ago13 messages
#1Pavel Stehule
pavel.stehule@gmail.com

Hello

I am trying to compile PL/v8 without success. I have Postgres installed via
compilation from source code.

After make I got errors

[pavel@localhost plv8-1.4.2]$ make
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-fPIC -c -o plv8.o plv8.cc
plv8.cc:50:56: error: declaration of ‘Datum
plv8_call_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
Datum plv8_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:43:7: error: from previous declaration ‘Datum
plv8_call_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plv8_call_handler);
^
plv8.cc:51:58: error: declaration of ‘Datum
plv8_call_validator(FunctionCallInfo) throw ()’ has a different exception
specifier
Datum plv8_call_validator(PG_FUNCTION_ARGS) throw();
^
plv8.cc:44:7: error: from previous declaration ‘Datum
plv8_call_validator(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plv8_call_validator);
^
plv8.cc:52:60: error: declaration of ‘Datum
plcoffee_call_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
Datum plcoffee_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:45:7: error: from previous declaration ‘Datum
plcoffee_call_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plcoffee_call_handler);
^
plv8.cc:53:62: error: declaration of ‘Datum
plcoffee_call_validator(FunctionCallInfo) throw ()’ has a different
exception specifier
Datum plcoffee_call_validator(PG_FUNCTION_ARGS) throw();
^
plv8.cc:46:7: error: from previous declaration ‘Datum
plcoffee_call_validator(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plcoffee_call_validator);
^
plv8.cc:54:56: error: declaration of ‘Datum
plls_call_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
Datum plls_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:47:7: error: from previous declaration ‘Datum
plls_call_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plls_call_handler);
^
plv8.cc:55:58: error: declaration of ‘Datum
plls_call_validator(FunctionCallInfo) throw ()’ has a different exception
specifier
Datum plls_call_validator(PG_FUNCTION_ARGS) throw();
^
plv8.cc:48:7: error: from previous declaration ‘Datum
plls_call_validator(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plls_call_validator);
^
plv8.cc:63:58: error: declaration of ‘Datum
plv8_inline_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
Datum plv8_inline_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:60:7: error: from previous declaration ‘Datum
plv8_inline_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plv8_inline_handler);
^
plv8.cc:64:62: error: declaration of ‘Datum
plcoffee_inline_handler(FunctionCallInfo) throw ()’ has a different
exception specifier
Datum plcoffee_inline_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:61:7: error: from previous declaration ‘Datum
plcoffee_inline_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plcoffee_inline_handler);
^
plv8.cc:65:58: error: declaration of ‘Datum
plls_inline_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
Datum plls_inline_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:62:7: error: from previous declaration ‘Datum
plls_inline_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plls_inline_handler);
^
plv8.cc: In function ‘Datum plv8_call_handler(FunctionCallInfo)’:
plv8.cc:310:50: error: declaration of ‘Datum
plv8_call_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
plv8_call_handler(PG_FUNCTION_ARGS) throw()
^
plv8.cc:50:7: error: from previous declaration ‘Datum
plv8_call_handler(FunctionCallInfo)’
Datum plv8_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc: In function ‘Datum plcoffee_call_handler(FunctionCallInfo)’:
plv8.cc:316:54: error: declaration of ‘Datum
plcoffee_call_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
plcoffee_call_handler(PG_FUNCTION_ARGS) throw()
^
plv8.cc:52:7: error: from previous declaration ‘Datum
plcoffee_call_handler(FunctionCallInfo)’
Datum plcoffee_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc: In function ‘Datum plls_call_handler(FunctionCallInfo)’:
plv8.cc:322:50: error: declaration of ‘Datum
plls_call_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
plls_call_handler(PG_FUNCTION_ARGS) throw()
^
plv8.cc:54:7: error: from previous declaration ‘Datum
plls_call_handler(FunctionCallInfo)’
Datum plls_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc: In function ‘Datum plv8_inline_handler(FunctionCallInfo)’:
plv8.cc:357:52: error: declaration of ‘Datum
plv8_inline_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
plv8_inline_handler(PG_FUNCTION_ARGS) throw()
^
plv8.cc:63:7: error: from previous declaration ‘Datum
plv8_inline_handler(FunctionCallInfo)’
Datum plv8_inline_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc: In function ‘Datum plcoffee_inline_handler(FunctionCallInfo)’:
plv8.cc:363:56: error: declaration of ‘Datum
plcoffee_inline_handler(FunctionCallInfo) throw ()’ has a different
exception specifier
plcoffee_inline_handler(PG_FUNCTION_ARGS) throw()
^
plv8.cc:64:7: error: from previous declaration ‘Datum
plcoffee_inline_handler(FunctionCallInfo)’
Datum plcoffee_inline_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc: In function ‘Datum plls_inline_handler(FunctionCallInfo)’:
plv8.cc:369:52: error: declaration of ‘Datum
plls_inline_handler(FunctionCallInfo) throw ()’ has a different exception
specifier
plls_inline_handler(PG_FUNCTION_ARGS) throw()
^
plv8.cc:65:7: error: from previous declaration ‘Datum
plls_inline_handler(FunctionCallInfo)’
Datum plls_inline_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc: In function ‘Datum plv8_call_validator(FunctionCallInfo)’:
plv8.cc:749:52: error: declaration of ‘Datum
plv8_call_validator(FunctionCallInfo) throw ()’ has a different exception
specifier
plv8_call_validator(PG_FUNCTION_ARGS) throw()
^
plv8.cc:51:7: error: from previous declaration ‘Datum
plv8_call_validator(FunctionCallInfo)’
Datum plv8_call_validator(PG_FUNCTION_ARGS) throw();
^
plv8.cc: In function ‘Datum plcoffee_call_validator(FunctionCallInfo)’:
plv8.cc:755:56: error: declaration of ‘Datum
plcoffee_call_validator(FunctionCallInfo) throw ()’ has a different
exception specifier
plcoffee_call_validator(PG_FUNCTION_ARGS) throw()
^
plv8.cc:53:7: error: from previous declaration ‘Datum
plcoffee_call_validator(FunctionCallInfo)’
Datum plcoffee_call_validator(PG_FUNCTION_ARGS) throw();
^
plv8.cc: In function ‘Datum plls_call_validator(FunctionCallInfo)’:
plv8.cc:761:52: error: declaration of ‘Datum
plls_call_validator(FunctionCallInfo) throw ()’ has a different exception
specifier
plls_call_validator(PG_FUNCTION_ARGS) throw()
^
plv8.cc:55:7: error: from previous declaration ‘Datum
plls_call_validator(FunctionCallInfo)’
Datum plls_call_validator(PG_FUNCTION_ARGS) throw();
^
make: *** [plv8.o] Error 1

I don't understand C++ well, so I don't know how to fix it.

Some ideas how to fix it?

Thank you

Pavel Stehule

PL/v8: plv8-1.4.2
gcc: gcc (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7)
Linux localhost.localdomain 3.13.10-200.fc20.x86_64 #1 SMP Mon Apr 14
20:34:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

#2Michael Paquier
michael.paquier@gmail.com
In reply to: Pavel Stehule (#1)
Re: cannot to compile PL/V8 on Fedora 20

On Mon, May 12, 2014 at 8:10 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:

g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-fPIC -c -o plv8.o plv8.cc
plv8.cc:50:56: error: declaration of 'Datum
plv8_call_handler(FunctionCallInfo) throw ()' has a different exception
specifier
Datum plv8_call_handler(PG_FUNCTION_ARGS) throw();
Some ideas how to fix it?

It seems that you are compiling on the outdated branch staticlink. On
either master or r1.4 it will work properly on Fedora 20, at least it
works for me.
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Pavel Stehule
pavel.stehule@gmail.com
In reply to: Michael Paquier (#2)
Re: cannot to compile PL/V8 on Fedora 20

2014-05-12 13:45 GMT+02:00 Michael Paquier <michael.paquier@gmail.com>:

On Mon, May 12, 2014 at 8:10 PM, Pavel Stehule <pavel.stehule@gmail.com>
wrote:

g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-fPIC -c -o plv8.o plv8.cc
plv8.cc:50:56: error: declaration of 'Datum
plv8_call_handler(FunctionCallInfo) throw ()' has a different exception
specifier
Datum plv8_call_handler(PG_FUNCTION_ARGS) throw();
Some ideas how to fix it?

It seems that you are compiling on the outdated branch staticlink. On
either master or r1.4 it will work properly on Fedora 20, at least it
works for me.

How I can check it?

I had same bug with scientific linux and I expected so this problem will be
solved on new Fedora. On second computer on newer system I had same problem.

Some problem can be in my g++ environment - it is default Fedora.

Pavel

Show quoted text

--
Michael

#4Andrew Dunstan
andrew@dunslane.net
In reply to: Pavel Stehule (#1)
Re: cannot to compile PL/V8 on Fedora 20

On 05/12/2014 07:10 AM, Pavel Stehule wrote:

Hello

I am trying to compile PL/v8 without success. I have Postgres
installed via compilation from source code.

After make I got errors

[pavel@localhost plv8-1.4.2]$ make
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE
-I/usr/include/libxml2 -fPIC -c -o plv8.o plv8.cc
plv8.cc:50:56: error: declaration of ‘Datum
plv8_call_handler(FunctionCallInfo) throw ()’ has a different
exception specifier
Datum plv8_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:43:7: error: from previous declaration ‘Datum
plv8_call_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plv8_call_handler);

This looks like a result of commit
<http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=e7128e8dbb305059c30ec085461297e619bcbff4&gt;
Maybe we need a way of telling the preprocessor to suppress the
generation of a prototype?

cheers

andrew

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#5Pavel Stehule
pavel.stehule@gmail.com
In reply to: Andrew Dunstan (#4)
Re: cannot to compile PL/V8 on Fedora 20

2014-05-12 15:42 GMT+02:00 Andrew Dunstan <andrew@dunslane.net>:

On 05/12/2014 07:10 AM, Pavel Stehule wrote:

Hello

I am trying to compile PL/v8 without success. I have Postgres installed
via compilation from source code.

After make I got errors

[pavel@localhost plv8-1.4.2]$ make
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-fPIC -c -o plv8.o plv8.cc
plv8.cc:50:56: error: declaration of ‘Datum plv8_call_handler(FunctionCallInfo)
throw ()’ has a different exception specifier
Datum plv8_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:43:7: error: from previous declaration ‘Datum plv8_call_handler(
FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plv8_call_handler);

This looks like a result of commit <http://git.postgresql.org/
gitweb/?p=postgresql.git;a=commitdiff;h=e7128e8dbb305059c30ec085461297
e619bcbff4> Maybe we need a way of telling the preprocessor to suppress
the generation of a prototype?

I got same result with tarball 9.2.4 released 2014-04-04

Pavel

Show quoted text

cheers

andrew

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#4)
Re: cannot to compile PL/V8 on Fedora 20

Andrew Dunstan <andrew@dunslane.net> writes:

On 05/12/2014 07:10 AM, Pavel Stehule wrote:

I am trying to compile PL/v8 without success. I have Postgres
installed via compilation from source code.

plv8.cc:50:56: error: declaration of ‘Datum
plv8_call_handler(FunctionCallInfo) throw ()’ has a different
exception specifier
Datum plv8_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:43:7: error: from previous declaration ‘Datum
plv8_call_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plv8_call_handler);

This looks like a result of commit
<http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=e7128e8dbb305059c30ec085461297e619bcbff4&gt;

Ouch. I was a bit suspicious of that change from the start, but it hadn't
occurred to me that functions written in C++ would have an issue with it.

Maybe we need a way of telling the preprocessor to suppress the
generation of a prototype?

Maybe we need to revert that patch altogether. Dealing with this is
likely to introduce much more pain and confusion than the change is worth.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#7Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#6)
Re: cannot to compile PL/V8 on Fedora 20

2014-05-12 16:31 GMT+02:00 Tom Lane <tgl@sss.pgh.pa.us>:

Andrew Dunstan <andrew@dunslane.net> writes:

On 05/12/2014 07:10 AM, Pavel Stehule wrote:

I am trying to compile PL/v8 without success. I have Postgres
installed via compilation from source code.

plv8.cc:50:56: error: declaration of ‘Datum
plv8_call_handler(FunctionCallInfo) throw ()’ has a different
exception specifier
Datum plv8_call_handler(PG_FUNCTION_ARGS) throw();
^
plv8.cc:43:7: error: from previous declaration ‘Datum
plv8_call_handler(FunctionCallInfo)’
PG_FUNCTION_INFO_V1(plv8_call_handler);

This looks like a result of commit
<

http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=e7128e8dbb305059c30ec085461297e619bcbff4

Ouch. I was a bit suspicious of that change from the start, but it hadn't
occurred to me that functions written in C++ would have an issue with it.

Maybe we need a way of telling the preprocessor to suppress the
generation of a prototype?

Maybe we need to revert that patch altogether. Dealing with this is
likely to introduce much more pain and confusion than the change is worth.

After returning back before this commit I cannot compile PL/V8 still but
with more solvable bug

g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-fPIC -c -o plv8.o plv8.cc
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-fPIC -c -o plv8_type.o plv8_type.cc
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-fPIC -c -o plv8_func.o plv8_func.cc
plv8_func.cc: In function ‘v8::Handle<v8::Value> plv8_Prepare(const
v8::Arguments&)’:
plv8_func.cc:521:47: error: too few arguments to function ‘void
parseTypeString(const char*, Oid*, int32*, bool)’
parseTypeString(typestr, &types[i], &typemod);
^
In file included from plv8_func.cc:22:0:
/usr/local/pgsql/include/server/parser/parse_type.h:50:13: note: declared
here
extern void parseTypeString(const char *str, Oid *typeid_p, int32
*typmod_p, bool missing_ok);
^
make: *** [plv8_func.o] Error 1

so the main issue is really this commit

Regards

Pavel

p.s. my tests on 9.2 was messy probably

Show quoted text

regards, tom lane

#8Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#7)
Re: cannot to compile PL/V8 on Fedora 20

On 5/12/14, 11:05 AM, Pavel Stehule wrote:

After returning back before this commit I cannot compile PL/V8 still but
with more solvable bug

g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE
-I/usr/include/libxml2 -fPIC -c -o plv8.o plv8.cc
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE
-I/usr/include/libxml2 -fPIC -c -o plv8_type.o plv8_type.cc
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE
-I/usr/include/libxml2 -fPIC -c -o plv8_func.o plv8_func.cc
plv8_func.cc: In function ‘v8::Handle<v8::Value> plv8_Prepare(const
v8::Arguments&)’:
plv8_func.cc:521:47: error: too few arguments to function ‘void
parseTypeString(const char*, Oid*, int32*, bool)’
parseTypeString(typestr, &types[i], &typemod);
^
In file included from plv8_func.cc:22:0:
/usr/local/pgsql/include/server/parser/parse_type.h:50:13: note:
declared here
extern void parseTypeString(const char *str, Oid *typeid_p, int32
*typmod_p, bool missing_ok);
^
make: *** [plv8_func.o] Error 1

so the main issue is really this commit

You need plv8 master branch (unreleased), which fixes all these issues.
No released version of plv8 works with 9.4 at the moment.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#9Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#8)
Re: cannot to compile PL/V8 on Fedora 20

2014-05-12 18:36 GMT+02:00 Peter Eisentraut <peter_e@gmx.net>:

On 5/12/14, 11:05 AM, Pavel Stehule wrote:

After returning back before this commit I cannot compile PL/V8 still but
with more solvable bug

g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE
-I/usr/include/libxml2 -fPIC -c -o plv8.o plv8.cc
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE
-I/usr/include/libxml2 -fPIC -c -o plv8_type.o plv8_type.cc
g++ -Wall -O2 -I. -I./ -I/usr/local/pgsql/include/server
-I/usr/local/pgsql/include/internal -D_GNU_SOURCE
-I/usr/include/libxml2 -fPIC -c -o plv8_func.o plv8_func.cc
plv8_func.cc: In function ‘v8::Handle<v8::Value> plv8_Prepare(const
v8::Arguments&)’:
plv8_func.cc:521:47: error: too few arguments to function ‘void
parseTypeString(const char*, Oid*, int32*, bool)’
parseTypeString(typestr, &types[i], &typemod);
^
In file included from plv8_func.cc:22:0:
/usr/local/pgsql/include/server/parser/parse_type.h:50:13: note:
declared here
extern void parseTypeString(const char *str, Oid *typeid_p, int32
*typmod_p, bool missing_ok);
^
make: *** [plv8_func.o] Error 1

so the main issue is really this commit

You need plv8 master branch (unreleased), which fixes all these issues.
No released version of plv8 works with 9.4 at the moment.

ok, I'll check it

Thank you

Pavel

#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#8)
Re: cannot to compile PL/V8 on Fedora 20

Peter Eisentraut <peter_e@gmx.net> writes:

You need plv8 master branch (unreleased), which fixes all these issues.

How does it deal with the function declaration incompatibility problem?

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#11Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#10)
Re: cannot to compile PL/V8 on Fedora 20

On 5/12/14, 12:42 PM, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

You need plv8 master branch (unreleased), which fixes all these issues.

How does it deal with the function declaration incompatibility problem?

commit df92ced297282ffbb13e95748543b6c52ad4d238
Author: Hitoshi Harada <umi.tanuki@gmail.com>
Date: Wed May 7 01:28:18 2014 -0700

Remove exception specifier from PG callbacks.

9.4 includes function declaration in PG_FUNCTION_INFO_V1 macro, which is
not compatible with ours using exception specifiers. Actually I don't
see the reason we have them so simply I remove them.

That said, I'm not yet sure what the overall right answer is here.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#12Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Eisentraut (#11)
Re: cannot to compile PL/V8 on Fedora 20

Peter Eisentraut wrote:

On 5/12/14, 12:42 PM, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

You need plv8 master branch (unreleased), which fixes all these issues.

How does it deal with the function declaration incompatibility problem?

commit df92ced297282ffbb13e95748543b6c52ad4d238
Author: Hitoshi Harada <umi.tanuki@gmail.com>
Date: Wed May 7 01:28:18 2014 -0700

Remove exception specifier from PG callbacks.

9.4 includes function declaration in PG_FUNCTION_INFO_V1 macro, which is
not compatible with ours using exception specifiers. Actually I don't
see the reason we have them so simply I remove them.

Do C++ exception specifiers in fmgr V1 functions work at all?

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#13Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#11)
Re: cannot to compile PL/V8 on Fedora 20

Peter Eisentraut <peter_e@gmx.net> writes:

On 5/12/14, 12:42 PM, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

You need plv8 master branch (unreleased), which fixes all these issues.

How does it deal with the function declaration incompatibility problem?

commit df92ced297282ffbb13e95748543b6c52ad4d238
Author: Hitoshi Harada <umi.tanuki@gmail.com>
Date: Wed May 7 01:28:18 2014 -0700

Remove exception specifier from PG callbacks.

9.4 includes function declaration in PG_FUNCTION_INFO_V1 macro, which is
not compatible with ours using exception specifiers. Actually I don't
see the reason we have them so simply I remove them.

That said, I'm not yet sure what the overall right answer is here.

Hm. If you're writing SQL functions in C++, you definitely don't want
them throwing any C++ exceptions out to the core backend; so the throw()
declaration is sensible and might help catch coding errors. That means
that Hitoshi-san's solution is just a quick hack rather than a desirable
answer.

We could perhaps use an "#ifdef __cplusplus" in the declaration of
PG_FUNCTION_INFO_V1 to forcibly put a "throw()" into the extern when
compiling C++. That would break less-carefully-written C++ code, but
the fix would be easy (unless they are throwing exceptions, but then
they've got a bug to fix anyway).

I'm concerned though that this may not be the only use-case for
decorations on those externs. A slightly more flexible answer
is to make it look like

#ifdef __cplusplus
#define PG_FUNCTION_DECORATION throw()
#else
#define PG_FUNCTION_DECORATION
#endif

#define PG_FUNCTION_INFO_V1(funcname) \
Datum funcname(PG_FUNCTION_ARGS) PG_FUNCTION_DECORATION; \
extern ...

which would leave the door open for modules to redefine
PG_FUNCTION_DECORATION if they had to. On the other hand it could
reasonably be argued that that would largely break the point of
having a uniform extern declaration in the first place.

Still wondering if we shouldn't just revert this change as being more
pain than gain.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers