Question about FunctionDecl::isVariadic()

mats petersson via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 2 13:01:11 PDT 2015


Since "varargs" often involve some kind of special passing mechanisms [I've
seen implementations that build data block and pass a pointer to that,
rather than passing on the stack, for example], or additional code in the
recipient function, I would say that `f2()` does not mean `f2(...)`.

--
Mats

On 2 October 2015 at 20:16, Aaron Ballman via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Given the following two function declarations:
>
> void f1(...);
> void f2();
>
> It makes sense to me that isVariadic() returns true for f1 in both C
> and C++. It makes sense to me that isVariadic() returns false for f2
> in C++. I am confused as to why it returns false instead of true for
> C, however.
>
> In C11, 6.7.6.3p9 states: If the list terminates with an ellipsis (,
> ...), no information about the number or types of the parameters after
> the comma is supplied.
>
> p14 states, in part: "The empty list in a function declarator that is
> not part of a definition of that function specifies that no
> information about the number or types of the parameters is supplied."
>
> It seems to me that for function *declarations* (not definitions),
> isVariadic() should return true for f2 in C. Is there a reason it
> doesn't currently behave that way, or is this a bug?
>
> I ask because I was writing an AST matcher for isVariadic() for an
> in-progress checker, but the checker was failing to catch that f2 was
> a variadic function. I am not certain whether
> FunctionDecl::isVariadic() should be changed, whether the AST matcher
> isVariadic() should be smarter about C code, or whether the checker
> itself needs to be smarter about this particular behavior in C code.
> My gut reaction is that FunctionDecl::isVariadic() has a bug, but from
> looking at code elsewhere, everything seems to assume isVariadic()
> implies the ellipsis, which makes me think I just need to make my
> checker smarter.
>
> Thanks!
>
> ~Aaron
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151002/927ceb0e/attachment.html>


More information about the cfe-commits mailing list