It can compile on my Ubuntu:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10"

gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1

While "gcc -E", it gets the same output as RHEL's, but it can compile. I do
not know why was that.  :(

在 2011年12月20日 下午8:08,Stefan Hajnoczi <stefa...@gmail.com>写道:

> On Tue, Dec 20, 2011 at 10:47 AM, Dong Xu Wang
> <wdon...@linux.vnet.ibm.com> wrote:
> > 于 2011年12月20日 18:13, Stefan Hajnoczi 写道:
> >
> >> On Tue, Dec 20, 2011 at 05:03:47PM +0800, Dong Xu Wang wrote:
> >>>
> >>> From: Dong Xu Wang<wdon...@linux.vnet.ibm.com>
> >>>
> >>> On some platforms, __LINE__ will not expand to real number in
> >>> QEMU_BUILD_BUG_ON,
> >>> so if using QEMU_BUILD_BUG_ON twice, compiler will report errors. This
> >>> patch will
> >>> fix it.
> >>>
> >>> BTW, I got error message on RHEL 6.1/gcc 4.4.5.
> >>
> >>
> >> Can you post the gcc -E output of the file that produces the error as
> >> well as the gcc error output?
> >>
> >> Stefan
> >>
> >>
> >
> > I doubled the following lines in block/qcow2-snapshot.c(line 211 and
> 212):
> >
> > QEMU_BUILD_BUG_ON(offsetof(QCowHeader, snapshots_offset) !=
> > offsetof(QCowHeader, nb_snapshots) + sizeof(header_data.nb_snapshots));"
> >
> >
> > While "gcc -E -C -I. block/qcow2-snapshot.c", I can get:
> > typedef char
> >  qemu_build_bug_on____LINE__
> > # 241 "block/qcow2-snapshot.c"
> >    [(__builtin_offsetof (QCowHeader, snapshots_offset) !=
> __builtin_offsetof
> > (QCowHeader, nb_snapshots) + sizeof(header_data.nb_snapshots))?-1:1];
> >
> >       ;
> >  typedef char
> >  qemu_build_bug_on____LINE__
> > # 243 "block/qcow2-snapshot.c"
> >  [(__builtin_offsetof (QCowHeader, snapshots_offset) !=
> __builtin_offsetof
> > (QCowHeader, nb_snapshots) + sizeof(header_data.nb_snapshots))?-1:1];
> >
> > __LINE__ are not expanded to real line number.
> >
> >
> >
> > While normally compiling, error message is:
> >  CC    block/qcow2-snapshot.o
> > block/qcow2-snapshot.c: In function \u2018qcow2_write_snapshots\u2019:
> > block/qcow2-snapshot.c:244: error: redefinition of typedef
> > \u2018qemu_build_bug_on____LINE__\u2019
> > block/qcow2-snapshot.c:242: note: previous declaration of
> > \u2018qemu_build_bug_on____LINE__\u2019 was here
> > make: *** [block/qcow2-snapshot.o] Error 1
>
> Reviewed-by: Stefan Hajnoczi <stefa...@linux.vnet.ibm.com>
>
> This isn't a compiler-specific issue, it has never worked but we
> didn't realize it.  I suggest removing "On some platforms," from the
> patch description.  The preprocessor won't expand __LINE__ since there
> is a ## and it is inside the QEMU_BUILD_BUG_ON_MACRO():
>
>
> http://stackoverflow.com/questions/1597007/creating-c-macro-with-and-line-token-concatenation-with-positioning-macr
>
> Stefan
>
>

Reply via email to