[lkml]   [2007]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: Linux Kernel include files
    On Tue, Jun 26, 2007 at 09:32:39PM -0400, Kyle Moffett wrote:
    > On Jun 22, 2007, at 11:00:38, Adrian Bunk wrote:
    >> It would certainly help if Joerg would tell what exactly breaks, but I
    >> spot one likely problem in include/asm-i386/types.h:
    >> #if defined(__GNUC__) && !defined(__STRICT_ANSI__)
    >> typedef __signed__ long long __s64;
    >> typedef unsigned long long __u64;
    >> #endif
    >> It might make sense to remove the #if and simply require that a C compiler
    >> under Linux must know about the C99 "long long"?
    > Gah, this particular topic and a few other similar header-compatibility
    > ones show up once a month on LKML; I should probably just make a patch to
    > fix all the types.h files and be done with it. The proper solution is
    > this:
    > # if __STDC_VERSION__ >= 19901L
    > typedef signed long long __s64;
    > typedef unsigned long long __u64;
    > # elif defined(__GNUC__)
    > __extension__ typedef signed long long __s64;
    > __extension__ typedef unsigned long long __u64;
    > # else
    > # error "Your compiler doesn't support long long (IOW: It sucks). Please
    > get a new one"

    This part is wrong.

    gcc supported "long long" before C99 existed.
    And Joerg said the Sun cc supported "long long" before gcc did.

    > # endif
    > That way if you have any kind of vaguely-long-long-compatible compiler then
    > it will work, and otherwise you'll get a nice useful error message.

    No, consider a pre-C99 gcc version that supports "long long".

    > It
    > also makes sure that GCC doesn't spew warnings/errors when in c89-pedantic
    > mode. The "__extension__" keyword is designed for use in implementation
    > header files which want to use GCC-isms unconditionally.

    That's a good point I missed.

    What about:

    #if defined(__GNUC__) && __STDC_VERSION__ < 19901L
    __extension__ typedef signed long long __s64;
    __extension__ typedef unsigned long long __u64;
    typedef signed long long __s64;
    typedef unsigned long long __u64;

    > Cheers,
    > Kyle Moffett



    "Is there not promise of rain?" Ling Tan asked suddenly out
    of the darkness. There had been need of rain for many days.
    "Only a promise," Lao Er said.
    Pearl S. Buck - Dragon Seed

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2007-06-27 17:43    [W:0.029 / U:52.588 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site