extern-inline.c revision f3f8d2a52ebc0acbe6269a0302f90c21668e2404
199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// RUN: %clang -S -emit-llvm -std=gnu89 -o - %s | FileCheck %s 299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// PR5253 399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant 499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// If an extern inline function is redefined, functions should call the 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// redefinition. 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnantextern inline int f(int a) {return a;} 799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnantint g(void) {return f(0);} 899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// CHECK: call i32 @f 97112dae6acac544a0271a85d95342c583441e2d1Dan Albertint f(int b) {return 1+b;} 107112dae6acac544a0271a85d95342c583441e2d1Dan Albert// CHECK: load i32* %{{.*}} 1199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// CHECK: add nsw i32 1, %{{.*}} 1299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnantint h(void) {return f(1);} 1399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// CHECK: call i32 @f 1499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant 1599be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// It shouldn't matter if the function was redefined static. 1699be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnantextern inline int f2(int a, int b) {return a+b;} 1799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnantint g2(void) {return f2(0,1);} 1899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// CHECK: call i32 @f2 1999be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnantstatic int f2(int a, int b) {return a*b;} 2099be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// CHECK: load i32* %{{.*}} 2199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// CHECK: load i32* %{{.*}} 2299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// CHECK: mul i32 %{{.*}}, %{{.*}} 2373d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnantint h2(void) {return f2(1,2);} 2499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// CHECK: call i32 @f2 2599be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant 2699be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant