------- Comment #9 from andreast at gcc dot gnu dot org  2007-01-23 22:10 
-------
Here is what I get when I add -ansi to the CXX flags:

gnu/java/nio/channels/natFileChannelImpl.cc: In member function 'void
gnu::java::nio::channels::FileChannelImpl::implTruncate(jlong)':
gnu/java/nio/channels/natFileChannelImpl.cc:262: error: invalid cast from type
'off_t' to type 'jlong'
gnu/java/nio/channels/natFileChannelImpl.cc:268: error: invalid cast from type
'off_t' to type 'jlong'
gnu/java/nio/channels/natFileChannelImpl.cc:270: error: no matching function
for call to 'longlong_t::longlong_t(__java_long)'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t::longlong_t()
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:     
           longlong_t::longlong_t(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc:274: error: conversion from 'jlong'
to non-scalar type 'off_t' requested
gnu/java/nio/channels/natFileChannelImpl.cc:279: error: no matching function
for call to 'longlong_t::longlong_t(jlong&)'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t::longlong_t()
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:     
           longlong_t::longlong_t(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc:282: error: no matching function
for call to 'longlong_t::longlong_t(jlong&)'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t::longlong_t()
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:     
           longlong_t::longlong_t(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc: In member function 'void
gnu::java::nio::channels::FileChannelImpl::seek(jlong)':
gnu/java/nio/channels/natFileChannelImpl.cc:294: error: no matching function
for call to 'longlong_t::longlong_t(jlong&)'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t::longlong_t()
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:     
           longlong_t::longlong_t(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc:295: error: no match for
'operator==' in 'r == -0x00000000000000001'
gnu/java/nio/channels/natFileChannelImpl.cc:297: error: cannot convert 'off_t'
to 'jlong' in assignment
gnu/java/nio/channels/natFileChannelImpl.cc: In member function 'virtual jlong
gnu::java::nio::channels::FileChannelImpl::size()':
gnu/java/nio/channels/natFileChannelImpl.cc:306: error: cannot convert 'off_t'
to 'jlong' in return
gnu/java/nio/channels/natFileChannelImpl.cc: In member function 'jint
gnu::java::nio::channels::FileChannelImpl::available()':
gnu/java/nio/channels/natFileChannelImpl.cc:423: error: conversion from 'int'
to non-scalar type 'longlong_t' requested
gnu/java/nio/channels/natFileChannelImpl.cc:426: error: conversion from 'int'
to non-scalar type 'off_t' requested
gnu/java/nio/channels/natFileChannelImpl.cc:426: error: no matching function
for call to 'longlong_t::longlong_t(int)'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t::longlong_t()
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:     
           longlong_t::longlong_t(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc:428: error: no match for
'operator-' in 'sb.stat::st_size - where'
gnu/java/nio/channels/natFileChannelImpl.cc: In member function 'jboolean
gnu::java::nio::channels::FileChannelImpl::lock(jlong, jlong, jboolean,
jboolean)':
gnu/java/nio/channels/natFileChannelImpl.cc:464: error: no match for
'operator=' in 'lockdata.flock::l_start = pos'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t& longlong_t::operator=(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc:465: error: no match for
'operator=' in 'lockdata.flock::l_len = len'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t& longlong_t::operator=(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc: In member function 'void
gnu::java::nio::channels::FileChannelImpl::unlock(jlong, jlong)':
gnu/java/nio/channels/natFileChannelImpl.cc:483: error: no match for
'operator=' in 'lockdata.flock::l_start = pos'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t& longlong_t::operator=(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc:484: error: no match for
'operator=' in 'lockdata.flock::l_len = len'
/export/data/devel-test/gcc-svn/objdir/./gcc/include/sys/types.h:70: note:
candidates are: longlong_t& longlong_t::operator=(const longlong_t&)
gnu/java/nio/channels/natFileChannelImpl.cc: In member function
'java::nio::MappedByteBuffer*
gnu::java::nio::channels::FileChannelImpl::mapImpl(jchar, jlong, jint)':
gnu/java/nio/channels/natFileChannelImpl.cc:508: error: conversion from 'jint'
to non-scalar type 'off_t' requested
gmake[3]: *** [gnu/java/nio/channels/natFileChannelImpl.lo] Error 1


This has to do with the fixincludes in sys/types.h from gcc I guess. At least
in this header we see this:

#if  !defined(__STRICT_ANSI__) && !defined(_NO_LONGLONG)
typedef long long               longlong_t;
typedef unsigned long long      u_longlong_t;
#else
/* used to reserve space and generate alignment */
typedef union {
        double  _d;
        int32_t _l[2];
} longlong_t;
typedef union {
        double          _d;
        uint32_t        _l[2];
} u_longlong_t;
#endif  /* __STDC__ - 0 == 0 && !defined(_NO_LONGLONG) */

and for off_t:

#if defined(_LP64) || _FILE_OFFSET_BITS == 32
typedef long            off_t;          /* offsets within files */
#elif _FILE_OFFSET_BITS == 64
typedef longlong_t      off_t;          /* offsets within files */
#endif

#if defined(_LARGEFILE64_SOURCE)
#ifdef _LP64
typedef off_t           off64_t;        /* offsets within files */
#else
typedef longlong_t      off64_t;        /* offsets within files */
#endif
#endif  /* _LARGEFILE64_SOURCE */

So we see that in the 32-bit part with strict ansi longlong is not defined.
This is what I read.

So '#undef sun' in a header (which one?)  seems for me the cheapest/easiest
solution.

Ah, yes, if I did not already mention it, I work on sparc-solaris8 ;) with
multilib build. The -m64 part built fine, btw.

Andreas


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30513

Reply via email to