13883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// RUN: %clang_cc1 -emit-llvm %s -o /dev/null 23883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 33883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// Test list stuff 43883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 53883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophervoid *malloc(unsigned); 63883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 73883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// Test opaque structure support. the list type is defined later 83883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct list; 93883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 103883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct list *PassThroughList(struct list *L) { 113883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher return L; 123883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher} 133883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 143883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 153883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// Recursive data structure tests... 163883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 173883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef struct list { 183883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher int Data; 193883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher struct list *Next; 203883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher} list; 213883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 223883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherlist *Data; 233883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 243883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophervoid foo() { 253883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher static int Foo = 0; // Test static local variable 263883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher Foo += 1; // Increment static variable 273883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 283883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher Data = (list*)malloc(12); // This is not a proper list allocation 293883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher} 303883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 313883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherextern list ListNode1; 323883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherlist ListNode3 = { 4, 0 }; 333883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherlist ListNode2 = { 3, &ListNode3 }; 343883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherlist ListNode0 = { 1, &ListNode1 }; 353883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherlist ListNode1 = { 2, &ListNode2 }; 363883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 373883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 383883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherlist ListArray[10]; 393883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 403883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// Iterative insert fn 413883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophervoid InsertIntoListTail(list **L, int Data) { 423883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher while (*L) 433883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher L = &(*L)->Next; 443883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher *L = (list*)malloc(sizeof(list)); 453883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher (*L)->Data = Data; 463883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher (*L)->Next = 0; 473883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher} 483883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 493883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// Recursive list search fn 503883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherlist *FindData(list *L, int Data) { 513883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher if (L == 0) return 0; 523883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher if (L->Data == Data) return L; 533883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher return FindData(L->Next, Data); 543883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher} 553883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 563883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophervoid foundIt(void); 573883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 583883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// Driver fn... 593883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophervoid DoListStuff() { 603883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher list *MyList = 0; 613883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher InsertIntoListTail(&MyList, 100); 623883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher InsertIntoListTail(&MyList, 12); 633883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher InsertIntoListTail(&MyList, 42); 643883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher InsertIntoListTail(&MyList, 1123); 653883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher InsertIntoListTail(&MyList, 1213); 663883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 673883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher if (FindData(MyList, 75)) foundIt(); 683883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher if (FindData(MyList, 42)) foundIt(); 693883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher if (FindData(MyList, 700)) foundIt(); 703883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher} 713883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher 72