[cfe-commits] [PATCH] differentiate between non-POD and incomplete with regard to va_arg

David Majnemer david.majnemer at gmail.com
Mon Jun 13 14:04:48 PDT 2011

On Mon, Jun 13, 2011 at 4:16 AM, David Majnemer
<david.majnemer at gmail.com> wrote:
> Hi,
> Right now, the code base is correct in saying that many types, like
> void, are non-POD when passed in to va_arg.
> While it is true that "struct X" is not a POD type, we do not say why
> it is not a POD type.
> I think that it would be more clear to say that the type is
> incomplete, this had a side effect of making a bit more sense in C99
> mode where non-POD is not really part of the lingo.
> The attached patch should make it a little more clear. It also moves a
> preexisting test to a more appropriate location.
> --
> David Majnemer

After talking some folks in #llvm and thinking about it a bit, I have
decided to implement the following:

The type must be complete per RequireCompleteType, otherwise issue an
error diagnostic
The type must be non-abstract per RequireNonAbstractType, otherwise
issue an error diagnostic
The type must be a POD per isPODType, otherwise issue a warning
diagnostic (-Wnon-pod-varargs)

I have attached the new patch

David Majnemer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: va_arg_incomplete2.patch
Type: application/octet-stream
Size: 4683 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20110613/73b2edf1/attachment.obj>

More information about the cfe-commits mailing list