qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] rewrite QEMU_BUILD_BUG_ON


From: Dong Xu Wang
Subject: Re: [Qemu-devel] [PATCH] rewrite QEMU_BUILD_BUG_ON
Date: Tue, 20 Dec 2011 21:12:40 +0800

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 <address@hidden>写道:
On Tue, Dec 20, 2011 at 10:47 AM, Dong Xu Wang
<address@hidden> 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<address@hidden>
>>>
>>> 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 <address@hidden>

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

[Prev in Thread] Current Thread [Next in Thread]