101f151e0ffba72bcad770bea5f563a9b68ca050eJohn McCall// RUN: %clang_cc1 %s -triple i386-unknown-unknown -emit-llvm -o - -verify | FileCheck %s 2d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbar 358c3f9ec11cbe852a518bf2f83af46f938b7b852Chris Lattnerint g(); 458c3f9ec11cbe852a518bf2f83af46f938b7b852Chris Lattner 558c3f9ec11cbe852a518bf2f83af46f938b7b852Chris Lattnerint foo(int i) { 61eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return g(i); 758c3f9ec11cbe852a518bf2f83af46f938b7b852Chris Lattner} 858c3f9ec11cbe852a518bf2f83af46f938b7b852Chris Lattner 958c3f9ec11cbe852a518bf2f83af46f938b7b852Chris Lattnerint g(int i) { 101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return g(i); 1158c3f9ec11cbe852a518bf2f83af46f938b7b852Chris Lattner} 1258c3f9ec11cbe852a518bf2f83af46f938b7b852Chris Lattner 1305d2fb40859bbfc081ab08379452db876545bff6Chris Lattner// rdar://6110827 1405d2fb40859bbfc081ab08379452db876545bff6Chris Lattnertypedef void T(void); 1505d2fb40859bbfc081ab08379452db876545bff6Chris Lattnervoid test3(T f) { 1605d2fb40859bbfc081ab08379452db876545bff6Chris Lattner f(); 1705d2fb40859bbfc081ab08379452db876545bff6Chris Lattner} 1805d2fb40859bbfc081ab08379452db876545bff6Chris Lattner 19450da9832b31d9b2e90af7708d197e5b9e1af8c8Douglas Gregorint a(int); 20450da9832b31d9b2e90af7708d197e5b9e1af8c8Douglas Gregorint a() {return 1;} 21d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbar 22d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbarvoid f0() {} 2393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @f0() 24d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbar 25d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbarvoid f1(); 26d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbarvoid f2(void) { 27a923c9783e8bd8edd26e56df9eaacd872c43e20eJohn McCall// CHECK: call void @f1() 28d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbar f1(1, 2, 3); 29d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbar} 3093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @f1() 31d5d31801fc87239436fa349c89dce7797cf13537Daniel Dunbarvoid f1() {} 32ff75e1db95a53c7606e0bb114cf9adc59ab3d7f6Chris Lattner 331a4bb5cc1b545d7e359d20e30c0df54efd4b1b02John McCall// CHECK: define {{.*}} @f3{{\(\)|\(.*sret.*\)}} 34ff75e1db95a53c7606e0bb114cf9adc59ab3d7f6Chris Lattnerstruct foo { int X, Y, Z; } f3() { 35c36541e7bfa69cc63e2668a986bc99117559c545Mike Stump while (1) {} 36ff75e1db95a53c7606e0bb114cf9adc59ab3d7f6Chris Lattner} 37d6bebbfd510f3b495795b88aafd10ead3cb211e9Chris Lattner 38d6bebbfd510f3b495795b88aafd10ead3cb211e9Chris Lattner// PR4423 - This shouldn't crash in codegen 39d6bebbfd510f3b495795b88aafd10ead3cb211e9Chris Lattnervoid f4() {} 40b7d35893186564bf8c4e706e5d05df06b23d2dc7John McCallvoid f5() { f4(42); } //expected-warning {{too many arguments}} 410b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCall 420b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCall// Qualifiers on parameter types shouldn't make a difference. 430b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCallstatic void f6(const float f, const float g) { 440b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCall} 450b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCallvoid f7(float f, float g) { 460b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCall f6(f, g); 470b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCall// CHECK: define void @f7(float{{.*}}, float{{.*}}) 480b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCall// CHECK: call void @f6(float{{.*}}, float{{.*}}) 490b0ef0a70b8010c66fad2603e4423ef1c1dc7015John McCall} 50784f21121a6c9418ebd86baa6814e36e1176c410John McCall 51784f21121a6c9418ebd86baa6814e36e1176c410John McCall// PR6911 - incomplete function types 52784f21121a6c9418ebd86baa6814e36e1176c410John McCallstruct Incomplete; 53784f21121a6c9418ebd86baa6814e36e1176c410John McCallvoid f8_callback(struct Incomplete); 54784f21121a6c9418ebd86baa6814e36e1176c410John McCallvoid f8_user(void (*callback)(struct Incomplete)); 55784f21121a6c9418ebd86baa6814e36e1176c410John McCallvoid f8_test() { 56784f21121a6c9418ebd86baa6814e36e1176c410John McCall f8_user(&f8_callback); 5793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @f8_test() 58784f21121a6c9418ebd86baa6814e36e1176c410John McCall// CHECK: call void @f8_user({{.*}}* bitcast (void ()* @f8_callback to {{.*}}*)) 59784f21121a6c9418ebd86baa6814e36e1176c410John McCall// CHECK: declare void @f8_user({{.*}}*) 60784f21121a6c9418ebd86baa6814e36e1176c410John McCall// CHECK: declare void @f8_callback() 61784f21121a6c9418ebd86baa6814e36e1176c410John McCall} 62a0b7d2ed23c57c6fac4517aca22d2411ead698e4John McCall 63a0b7d2ed23c57c6fac4517aca22d2411ead698e4John McCall// PR10204: don't crash 64a0b7d2ed23c57c6fac4517aca22d2411ead698e4John McCallstatic void test9_helper(void) {} 65a0b7d2ed23c57c6fac4517aca22d2411ead698e4John McCallvoid test9() { 66a0b7d2ed23c57c6fac4517aca22d2411ead698e4John McCall (void) test9_helper; 67a0b7d2ed23c57c6fac4517aca22d2411ead698e4John McCall} 68