Home | History | Annotate | Download | only in CodeGen
      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 
     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 
     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
     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
     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...
     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