CodeGen/2003-08-21-WideString.c
       CodeGen/2003-10-02-UnionLValueError.c
       CodeGen/2004-02-20-Builtins.c
       CodeGen/2008-01-04-WideBitfield.c
       CodeGen/2002-07-14-MiscTests3.c
       CodeGen/2005-04-09-ComplexOps.c
       CodeGen/2008-12-23-AsmIntPointerTie.c
       CodeGen/2005-07-20-SqrtNoErrno.c
       CodeGen/2005-01-02-VAArgError-ICE.c
       CodeGen/2004-06-17-UnorderedCompares.c
       CodeGen/2002-06-25-FWriteInterfaceFailure.c
       CodeGen/2002-02-18-64bitConstant.c
       CodeGen/2002-05-24-Alloca.c
       CodeGen/2006-01-13-Includes.c
       CodeGen/2007-09-27-ComplexIntCompare.c
       CodeGen/2004-02-13-IllegalVararg.c
       CodeGen/2007-09-12-PragmaPack.c
       CodeGen/2002-08-02-UnionTest.c

from test/FrontendC with changes to remove header file includes.

llvm-svn: 136153
This commit is contained in:
Eric Christopher 2011-07-26 21:42:32 +00:00
parent d2659138da
commit e70ea8b806
18 changed files with 395 additions and 0 deletions

View File

@ -0,0 +1,10 @@
// RUN: %clang_cc1 -emit-llvm %s -o /dev/null
/* GCC wasn't handling 64 bit constants right fixed */
int printf(const char * restrict format, ...);
int main() {
long long Var = 123455678902ll;
printf("%lld\n", Var);
}

View File

@ -0,0 +1,11 @@
// RUN: %clang_cc1 -emit-llvm %s -o /dev/null
typedef __SIZE_TYPE__ size_t;
void *alloca(size_t size);
char *strcpy(char *restrict s1, const char *restrict s2);
int puts(const char *s);
int main(int argc, char **argv) {
char *C = (char*)alloca(argc);
strcpy(C, argv[0]);
puts(C);
}

View File

@ -0,0 +1,9 @@
// RUN: %clang_cc1 -emit-llvm %s -o /dev/null
typedef struct _IO_FILE FILE;
extern FILE *stderr;
int fprintf(FILE * restrict stream, const char * restrict format, ...);
void test() {
fprintf(stderr, "testing\n");
}

View File

@ -0,0 +1,182 @@
// RUN: %clang_cc1 -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));
}
}
}

View File

@ -0,0 +1,19 @@
// RUN: %clang_cc1 -emit-llvm %s -o /dev/null
/* In this testcase, the return value of foo() is being promoted to a register
* which breaks stuff
*/
int printf(const char * restrict format, ...);
union X { char X; void *B; int a, b, c, d;};
union X foo() {
union X Global;
Global.B = (void*)123; /* Interesting part */
return Global;
}
int main() {
union X test = foo();
printf("0x%p", test.B);
}

View File

@ -0,0 +1,16 @@
// RUN: %clang_cc1 -emit-llvm %s -o /dev/null
// This bit is taken from Sema/wchar.c so we can avoid the wchar.h include.
typedef __WCHAR_TYPE__ wchar_t;
#if defined(_WIN32) || defined(_M_IX86) || defined(__CYGWIN__) \
|| defined(_M_X64) || defined(SHORT_WCHAR)
#define WCHAR_T_TYPE unsigned short
#elif defined(__sun) || defined(__AuroraUX__)
#define WCHAR_T_TYPE long
#else /* Solaris or AuroraUX. */
#define WCHAR_T_TYPE int
#endif
struct {
wchar_t *name;
} syms = { L"NUL" };

View File

@ -0,0 +1,11 @@
// RUN: %clang_cc1 -emit-llvm %s -o /dev/null
int sprintf(char * restrict str, const char * restrict format, ...);
union U{
int i[8];
char s[80];
};
void format_message(char *buffer, union U *u) {
sprintf(buffer, u->s);
}

View File

@ -0,0 +1,9 @@
// RUN: %clang_cc1 %s -w -emit-llvm -o -
float test(int X, ...) {
__builtin_va_list ap;
float F;
__builtin_va_start(ap, X);
F = __builtin_va_arg(ap, float);
return F;
}

View File

@ -0,0 +1,5 @@
// RUN: %clang_cc1 %s -emit-llvm -o - | not grep builtin
double sqrt(double x);
void zsqrtxxx(float num) {
num = sqrt(num);
}

View File

@ -0,0 +1,19 @@
// RUN: %clang_cc1 -std=c99 %s -emit-llvm -o - | grep -v llvm.isunordered | not grep call
_Bool A, B, C, D, E, F;
void TestF(float X, float Y) {
A = __builtin_isgreater(X, Y);
B = __builtin_isgreaterequal(X, Y);
C = __builtin_isless(X, Y);
D = __builtin_islessequal(X, Y);
E = __builtin_islessgreater(X, Y);
F = __builtin_isunordered(X, Y);
}
void TestD(double X, double Y) {
A = __builtin_isgreater(X, Y);
B = __builtin_isgreaterequal(X, Y);
C = __builtin_isless(X, Y);
D = __builtin_islessequal(X, Y);
E = __builtin_islessgreater(X, Y);
F = __builtin_isunordered(X, Y);
}

View File

@ -0,0 +1,9 @@
// This file is erroneous, but should not cause the compiler to ICE.
// PR481
// RUN: %clang_cc1 %s -emit-llvm -o /dev/null
int flags(int a, int b, ...) {
__builtin_va_list args;
__builtin_va_start(args,a); // not the last named arg
foo(args);
}

View File

@ -0,0 +1,8 @@
// RUN: %clang_cc1 %s -emit-llvm -o -
#define I 1.0iF
double __complex test(double X) { return ~-(X*I); }
_Bool EQ(double __complex A, double __complex B) { return A == B; }
_Bool NE(double __complex A, double __complex B) { return A != B; }

View File

@ -0,0 +1,10 @@
// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
// llvm.sqrt has undefined behavior on negative inputs, so it is
// inappropriate to translate C/C++ sqrt to this.
float sqrtf(float x);
float foo(float X) {
// CHECK: foo
// CHECK: call float @sqrtf(float %tmp) readnone
// Check that this is marked readonly when errno is ignored.
return sqrtf(X);
}

View File

@ -0,0 +1,10 @@
// RUN: %clang_cc1 %s -g -emit-llvm -o - | FileCheck %s
// PR676
int printf(const char * restrict format, ...);
void test() {
printf("Hello World\n");
}
// CHECK: test/CodeGen

View File

@ -0,0 +1,32 @@
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#pragma pack(push, 1)
typedef struct
{
uint32_t a;
} foo;
typedef struct {
uint8_t major;
uint8_t minor;
uint16_t build;
} VERSION;
typedef struct {
uint8_t a[5];
VERSION version;
uint8_t b;
foo d;
uint32_t guard;
} bar;
#pragma pack(pop)
unsigned barsize(void) {
// CHECK: ret i32 18
return sizeof(bar);
}

View File

@ -0,0 +1,15 @@
// RUN: %clang_cc1 -emit-llvm %s -o -
// PR1708
void __attribute__((noreturn)) abort(void);
struct s { _Complex unsigned short x; };
struct s gs = { 100 + 200i };
struct s __attribute__((noinline)) foo (void) { return gs; }
int main ()
{
if (foo ().x != gs.x)
abort ();
exit (0);
}

View File

@ -0,0 +1,12 @@
// RUN: %clang_cc1 -emit-llvm -o - %s
// PR1386
typedef unsigned long uint64_t;
struct X {
unsigned char pad : 4;
uint64_t a : 64;
} __attribute__((packed)) x;
uint64_t f(void)
{
return x.a;
}

View File

@ -0,0 +1,8 @@
// RUN: %clang_cc1 %s -emit-llvm -O1 -o -
typedef long intptr_t;
int test(void *b) {
intptr_t a;
__asm__ __volatile__ ("%0 %1 " : "=r" (a): "0" (b));
return a;
}