qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH 00/25] VMState cleanups and conversion of networ


From: Paolo Bonzini
Subject: [Qemu-devel] Re: [PATCH 00/25] VMState cleanups and conversion of network drivers
Date: Tue, 20 Oct 2009 17:41:48 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.4pre) Gecko/20091014 Fedora/3.0-2.8.b4.fc11 Lightning/1.0pre Thunderbird/3.0b4

On 10/19/2009 09:15 PM, Jamie Lokier wrote:
__builtin_types_compatible_p(), __builtin_choose_exper and
__attribute__((__error__)) are good for informative error messages.

Unfortunately __attribute__((__error__)) cannot be applied in this case for several reasons:

1) it cannot apply to types so you cannot do

extern void compile_error (void);

#define raise_compile_error(x) \
  (((void __attribute__ ((error(x))) (*) (void)) x) ())

2) it only operates for calls, so you cannot use it in initializers

I whipped up a patch to add to GCC __builtin_compile_error, to be used inside __builtin_choose_expr:

#define typecheck(t1, t2) \
  __builtin_choose_expr (__builtin_types_compatible(t1, t2), (void)0, \
                         __builtin_compile_error (#t1 " and " #t2     \
                             "are not compatible types"))

#define if_types_compatible(t1, t2, value) (typecheck (t1, t2), value)

and I will send it upstream, but it will be a long time before it is in a released version (especially since GCC is currently in bug-fixing-only mode)---anyway Jamie got the array case to work, AFAIU.

Paolo




reply via email to

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