[Libpqxx-general] Error with gcc 4.3, was: pqxx::connection crash under libpqxx 2.6.9 and 3.0.0, OSX Leopard

Kim Bisgaard kib+pg at dmi.dk
Mon Jul 21 07:05:10 UTC 2008


Hi,

This you get for opening your big mouth, Kim ....

This patch silences gcc - I do not vouch for that it is the "correct" 
solution:
--- src/util.cxx    (revision 1350)
+++ src/util.cxx    (working copy)
@@ -102,7 +102,7 @@
template<typename L, typename R>
  inline L absorb_digit(L value, R digit) throw ()
{
-  return 10*value + L(digit);
+  return L(10*value + L(digit));
}

Regards,
Kim


Jeroen Vermeulen wrote:
> Roger Leigh wrote:
>
>   
>>>> Also note that using --enable-maintainer-mode also fails with GCC 4.3
>>>> due to some of the -W options set in configure.ac not being valid for
>>>> the new GCC.
>>>>         
>>> configure.ac is supposed to test those for compatibility with the
>>> compiler...  Which are the problem ones?
>>>       
>> -Wno-long-double
>>     
>
> Okay, I'll try removing that.  IIRC long double is a standard type, so 
> compilers shouldn't warn about it anyway.  Leaving it out may break on 
> very old gcc versions, but we'll see.
>
>
>   
>> With 3.0.0 in SVN:
>>
>>  g++ -DHAVE_CONFIG_H -I../include -I../include -I/usr/include/postgresql -g -O2 -Werror -Wno-long-double -Wno-div-by-zero -ffor-scope -fstrict-aliasing -Wstrict-aliasing -funit-at-a-time -pedantic -fno-nonansi-builtins -Wall -Wmultichar -W -Wextra -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wconversion -Wctor-dtor-privacy -Wendif-labels -Wlogical-op -Woverlength-strings -Wredundant-decls -Wsign-compare -Wwrite-strings -Wnon-virtual-dtor -Wreorder -Wold-style-cast -Woverloaded-virtual -Wsign-promo -Wstrict-null-sentinel -Wformat-security -Winit-self -Wswitch -Wmissing-field-initializers -Wmissing-include-dirs -Wunused -funit-at-a-time -Werror -MT util.lo -MD -MP -MF .deps/util.Tpo -c util.cxx  -fPIC -DPIC -o .libs/util.o
>> cc1plus: warnings being treated as errors
>> util.cxx: In function ‘L<unnamed>::absorb_digit(L, R) [with L = short int, R = int]’:
>> util.cxx:122:   instantiated from ‘void<unnamed>::from_string_signed(const char*, T&) [with T = short int]’
>> util.cxx:382:   instantiated from here
>> util.cxx:105: error: conversion to ‘short int’ from ‘int’ may alter its value
>>     
>
> That's in absorb_digit():
>
> template<typename L, typename R>
> inline L absorb_digit(L value, R digit) throw ()
> {
>    return 10*value + L(digit);
> }
>
> I'm not too deep into the nitty-gritty of type theory anymore, but I 
> suppose this comes from the "10*value".  Does the warning/error go away 
> if you replace the 10 by L(10)?
>
>
> Jeroen
> _______________________________________________
> Libpqxx-general mailing list
> Libpqxx-general at pgfoundry.org
> http://pgfoundry.org/mailman/listinfo/libpqxx-general
>   


More information about the Libpqxx-general mailing list