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@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits