DSA - CallTargets output

I was trying to use DSA to find the targets for indirect calls. I get
the correct targets for the example mentioned if the paper
(http://www.rw.cdl.uni-saarland.de/teaching/spa10/papers/dsa.pdf). I
tweaked that example a little bit and get the incorrect targets.

#include <stdio.h>
#include <stdlib.h>

typedef struct list{
struct list *Next;
int Data;

int Global = 10;

void do_all(list *L, void (*FP)(int *)){
L= L->Next;

void addG(int *X){
(*X) += Global;

void subtractG(int *X){
(*X) -= Global;

void subtractGToList(list *L){
do_all (L, subtractG);
void addGToList(list *L){
do_all (L, addG);

list *makeList (int Num){
list *New = malloc(sizeof(list));
New->Next = Num? makeList(Num - 1) : 0;
New->Data = Num;
return New;

int main(){
list *X = makeList(10);
list *Y = makeList (100);
int a;
void (*fp3)(list*);
scanf("%d", &a);
if (a%2 == 0)
fp3 = &addGToList;
fp3 = &subtractGToList;