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