blob: 9a1750db663fe22070fe51695d1ebcdc0fc0480d [file] [log] [blame]
// A, B, func are in an SCC
// C is called indirectly from A/B
// The indirect call site in C is resolved, once we process the SCC
// But since, we never process the SCC graph again,
// we never inline func into the SCC graph(of A, B, and func) at that
// call site.
// when we inline the SCCGraph into D(due to call to A), the unresolved
// call site is also inlined. As it is complete and can be resolved
// we inline the SCC graph again, pulling in the unresolved call site
// again. This causes an infinte looping in BU.
//RUN: clang %s -c -emit-llvm -o - | \
//RUN: dsaopt -dsa-bu -dsa-td -disable-output
typedef int* (*funcptr)(int *);
static int* A(void);
static int* func(int * arg) {
A();
return arg;
}
static int* C(funcptr f, int *arg) {
(*f)(arg);
}
static int *B() {
func(A());
return C(func, A());
}
static int* A() {
return func(B());
}
static int* D() {
return A();
}