[LLVMdev] CallTargets Analysis Incorrect

Thomas B. Jablin tjablin at CS.Princeton.EDU
Thu Sep 25 15:04:54 PDT 2008


Hi,
The call target pass in the poolalloc suite yields an incorrect output for the following short test program:

#include <stdio.h>

struct OP {
  void (*func)(struct OP*);
};

void bar(struct OP *op);

void foo(struct OP *op) {
  printf("Foo\n");
  op->func = bar;
}

void bar(struct OP *op) {
  printf("Bar\n");
  op->func = foo;
}

int main(int argc, char **argv) {
  int i;
  struct OP op;
  op.func = foo;
  for(i = 0; i < 10; ++i) {
    op.func(&op);
  }
  return 0;
}

Specifically, pass indicates that indirect function call in the main function may call the foo method and that the the list of callees is complete. In fact, the indirect function call can target both the foo and bar methods, so the list should be marked incomplete, or should include the other callees. Thanks.
Tom



More information about the llvm-dev mailing list