From cbc038a6c3fcb45439473a70d0284916d47d900e Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 21 Sep 2011 08:08:30 +0000 Subject: 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. llvm-svn: 140241 --- clang/test/CodeGen/functions.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'clang/test/CodeGen/functions.c') diff --git a/clang/test/CodeGen/functions.c b/clang/test/CodeGen/functions.c index e51f93e5741..28e4bd0c829 100644 --- a/clang/test/CodeGen/functions.c +++ b/clang/test/CodeGen/functions.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -emit-llvm -o - -verify | FileCheck %s +// RUN: %clang_cc1 %s -triple i386-unknown-unknown -emit-llvm -o - -verify | FileCheck %s int g(); @@ -24,7 +24,7 @@ void f0() {} void f1(); void f2(void) { -// CHECK: call void @f1() +// CHECK: call void bitcast (void ()* @f1 to void (i32, i32, i32)*)(i32 1, i32 2, i32 3) f1(1, 2, 3); } // CHECK: define void @f1() -- cgit v1.2.3