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