// RUN: %clang_cc1 -emit-llvm %s -o /dev/null // Test list stuff void *malloc(unsigned); // Test opaque structure support. the list type is defined later struct list; struct list *PassThroughList(struct list *L) { return L; } // Recursive data structure tests... typedef struct list { int Data; struct list *Next; } list; list *Data; void foo() { static int Foo = 0; // Test static local variable Foo += 1; // Increment static variable Data = (list*)malloc(12); // This is not a proper list allocation } extern list ListNode1; list ListNode3 = { 4, 0 }; list ListNode2 = { 3, &ListNode3 }; list ListNode0 = { 1, &ListNode1 }; list ListNode1 = { 2, &ListNode2 }; list ListArray[10]; // Iterative insert fn void InsertIntoListTail(list **L, int Data) { while (*L) L = &(*L)->Next; *L = (list*)malloc(sizeof(list)); (*L)->Data = Data; (*L)->Next = 0; } // Recursive list search fn list *FindData(list *L, int Data) { if (L == 0) return 0; if (L->Data == Data) return L; return FindData(L->Next, Data); } void foundIt(void); // Driver fn... void DoListStuff() { list *MyList = 0; InsertIntoListTail(&MyList, 100); InsertIntoListTail(&MyList, 12); InsertIntoListTail(&MyList, 42); InsertIntoListTail(&MyList, 1123); InsertIntoListTail(&MyList, 1213); if (FindData(MyList, 75)) foundIt(); if (FindData(MyList, 42)) foundIt(); if (FindData(MyList, 700)) foundIt(); } |