|  | // RUN: %clang_cc1 -Wno-implicit-function-declaration -w -emit-llvm %s  -o /dev/null | 
|  |  | 
|  | void *malloc(unsigned); | 
|  | int puts(const char *s); | 
|  |  | 
|  | struct FunStructTest { | 
|  | int Test1; | 
|  | char *Pointer; | 
|  | int Array[12]; | 
|  | }; | 
|  |  | 
|  | struct SubStruct { | 
|  | short X, Y; | 
|  | }; | 
|  |  | 
|  | struct Quad { | 
|  | int w; | 
|  | struct SubStruct SS; | 
|  | struct SubStruct *SSP; | 
|  | char c; | 
|  | int y; | 
|  | }; | 
|  |  | 
|  | struct Quad GlobalQuad = { 4, {1, 2}, 0, 3, 156 }; | 
|  |  | 
|  | typedef int (*FuncPtr)(int); | 
|  |  | 
|  | unsigned PtrFunc(int (*Func)(int), int X) { | 
|  | return Func(X); | 
|  | } | 
|  |  | 
|  | char PtrFunc2(FuncPtr FuncTab[30], int Num) { | 
|  | return FuncTab[Num]('b'); | 
|  | } | 
|  |  | 
|  | extern char SmallArgs2(char w, char x, long long Zrrk, char y, char z); | 
|  | extern int SomeFunc(void); | 
|  | char SmallArgs(char w, char x, char y, char z) { | 
|  | SomeFunc(); | 
|  | return SmallArgs2(w-1, x+1, y, z, w); | 
|  | } | 
|  |  | 
|  | static int F0(struct Quad Q, int i) {              /* Pass Q by value */ | 
|  | struct Quad R; | 
|  | if (i) R.SS = Q.SS; | 
|  | Q.SSP = &R.SS; | 
|  | Q.w = Q.y = Q.c = 1; | 
|  | return Q.SS.Y + i + R.y - Q.c; | 
|  | } | 
|  |  | 
|  | int F1(struct Quad *Q, int i) {             /* Pass Q by address */ | 
|  | struct Quad R; | 
|  | #if 0 | 
|  | if (i) R.SS = Q->SS; | 
|  | #else | 
|  | if (i) R = *Q; | 
|  | #endif | 
|  | Q->w = Q->y = Q->c = 1; | 
|  | return Q->SS.Y+i+R.y-Q->c; | 
|  | } | 
|  |  | 
|  |  | 
|  | int BadFunc(float Val) { | 
|  | int Result; | 
|  | if (Val > 12.345) Result = 4; | 
|  | return Result;     /* Test use of undefined value */ | 
|  | } | 
|  |  | 
|  | int RealFunc(void) { | 
|  | return SomeUndefinedFunction(1, 4, 5); | 
|  | } | 
|  |  | 
|  | extern int EF1(int *, char *, int *); | 
|  |  | 
|  | int Func(int Param, long long Param2) { | 
|  | int Result = Param; | 
|  |  | 
|  | {{{{ | 
|  | char c; int X; | 
|  | EF1(&Result, &c, &X); | 
|  | }}} | 
|  |  | 
|  | {   // c & X are duplicate names! | 
|  | char c; int X; | 
|  | EF1(&Result, &c, &X); | 
|  | } | 
|  |  | 
|  | } | 
|  | return Result; | 
|  | } | 
|  |  | 
|  |  | 
|  | short FunFunc(long long x, char z) { | 
|  | return x+z; | 
|  | } | 
|  |  | 
|  | unsigned castTest(int X) { return X; } | 
|  |  | 
|  | double TestAdd(double X, float Y) { | 
|  | return X+Y+.5; | 
|  | } | 
|  |  | 
|  | int func(int i, int j) { | 
|  | while (i != 20) | 
|  | i += 2; | 
|  |  | 
|  | j += func(2, i); | 
|  | return (i * 3 + j*2)*j; | 
|  | } | 
|  |  | 
|  | int SumArray(int Array[], int Num) { | 
|  | int i, Result = 0; | 
|  | for (i = 0; i < Num; ++i) | 
|  | Result += Array[i]; | 
|  |  | 
|  | return Result; | 
|  | } | 
|  |  | 
|  | int ArrayParam(int Values[100]) { | 
|  | return EF1((int*)Values[50], (char*)1, &Values[50]); | 
|  | } | 
|  |  | 
|  | int ArrayToSum(void) { | 
|  | int A[100], i; | 
|  | for (i = 0; i < 100; ++i) | 
|  | A[i] = i*4; | 
|  |  | 
|  | return A[A[0]]; //SumArray(A, 100); | 
|  | } | 
|  |  | 
|  |  | 
|  | int ExternFunc(long long, unsigned*, short, unsigned char); | 
|  |  | 
|  | int main(int argc, char *argv[]) { | 
|  | unsigned i; | 
|  | puts("Hello world!\n"); | 
|  |  | 
|  | ExternFunc(-1, 0, (short)argc, 2); | 
|  | //func(argc, argc); | 
|  |  | 
|  | for (i = 0; i < 10; i++) | 
|  | puts(argv[3]); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | double MathFunc(double X, double Y, double Z, | 
|  | double AA, double BB, double CC, double DD, | 
|  | double EE, double FF, double GG, double HH, | 
|  | double aAA, double aBB, double aCC, double aDD, | 
|  | double aEE, double aFF) { | 
|  | return X + Y + Z + AA + BB + CC + DD + EE + FF + GG + HH | 
|  | + aAA + aBB + aCC + aDD + aEE + aFF; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | void strcpy(char *s1, char *s2) { | 
|  | while (*s1++ = *s2++); | 
|  | } | 
|  |  | 
|  | void strcat(char *s1, char *s2) { | 
|  | while (*s1++); | 
|  | s1--; | 
|  | while (*s1++ = *s2++); | 
|  | } | 
|  |  | 
|  | int strcmp(char *s1, char *s2) { | 
|  | while (*s1++ == *s2++); | 
|  | if (*s1 == 0) { | 
|  | if (*s2 == 0) { | 
|  | return 0; | 
|  | } else { | 
|  | return -1; | 
|  | } | 
|  | } else { | 
|  | if (*s2 == 0) { | 
|  | return 1; | 
|  | } else { | 
|  | return (*(--s1) - *(--s2)); | 
|  | } | 
|  | } | 
|  | } |