1b025734047dd8b630c34cea53b371361adb2a65aEric Christopher// RUN: %clang_cc1 -w -emit-llvm %s -o /dev/null 2b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 3b025734047dd8b630c34cea53b371361adb2a65aEric Christophervoid *malloc(unsigned); 4b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint puts(const char *s); 5b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 6b025734047dd8b630c34cea53b371361adb2a65aEric Christopherstruct FunStructTest { 7b025734047dd8b630c34cea53b371361adb2a65aEric Christopher int Test1; 8b025734047dd8b630c34cea53b371361adb2a65aEric Christopher char *Pointer; 9b025734047dd8b630c34cea53b371361adb2a65aEric Christopher int Array[12]; 10b025734047dd8b630c34cea53b371361adb2a65aEric Christopher}; 11b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 12b025734047dd8b630c34cea53b371361adb2a65aEric Christopherstruct SubStruct { 13b025734047dd8b630c34cea53b371361adb2a65aEric Christopher short X, Y; 14b025734047dd8b630c34cea53b371361adb2a65aEric Christopher}; 15b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 16b025734047dd8b630c34cea53b371361adb2a65aEric Christopherstruct Quad { 17b025734047dd8b630c34cea53b371361adb2a65aEric Christopher int w; 18b025734047dd8b630c34cea53b371361adb2a65aEric Christopher struct SubStruct SS; 19b025734047dd8b630c34cea53b371361adb2a65aEric Christopher struct SubStruct *SSP; 20b025734047dd8b630c34cea53b371361adb2a65aEric Christopher char c; 21b025734047dd8b630c34cea53b371361adb2a65aEric Christopher int y; 22b025734047dd8b630c34cea53b371361adb2a65aEric Christopher}; 23b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 24b025734047dd8b630c34cea53b371361adb2a65aEric Christopherstruct Quad GlobalQuad = { 4, {1, 2}, 0, 3, 156 }; 25b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 26b025734047dd8b630c34cea53b371361adb2a65aEric Christophertypedef int (*FuncPtr)(int); 27b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 28b025734047dd8b630c34cea53b371361adb2a65aEric Christopherunsigned PtrFunc(int (*Func)(int), int X) { 29b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return Func(X); 30b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 31b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 32b025734047dd8b630c34cea53b371361adb2a65aEric Christopherchar PtrFunc2(FuncPtr FuncTab[30], int Num) { 33b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return FuncTab[Num]('b'); 34b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 35b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 36b025734047dd8b630c34cea53b371361adb2a65aEric Christopherextern char SmallArgs2(char w, char x, long long Zrrk, char y, char z); 37b025734047dd8b630c34cea53b371361adb2a65aEric Christopherextern int SomeFunc(void); 38b025734047dd8b630c34cea53b371361adb2a65aEric Christopherchar SmallArgs(char w, char x, char y, char z) { 39b025734047dd8b630c34cea53b371361adb2a65aEric Christopher SomeFunc(); 40b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return SmallArgs2(w-1, x+1, y, z, w); 41b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 42b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 43b025734047dd8b630c34cea53b371361adb2a65aEric Christopherstatic int F0(struct Quad Q, int i) { /* Pass Q by value */ 44b025734047dd8b630c34cea53b371361adb2a65aEric Christopher struct Quad R; 45b025734047dd8b630c34cea53b371361adb2a65aEric Christopher if (i) R.SS = Q.SS; 46b025734047dd8b630c34cea53b371361adb2a65aEric Christopher Q.SSP = &R.SS; 47b025734047dd8b630c34cea53b371361adb2a65aEric Christopher Q.w = Q.y = Q.c = 1; 48b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return Q.SS.Y + i + R.y - Q.c; 49b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 50b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 51b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint F1(struct Quad *Q, int i) { /* Pass Q by address */ 52b025734047dd8b630c34cea53b371361adb2a65aEric Christopher struct Quad R; 53b025734047dd8b630c34cea53b371361adb2a65aEric Christopher#if 0 54b025734047dd8b630c34cea53b371361adb2a65aEric Christopher if (i) R.SS = Q->SS; 55b025734047dd8b630c34cea53b371361adb2a65aEric Christopher#else 56b025734047dd8b630c34cea53b371361adb2a65aEric Christopher if (i) R = *Q; 57b025734047dd8b630c34cea53b371361adb2a65aEric Christopher#endif 58b025734047dd8b630c34cea53b371361adb2a65aEric Christopher Q->w = Q->y = Q->c = 1; 59b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return Q->SS.Y+i+R.y-Q->c; 60b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 61b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 62b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 63b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint BadFunc(float Val) { 64b025734047dd8b630c34cea53b371361adb2a65aEric Christopher int Result; 65b025734047dd8b630c34cea53b371361adb2a65aEric Christopher if (Val > 12.345) Result = 4; 66b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return Result; /* Test use of undefined value */ 67b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 68b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 69b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint RealFunc(void) { 70b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return SomeUndefinedFunction(1, 4, 5); 71b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 72b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 73b025734047dd8b630c34cea53b371361adb2a65aEric Christopherextern int EF1(int *, char *, int *); 74b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 75b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint Func(int Param, long long Param2) { 76b025734047dd8b630c34cea53b371361adb2a65aEric Christopher int Result = Param; 77b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 78b025734047dd8b630c34cea53b371361adb2a65aEric Christopher {{{{ 79b025734047dd8b630c34cea53b371361adb2a65aEric Christopher char c; int X; 80b025734047dd8b630c34cea53b371361adb2a65aEric Christopher EF1(&Result, &c, &X); 81b025734047dd8b630c34cea53b371361adb2a65aEric Christopher }}} 82b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 83b025734047dd8b630c34cea53b371361adb2a65aEric Christopher { // c & X are duplicate names! 84b025734047dd8b630c34cea53b371361adb2a65aEric Christopher char c; int X; 85b025734047dd8b630c34cea53b371361adb2a65aEric Christopher EF1(&Result, &c, &X); 86b025734047dd8b630c34cea53b371361adb2a65aEric Christopher } 87b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 88b025734047dd8b630c34cea53b371361adb2a65aEric Christopher } 89b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return Result; 90b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 91b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 92b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 93b025734047dd8b630c34cea53b371361adb2a65aEric Christophershort FunFunc(long long x, char z) { 94b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return x+z; 95b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 96b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 97b025734047dd8b630c34cea53b371361adb2a65aEric Christopherunsigned castTest(int X) { return X; } 98b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 99b025734047dd8b630c34cea53b371361adb2a65aEric Christopherdouble TestAdd(double X, float Y) { 100b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return X+Y+.5; 101b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 102b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 103b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint func(int i, int j) { 104b025734047dd8b630c34cea53b371361adb2a65aEric Christopher while (i != 20) 105b025734047dd8b630c34cea53b371361adb2a65aEric Christopher i += 2; 106b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 107b025734047dd8b630c34cea53b371361adb2a65aEric Christopher j += func(2, i); 108b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return (i * 3 + j*2)*j; 109b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 110b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 111b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint SumArray(int Array[], int Num) { 112b025734047dd8b630c34cea53b371361adb2a65aEric Christopher int i, Result = 0; 113b025734047dd8b630c34cea53b371361adb2a65aEric Christopher for (i = 0; i < Num; ++i) 114b025734047dd8b630c34cea53b371361adb2a65aEric Christopher Result += Array[i]; 115b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 116b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return Result; 117b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 118b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 119b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint ArrayParam(int Values[100]) { 120b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return EF1((int*)Values[50], (char*)1, &Values[50]); 121b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 122b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 123b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint ArrayToSum(void) { 124b025734047dd8b630c34cea53b371361adb2a65aEric Christopher int A[100], i; 125b025734047dd8b630c34cea53b371361adb2a65aEric Christopher for (i = 0; i < 100; ++i) 126b025734047dd8b630c34cea53b371361adb2a65aEric Christopher A[i] = i*4; 127b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 128b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return A[A[0]]; //SumArray(A, 100); 129b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 130b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 131b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 132b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint ExternFunc(long long, unsigned*, short, unsigned char); 133b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 134b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint main(int argc, char *argv[]) { 135b025734047dd8b630c34cea53b371361adb2a65aEric Christopher unsigned i; 136b025734047dd8b630c34cea53b371361adb2a65aEric Christopher puts("Hello world!\n"); 137b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 138b025734047dd8b630c34cea53b371361adb2a65aEric Christopher ExternFunc(-1, 0, (short)argc, 2); 139b025734047dd8b630c34cea53b371361adb2a65aEric Christopher //func(argc, argc); 140b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 141b025734047dd8b630c34cea53b371361adb2a65aEric Christopher for (i = 0; i < 10; i++) 142b025734047dd8b630c34cea53b371361adb2a65aEric Christopher puts(argv[3]); 143b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return 0; 144b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 145b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 146b025734047dd8b630c34cea53b371361adb2a65aEric Christopherdouble MathFunc(double X, double Y, double Z, 147b025734047dd8b630c34cea53b371361adb2a65aEric Christopher double AA, double BB, double CC, double DD, 148b025734047dd8b630c34cea53b371361adb2a65aEric Christopher double EE, double FF, double GG, double HH, 149b025734047dd8b630c34cea53b371361adb2a65aEric Christopher double aAA, double aBB, double aCC, double aDD, 150b025734047dd8b630c34cea53b371361adb2a65aEric Christopher double aEE, double aFF) { 151b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return X + Y + Z + AA + BB + CC + DD + EE + FF + GG + HH 152b025734047dd8b630c34cea53b371361adb2a65aEric Christopher + aAA + aBB + aCC + aDD + aEE + aFF; 153b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 154b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 155b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 156b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 157b025734047dd8b630c34cea53b371361adb2a65aEric Christophervoid strcpy(char *s1, char *s2) { 158b025734047dd8b630c34cea53b371361adb2a65aEric Christopher while (*s1++ = *s2++); 159b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 160b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 161b025734047dd8b630c34cea53b371361adb2a65aEric Christophervoid strcat(char *s1, char *s2) { 162b025734047dd8b630c34cea53b371361adb2a65aEric Christopher while (*s1++); 163b025734047dd8b630c34cea53b371361adb2a65aEric Christopher s1--; 164b025734047dd8b630c34cea53b371361adb2a65aEric Christopher while (*s1++ = *s2++); 165b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 166b025734047dd8b630c34cea53b371361adb2a65aEric Christopher 167b025734047dd8b630c34cea53b371361adb2a65aEric Christopherint strcmp(char *s1, char *s2) { 168b025734047dd8b630c34cea53b371361adb2a65aEric Christopher while (*s1++ == *s2++); 169b025734047dd8b630c34cea53b371361adb2a65aEric Christopher if (*s1 == 0) { 170b025734047dd8b630c34cea53b371361adb2a65aEric Christopher if (*s2 == 0) { 171b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return 0; 172b025734047dd8b630c34cea53b371361adb2a65aEric Christopher } else { 173b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return -1; 174b025734047dd8b630c34cea53b371361adb2a65aEric Christopher } 175b025734047dd8b630c34cea53b371361adb2a65aEric Christopher } else { 176b025734047dd8b630c34cea53b371361adb2a65aEric Christopher if (*s2 == 0) { 177b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return 1; 178b025734047dd8b630c34cea53b371361adb2a65aEric Christopher } else { 179b025734047dd8b630c34cea53b371361adb2a65aEric Christopher return (*(--s1) - *(--s2)); 180b025734047dd8b630c34cea53b371361adb2a65aEric Christopher } 181b025734047dd8b630c34cea53b371361adb2a65aEric Christopher } 182b025734047dd8b630c34cea53b371361adb2a65aEric Christopher} 183