]> granicus.if.org Git - clang/commit
ANSI C requires that a call to an unprototyped function type succeed
authorJohn McCall <rjmccall@apple.com>
Wed, 21 Sep 2011 08:08:30 +0000 (08:08 +0000)
committerJohn McCall <rjmccall@apple.com>
Wed, 21 Sep 2011 08:08:30 +0000 (08:08 +0000)
commit01f151e0ffba72bcad770bea5f563a9b68ca050e
tree82059ede608914861b730d6334f0e312456da3a9
parent036277e3e7bfa3ccef96fabf0b34a75d9a7c015b
ANSI C requires that a call to an unprototyped function type succeed
if the definition has a non-variadic prototype with compatible
parameters.  Therefore, the default rule for such calls must be to
use a non-variadic convention.  Achieve this by casting the callee to
the function type with which it is required to be compatible, unless
the target specifically opts out and insists that unprototyped calls
should use the variadic rules.  The only case of that I'm aware of is
the x86-64 convention, which passes arguments the same way in both
cases but also sets a small amount of extra information;  here we seek
to maintain compatibility with GCC, which does set this when calling
an unprototyped function.

Addresses PR10810 and PR10713.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140241 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGExpr.cpp
lib/CodeGen/TargetInfo.cpp
lib/CodeGen/TargetInfo.h
test/CodeGen/builtin-expect.c
test/CodeGen/functions.c
test/CodeGen/kr-call.c
test/CodeGen/microsoft-call-conv.c
test/CodeGen/mrtd.c
test/CodeGen/stdcall-fastcall.c