• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -emit-llvm %s  -o /dev/null
2 
3 // Test list stuff
4 
5 void *malloc(unsigned);
6 
7 // Test opaque structure support.  the list type is defined later
8 struct list;
9 
PassThroughList(struct list * L)10 struct list *PassThroughList(struct list *L) {
11   return L;
12 }
13 
14 
15 // Recursive data structure tests...
16 
17 typedef struct list {
18   int Data;
19   struct list *Next;
20 } list;
21 
22 list *Data;
23 
foo()24 void foo() {
25   static int Foo = 0;            // Test static local variable
26   Foo += 1;                      // Increment static variable
27 
28   Data = (list*)malloc(12);      // This is not a proper list allocation
29 }
30 
31 extern list ListNode1;
32 list ListNode3 = { 4, 0          };
33 list ListNode2 = { 3, &ListNode3 };
34 list ListNode0 = { 1, &ListNode1 };
35 list ListNode1 = { 2, &ListNode2 };
36 
37 
38 list ListArray[10];
39 
40 // Iterative insert fn
InsertIntoListTail(list ** L,int Data)41 void InsertIntoListTail(list **L, int Data) {
42   while (*L)
43     L = &(*L)->Next;
44   *L = (list*)malloc(sizeof(list));
45   (*L)->Data = Data;
46   (*L)->Next = 0;
47 }
48 
49 // Recursive list search fn
FindData(list * L,int Data)50 list *FindData(list *L, int Data) {
51   if (L == 0) return 0;
52   if (L->Data == Data) return L;
53   return FindData(L->Next, Data);
54 }
55 
56 void foundIt(void);
57 
58 // Driver fn...
DoListStuff()59 void DoListStuff() {
60   list *MyList = 0;
61   InsertIntoListTail(&MyList, 100);
62   InsertIntoListTail(&MyList, 12);
63   InsertIntoListTail(&MyList, 42);
64   InsertIntoListTail(&MyList, 1123);
65   InsertIntoListTail(&MyList, 1213);
66 
67   if (FindData(MyList, 75)) foundIt();
68   if (FindData(MyList, 42)) foundIt();
69   if (FindData(MyList, 700)) foundIt();
70 }
71 
72