diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg')
-rw-r--r-- | gcc/testsuite/gcc.dg/20011119-1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wconversion-2.c | 64 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/assign-warn-1.c | 123 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/assign-warn-2.c | 124 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/ident-1.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/darwin-abi-2.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/darwin-longdouble.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/doloop-2.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/func-args-1.c | 53 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/noncompile/20020213-1.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ppc-fsel-1.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ppc-fsel-3.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ultrasp11.c | 25 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/warn-1.c | 2 |
14 files changed, 438 insertions, 9 deletions
diff --git a/gcc/testsuite/gcc.dg/20011119-1.c b/gcc/testsuite/gcc.dg/20011119-1.c index 5b3c00cd36f..0df09a3f778 100644 --- a/gcc/testsuite/gcc.dg/20011119-1.c +++ b/gcc/testsuite/gcc.dg/20011119-1.c @@ -74,7 +74,7 @@ main() "call %P0\n\t" "addl $12, %%esp\n\t" "popl %%ebp" - : : "i"(ustrzcat)); + : : "i"(ustrzcat) : "memory" ); return 0; } diff --git a/gcc/testsuite/gcc.dg/Wconversion-2.c b/gcc/testsuite/gcc.dg/Wconversion-2.c new file mode 100644 index 00000000000..320f41f0120 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wconversion-2.c @@ -0,0 +1,64 @@ +/* Test messages for -Wconversion, including that they are not + pedwarns. */ +/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ +/* { dg-do compile } */ +/* { dg-options "-std=c99 -pedantic-errors -Wconversion" } */ + +void fsc(signed char); +void fsi(signed int); +void fsll(signed long long); +void fuc(unsigned char); +void fui(unsigned int); +void full(unsigned long long); +void ff(float); +void fld(long double); +void fcf(_Complex float); + +struct s { + void (*fsc)(signed char); + void (*fsi)(signed int); + void (*fsll)(signed long long); + void (*fuc)(unsigned char); + void (*fui)(unsigned int); + void (*full)(unsigned long long); + void (*ff)(float); + void (*fld)(long double); + void (*fcf)(_Complex float); +} x; + +signed char sc; +signed int si; +signed long long sll; +unsigned char uc; +unsigned int ui; +unsigned long long ull; +float f; +long double ld; +_Complex float cf; + +void +g (void) +{ + fsi(f); /* { dg-warning "warning: passing argument 1 of 'fsi' as integer rather than floating due to prototype" } */ + x.fsi(f); /* { dg-warning "warning: passing argument 1 of 'x.fsi' as integer rather than floating due to prototype" } */ + fsi(cf); /* { dg-warning "warning: passing argument 1 of 'fsi' as integer rather than complex due to prototype" } */ + x.fsi(cf); /* { dg-warning "warning: passing argument 1 of 'x.fsi' as integer rather than complex due to prototype" } */ + fcf(f); /* { dg-warning "warning: passing argument 1 of 'fcf' as complex rather than floating due to prototype" } */ + x.fcf(f); /* { dg-warning "warning: passing argument 1 of 'x.fcf' as complex rather than floating due to prototype" } */ + fcf(si); /* { dg-warning "warning: passing argument 1 of 'fcf' as complex rather than integer due to prototype" } */ + x.fcf(si); /* { dg-warning "warning: passing argument 1 of 'x.fcf' as complex rather than integer due to prototype" } */ + ff(sc); /* { dg-warning "warning: passing argument 1 of 'ff' as floating rather than integer due to prototype" } */ + x.ff(sc); /* { dg-warning "warning: passing argument 1 of 'x.ff' as floating rather than integer due to prototype" } */ + ff(cf); /* { dg-warning "warning: passing argument 1 of 'ff' as floating rather than complex due to prototype" } */ + x.ff(cf); /* { dg-warning "warning: passing argument 1 of 'x.ff' as floating rather than complex due to prototype" } */ + ff(1.0); /* { dg-warning "warning: passing argument 1 of 'ff' as 'float' rather than 'double' due to prototype" } */ + x.ff(1.0); /* { dg-warning "warning: passing argument 1 of 'x.ff' as 'float' rather than 'double' due to prototype" } */ + fsll(sc); /* { dg-warning "warning: passing argument 1 of 'fsll' with different width due to prototype" } */ + x.fsll(sc); /* { dg-warning "warning: passing argument 1 of 'x.fsll' with different width due to prototype" } */ + fsc(sll); /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" } */ + x.fsc(sll); /* { dg-warning "warning: passing argument 1 of 'x.fsc' with different width due to prototype" } */ + fsi(ui); /* { dg-warning "warning: passing argument 1 of 'fsi' as signed due to prototype" } */ + x.fsi(ui); /* { dg-warning "warning: passing argument 1 of 'x.fsi' as signed due to prototype" } */ + full(sll); /* { dg-warning "warning: passing argument 1 of 'full' as unsigned due to prototype" } */ + x.full(sll); /* { dg-warning "warning: passing argument 1 of 'x.full' as unsigned due to prototype" } */ +} diff --git a/gcc/testsuite/gcc.dg/assign-warn-1.c b/gcc/testsuite/gcc.dg/assign-warn-1.c new file mode 100644 index 00000000000..857b1a85333 --- /dev/null +++ b/gcc/testsuite/gcc.dg/assign-warn-1.c @@ -0,0 +1,123 @@ +/* Test diagnostics for bad implicit type conversions. */ +/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ +/* { dg-do compile } */ +/* { dg-options "-pedantic" } */ + +#define TESTARG(ID, TL, TR) void ID##F(TL); void ID##F2(TR x) { ID##F(x); } extern int dummy +#define TESTARP(ID, TL, TR) struct { void (*x)(TL); } ID##Fp; void ID##F2(TR x) { ID##Fp.x(x); } extern int dummy +#define TESTASS(ID, TL, TR) void ID##F(TR x) { TL y; y = x; } extern int dummy +#define TESTINI(ID, TL, TR) void ID##F(TR x) { TL y = x; } extern int dummy +#define TESTRET(ID, TL, TR) TR ID##V; TL ID##F(void) { return ID##V; } extern int dummy + +typedef void (*fp)(void); +typedef void (*nrfp)(void) __attribute__((noreturn)); + +TESTARG(fqa, nrfp, fp); /* { dg-warning "warning: passing argument 1 of 'fqaF' makes qualified function pointer from unqualified" } */ +TESTARP(fqb, nrfp, fp); /* { dg-warning "warning: passing argument 1 of 'fqbFp.x' makes qualified function pointer from unqualified" } */ +TESTASS(fqc, nrfp, fp); /* { dg-warning "warning: assignment makes qualified function pointer from unqualified" } */ +TESTINI(fqd, nrfp, fp); /* { dg-warning "warning: initialization makes qualified function pointer from unqualified" } */ +TESTRET(fqe, nrfp, fp); /* { dg-warning "warning: return makes qualified function pointer from unqualified" } */ + +TESTARG(ofqa, fp, nrfp); +TESTARP(ofqb, fp, nrfp); +TESTASS(ofqc, fp, nrfp); +TESTINI(ofqd, fp, nrfp); +TESTRET(ofqe, fp, nrfp); + +TESTARG(qa, char *, const char *); /* { dg-warning "warning: passing argument 1 of 'qaF' discards qualifiers from pointer target type" } */ +TESTARP(qb, char *, const char *); /* { dg-warning "warning: passing argument 1 of 'qbFp.x' discards qualifiers from pointer target type" } */ +TESTASS(qc, char *, const char *); /* { dg-warning "warning: assignment discards qualifiers from pointer target type" } */ +TESTINI(qd, char *, const char *); /* { dg-warning "warning: initialization discards qualifiers from pointer target type" } */ +TESTRET(qe, char *, const char *); /* { dg-warning "warning: return discards qualifiers from pointer target type" } */ + +TESTARG(oqa, const char *, char *); +TESTARP(oqb, const char *, char *); +TESTASS(oqc, const char *, char *); +TESTINI(oqd, const char *, char *); +TESTRET(oqe, const char *, char *); + +TESTARG(fda, fp, void *); /* { dg-warning "warning: ISO C forbids passing argument 1 of 'fdaF' between function pointer and 'void \\*'" } */ +TESTARP(fdb, fp, void *); /* { dg-warning "warning: ISO C forbids passing argument 1 of 'fdbFp.x' between function pointer and 'void \\*'" } */ +TESTASS(fdc, fp, void *); /* { dg-warning "warning: ISO C forbids assignment between function pointer and 'void \\*'" } */ +TESTINI(fdd, fp, void *); /* { dg-warning "warning: ISO C forbids initialization between function pointer and 'void \\*'" } */ +TESTRET(fde, fp, void *); /* { dg-warning "warning: ISO C forbids return between function pointer and 'void \\*'" } */ + +TESTARG(dfa, void *, fp); /* { dg-warning "warning: ISO C forbids passing argument 1 of 'dfaF' between function pointer and 'void \\*'" } */ +TESTARP(dfb, void *, fp); /* { dg-warning "warning: ISO C forbids passing argument 1 of 'dfbFp.x' between function pointer and 'void \\*'" } */ +TESTASS(dfc, void *, fp); /* { dg-warning "warning: ISO C forbids assignment between function pointer and 'void \\*'" } */ +TESTINI(dfd, void *, fp); /* { dg-warning "warning: ISO C forbids initialization between function pointer and 'void \\*'" } */ +TESTRET(dfe, void *, fp); /* { dg-warning "warning: ISO C forbids return between function pointer and 'void \\*'" } */ + +TESTARG(sua, int *, unsigned int *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'suaF' differ in signedness" } */ +TESTARP(sub, int *, unsigned int *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'subFp.x' differ in signedness" } */ +TESTASS(suc, int *, unsigned int *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */ +TESTINI(sud, int *, unsigned int *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */ +TESTRET(sue, int *, unsigned int *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */ + +TESTARG(usa, unsigned int *, int *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'usaF' differ in signedness" } */ +TESTARP(usb, unsigned int *, int *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'usbFp.x' differ in signedness" } */ +TESTASS(usc, unsigned int *, int *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */ +TESTINI(usd, unsigned int *, int *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */ +TESTRET(use, unsigned int *, int *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */ + +TESTARG(cua, char *, unsigned char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'cuaF' differ in signedness" } */ +TESTARP(cub, char *, unsigned char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'cubFp.x' differ in signedness" } */ +TESTASS(cuc, char *, unsigned char *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */ +TESTINI(cud, char *, unsigned char *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */ +TESTRET(cue, char *, unsigned char *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */ + +TESTARG(uca, unsigned char *, char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'ucaF' differ in signedness" } */ +TESTARP(ucb, unsigned char *, char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'ucbFp.x' differ in signedness" } */ +TESTASS(ucc, unsigned char *, char *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */ +TESTINI(ucd, unsigned char *, char *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */ +TESTRET(uce, unsigned char *, char *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */ + +TESTARG(csa, char *, signed char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'csaF' differ in signedness" } */ +TESTARP(csb, char *, signed char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'csbFp.x' differ in signedness" } */ +TESTASS(csc, char *, signed char *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */ +TESTINI(csd, char *, signed char *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */ +TESTRET(cse, char *, signed char *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */ + +TESTARG(sca, signed char *, char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'scaF' differ in signedness" } */ +TESTARP(scb, signed char *, char *); /* { dg-warning "warning: pointer targets in passing argument 1 of 'scbFp.x' differ in signedness" } */ +TESTASS(scc, signed char *, char *); /* { dg-warning "warning: pointer targets in assignment differ in signedness" } */ +TESTINI(scd, signed char *, char *); /* { dg-warning "warning: pointer targets in initialization differ in signedness" } */ +TESTRET(sce, signed char *, char *); /* { dg-warning "warning: pointer targets in return differ in signedness" } */ + +TESTARG(cia, char *, int *); /* { dg-warning "warning: passing argument 1 of 'ciaF' from incompatible pointer type" } */ +TESTARP(cib, char *, int *); /* { dg-warning "warning: passing argument 1 of 'cibFp.x' from incompatible pointer type" } */ +TESTASS(cic, char *, int *); /* { dg-warning "warning: assignment from incompatible pointer type" } */ +TESTINI(cid, char *, int *); /* { dg-warning "warning: initialization from incompatible pointer type" } */ +TESTRET(cie, char *, int *); /* { dg-warning "warning: return from incompatible pointer type" } */ + +TESTARG(ica, int *, char *); /* { dg-warning "warning: passing argument 1 of 'icaF' from incompatible pointer type" } */ +TESTARP(icb, int *, char *); /* { dg-warning "warning: passing argument 1 of 'icbFp.x' from incompatible pointer type" } */ +TESTASS(icc, int *, char *); /* { dg-warning "warning: assignment from incompatible pointer type" } */ +TESTINI(icd, int *, char *); /* { dg-warning "warning: initialization from incompatible pointer type" } */ +TESTRET(ice, int *, char *); /* { dg-warning "warning: return from incompatible pointer type" } */ + +TESTARG(ciia, char *, int); /* { dg-warning "warning: passing argument 1 of 'ciiaF' makes pointer from integer without a cast" } */ +TESTARP(ciib, char *, int); /* { dg-warning "warning: passing argument 1 of 'ciibFp.x' makes pointer from integer without a cast" } */ +TESTASS(ciic, char *, int); /* { dg-warning "warning: assignment makes pointer from integer without a cast" } */ +TESTINI(ciid, char *, int); /* { dg-warning "warning: initialization makes pointer from integer without a cast" } */ +TESTRET(ciie, char *, int); /* { dg-warning "warning: return makes pointer from integer without a cast" } */ + +TESTARG(iica, int, char *); /* { dg-warning "warning: passing argument 1 of 'iicaF' makes integer from pointer without a cast" } */ +TESTARP(iicb, int, char *); /* { dg-warning "warning: passing argument 1 of 'iicbFp.x' makes integer from pointer without a cast" } */ +TESTASS(iicc, int, char *); /* { dg-warning "warning: assignment makes integer from pointer without a cast" } */ +TESTINI(iicd, int, char *); /* { dg-warning "warning: initialization makes integer from pointer without a cast" } */ +TESTRET(iice, int, char *); /* { dg-warning "warning: return makes integer from pointer without a cast" } */ + +struct s { int a; }; + +TESTARG(stria, struct s, int); /* { dg-error "error: incompatible type for argument 1 of 'striaF'" } */ +TESTARP(strib, struct s, int); /* { dg-error "error: incompatible type for argument 1 of 'stribFp.x'" } */ +TESTASS(stric, struct s, int); /* { dg-error "error: incompatible types in assignment" } */ +TESTINI(strid, struct s, int); /* { dg-error "error: invalid initializer" } */ +TESTRET(strie, struct s, int); /* { dg-error "error: incompatible types in return" } */ + +TESTARG(istra, int, struct s); /* { dg-error "error: incompatible type for argument 1 of 'istraF'" } */ +TESTARP(istrb, int, struct s); /* { dg-error "error: incompatible type for argument 1 of 'istrbFp.x'" } */ +TESTASS(istrc, int, struct s); /* { dg-error "error: incompatible types in assignment" } */ +TESTINI(istrd, int, struct s); /* { dg-error "error: incompatible types in initialization" } */ +TESTRET(istre, int, struct s); /* { dg-error "error: incompatible types in return" } */ diff --git a/gcc/testsuite/gcc.dg/assign-warn-2.c b/gcc/testsuite/gcc.dg/assign-warn-2.c new file mode 100644 index 00000000000..eae22d1549b --- /dev/null +++ b/gcc/testsuite/gcc.dg/assign-warn-2.c @@ -0,0 +1,124 @@ +/* Test diagnostics for bad implicit type conversions. + -pedantic-errors test. */ +/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ +/* { dg-do compile } */ +/* { dg-options "-pedantic-errors" } */ + +#define TESTARG(ID, TL, TR) void ID##F(TL); void ID##F2(TR x) { ID##F(x); } extern int dummy +#define TESTARP(ID, TL, TR) struct { void (*x)(TL); } ID##Fp; void ID##F2(TR x) { ID##Fp.x(x); } extern int dummy +#define TESTASS(ID, TL, TR) void ID##F(TR x) { TL y; y = x; } extern int dummy +#define TESTINI(ID, TL, TR) void ID##F(TR x) { TL y = x; } extern int dummy +#define TESTRET(ID, TL, TR) TR ID##V; TL ID##F(void) { return ID##V; } extern int dummy + +typedef void (*fp)(void); +typedef void (*nrfp)(void) __attribute__((noreturn)); + +TESTARG(fqa, nrfp, fp); /* { dg-error "error: passing argument 1 of 'fqaF' makes qualified function pointer from unqualified" } */ +TESTARP(fqb, nrfp, fp); /* { dg-error "error: passing argument 1 of 'fqbFp.x' makes qualified function pointer from unqualified" } */ +TESTASS(fqc, nrfp, fp); /* { dg-error "error: assignment makes qualified function pointer from unqualified" } */ +TESTINI(fqd, nrfp, fp); /* { dg-error "error: initialization makes qualified function pointer from unqualified" } */ +TESTRET(fqe, nrfp, fp); /* { dg-error "error: return makes qualified function pointer from unqualified" } */ + +TESTARG(ofqa, fp, nrfp); +TESTARP(ofqb, fp, nrfp); +TESTASS(ofqc, fp, nrfp); +TESTINI(ofqd, fp, nrfp); +TESTRET(ofqe, fp, nrfp); + +TESTARG(qa, char *, const char *); /* { dg-error "error: passing argument 1 of 'qaF' discards qualifiers from pointer target type" } */ +TESTARP(qb, char *, const char *); /* { dg-error "error: passing argument 1 of 'qbFp.x' discards qualifiers from pointer target type" } */ +TESTASS(qc, char *, const char *); /* { dg-error "error: assignment discards qualifiers from pointer target type" } */ +TESTINI(qd, char *, const char *); /* { dg-error "error: initialization discards qualifiers from pointer target type" } */ +TESTRET(qe, char *, const char *); /* { dg-error "error: return discards qualifiers from pointer target type" } */ + +TESTARG(oqa, const char *, char *); +TESTARP(oqb, const char *, char *); +TESTASS(oqc, const char *, char *); +TESTINI(oqd, const char *, char *); +TESTRET(oqe, const char *, char *); + +TESTARG(fda, fp, void *); /* { dg-error "error: ISO C forbids passing argument 1 of 'fdaF' between function pointer and 'void \\*'" } */ +TESTARP(fdb, fp, void *); /* { dg-error "error: ISO C forbids passing argument 1 of 'fdbFp.x' between function pointer and 'void \\*'" } */ +TESTASS(fdc, fp, void *); /* { dg-error "error: ISO C forbids assignment between function pointer and 'void \\*'" } */ +TESTINI(fdd, fp, void *); /* { dg-error "error: ISO C forbids initialization between function pointer and 'void \\*'" } */ +TESTRET(fde, fp, void *); /* { dg-error "error: ISO C forbids return between function pointer and 'void \\*'" } */ + +TESTARG(dfa, void *, fp); /* { dg-error "error: ISO C forbids passing argument 1 of 'dfaF' between function pointer and 'void \\*'" } */ +TESTARP(dfb, void *, fp); /* { dg-error "error: ISO C forbids passing argument 1 of 'dfbFp.x' between function pointer and 'void \\*'" } */ +TESTASS(dfc, void *, fp); /* { dg-error "error: ISO C forbids assignment between function pointer and 'void \\*'" } */ +TESTINI(dfd, void *, fp); /* { dg-error "error: ISO C forbids initialization between function pointer and 'void \\*'" } */ +TESTRET(dfe, void *, fp); /* { dg-error "error: ISO C forbids return between function pointer and 'void \\*'" } */ + +TESTARG(sua, int *, unsigned int *); /* { dg-error "error: pointer targets in passing argument 1 of 'suaF' differ in signedness" } */ +TESTARP(sub, int *, unsigned int *); /* { dg-error "error: pointer targets in passing argument 1 of 'subFp.x' differ in signedness" } */ +TESTASS(suc, int *, unsigned int *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */ +TESTINI(sud, int *, unsigned int *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */ +TESTRET(sue, int *, unsigned int *); /* { dg-error "error: pointer targets in return differ in signedness" } */ + +TESTARG(usa, unsigned int *, int *); /* { dg-error "error: pointer targets in passing argument 1 of 'usaF' differ in signedness" } */ +TESTARP(usb, unsigned int *, int *); /* { dg-error "error: pointer targets in passing argument 1 of 'usbFp.x' differ in signedness" } */ +TESTASS(usc, unsigned int *, int *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */ +TESTINI(usd, unsigned int *, int *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */ +TESTRET(use, unsigned int *, int *); /* { dg-error "error: pointer targets in return differ in signedness" } */ + +TESTARG(cua, char *, unsigned char *); /* { dg-error "error: pointer targets in passing argument 1 of 'cuaF' differ in signedness" } */ +TESTARP(cub, char *, unsigned char *); /* { dg-error "error: pointer targets in passing argument 1 of 'cubFp.x' differ in signedness" } */ +TESTASS(cuc, char *, unsigned char *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */ +TESTINI(cud, char *, unsigned char *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */ +TESTRET(cue, char *, unsigned char *); /* { dg-error "error: pointer targets in return differ in signedness" } */ + +TESTARG(uca, unsigned char *, char *); /* { dg-error "error: pointer targets in passing argument 1 of 'ucaF' differ in signedness" } */ +TESTARP(ucb, unsigned char *, char *); /* { dg-error "error: pointer targets in passing argument 1 of 'ucbFp.x' differ in signedness" } */ +TESTASS(ucc, unsigned char *, char *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */ +TESTINI(ucd, unsigned char *, char *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */ +TESTRET(uce, unsigned char *, char *); /* { dg-error "error: pointer targets in return differ in signedness" } */ + +TESTARG(csa, char *, signed char *); /* { dg-error "error: pointer targets in passing argument 1 of 'csaF' differ in signedness" } */ +TESTARP(csb, char *, signed char *); /* { dg-error "error: pointer targets in passing argument 1 of 'csbFp.x' differ in signedness" } */ +TESTASS(csc, char *, signed char *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */ +TESTINI(csd, char *, signed char *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */ +TESTRET(cse, char *, signed char *); /* { dg-error "error: pointer targets in return differ in signedness" } */ + +TESTARG(sca, signed char *, char *); /* { dg-error "error: pointer targets in passing argument 1 of 'scaF' differ in signedness" } */ +TESTARP(scb, signed char *, char *); /* { dg-error "error: pointer targets in passing argument 1 of 'scbFp.x' differ in signedness" } */ +TESTASS(scc, signed char *, char *); /* { dg-error "error: pointer targets in assignment differ in signedness" } */ +TESTINI(scd, signed char *, char *); /* { dg-error "error: pointer targets in initialization differ in signedness" } */ +TESTRET(sce, signed char *, char *); /* { dg-error "error: pointer targets in return differ in signedness" } */ + +TESTARG(cia, char *, int *); /* { dg-error "error: passing argument 1 of 'ciaF' from incompatible pointer type" } */ +TESTARP(cib, char *, int *); /* { dg-error "error: passing argument 1 of 'cibFp.x' from incompatible pointer type" } */ +TESTASS(cic, char *, int *); /* { dg-error "error: assignment from incompatible pointer type" } */ +TESTINI(cid, char *, int *); /* { dg-error "error: initialization from incompatible pointer type" } */ +TESTRET(cie, char *, int *); /* { dg-error "error: return from incompatible pointer type" } */ + +TESTARG(ica, int *, char *); /* { dg-error "error: passing argument 1 of 'icaF' from incompatible pointer type" } */ +TESTARP(icb, int *, char *); /* { dg-error "error: passing argument 1 of 'icbFp.x' from incompatible pointer type" } */ +TESTASS(icc, int *, char *); /* { dg-error "error: assignment from incompatible pointer type" } */ +TESTINI(icd, int *, char *); /* { dg-error "error: initialization from incompatible pointer type" } */ +TESTRET(ice, int *, char *); /* { dg-error "error: return from incompatible pointer type" } */ + +TESTARG(ciia, char *, int); /* { dg-error "error: passing argument 1 of 'ciiaF' makes pointer from integer without a cast" } */ +TESTARP(ciib, char *, int); /* { dg-error "error: passing argument 1 of 'ciibFp.x' makes pointer from integer without a cast" } */ +TESTASS(ciic, char *, int); /* { dg-error "error: assignment makes pointer from integer without a cast" } */ +TESTINI(ciid, char *, int); /* { dg-error "error: initialization makes pointer from integer without a cast" } */ +TESTRET(ciie, char *, int); /* { dg-error "error: return makes pointer from integer without a cast" } */ + +TESTARG(iica, int, char *); /* { dg-error "error: passing argument 1 of 'iicaF' makes integer from pointer without a cast" } */ +TESTARP(iicb, int, char *); /* { dg-error "error: passing argument 1 of 'iicbFp.x' makes integer from pointer without a cast" } */ +TESTASS(iicc, int, char *); /* { dg-error "error: assignment makes integer from pointer without a cast" } */ +TESTINI(iicd, int, char *); /* { dg-error "error: initialization makes integer from pointer without a cast" } */ +TESTRET(iice, int, char *); /* { dg-error "error: return makes integer from pointer without a cast" } */ + +struct s { int a; }; + +TESTARG(stria, struct s, int); /* { dg-error "error: incompatible type for argument 1 of 'striaF'" } */ +TESTARP(strib, struct s, int); /* { dg-error "error: incompatible type for argument 1 of 'stribFp.x'" } */ +TESTASS(stric, struct s, int); /* { dg-error "error: incompatible types in assignment" } */ +TESTINI(strid, struct s, int); /* { dg-error "error: invalid initializer" } */ +TESTRET(strie, struct s, int); /* { dg-error "error: incompatible types in return" } */ + +TESTARG(istra, int, struct s); /* { dg-error "error: incompatible type for argument 1 of 'istraF'" } */ +TESTARP(istrb, int, struct s); /* { dg-error "error: incompatible type for argument 1 of 'istrbFp.x'" } */ +TESTASS(istrc, int, struct s); /* { dg-error "error: incompatible types in assignment" } */ +TESTINI(istrd, int, struct s); /* { dg-error "error: incompatible types in initialization" } */ +TESTRET(istre, int, struct s); /* { dg-error "error: incompatible types in return" } */ diff --git a/gcc/testsuite/gcc.dg/cpp/ident-1.c b/gcc/testsuite/gcc.dg/cpp/ident-1.c new file mode 100644 index 00000000000..5437296ddd1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/ident-1.c @@ -0,0 +1,7 @@ +/* { dg-do preprocess } */ + +/* Based on PR 16999 */ + +#ident "this is an ident" + +/* { dg-final { scan-file "ident-1.i" "(^|\\n)#ident \"this is an ident\"($|\\n)" } } */ diff --git a/gcc/testsuite/gcc.dg/darwin-abi-2.c b/gcc/testsuite/gcc.dg/darwin-abi-2.c index 81da83c424f..4764831e847 100644 --- a/gcc/testsuite/gcc.dg/darwin-abi-2.c +++ b/gcc/testsuite/gcc.dg/darwin-abi-2.c @@ -5,6 +5,7 @@ tests that the ABI is correct. */ #include <stdio.h> +#include <stdlib.h> #define vector __attribute__((vector_size(16))) diff --git a/gcc/testsuite/gcc.dg/darwin-longdouble.c b/gcc/testsuite/gcc.dg/darwin-longdouble.c index 54f090ddff6..8e4259af350 100644 --- a/gcc/testsuite/gcc.dg/darwin-longdouble.c +++ b/gcc/testsuite/gcc.dg/darwin-longdouble.c @@ -3,6 +3,8 @@ /* No options so 'long long' can be used. */ #include <stdio.h> +#include <stdlib.h> +#include <string.h> typedef unsigned long long uint64_t; typedef uint64_t ldbits[2]; diff --git a/gcc/testsuite/gcc.dg/doloop-2.c b/gcc/testsuite/gcc.dg/doloop-2.c new file mode 100644 index 00000000000..115ec742ba3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/doloop-2.c @@ -0,0 +1,19 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ +extern void abort (void); +unsigned global_iters; + +void bi_reverse(int len) +{ + do { + global_iters++; + } while (--len > 0); +} + +int main() +{ + bi_reverse(5); + if (global_iters != 5) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/func-args-1.c b/gcc/testsuite/gcc.dg/func-args-1.c new file mode 100644 index 00000000000..306a5dfa04d --- /dev/null +++ b/gcc/testsuite/gcc.dg/func-args-1.c @@ -0,0 +1,53 @@ +/* Test messages for wrong number of arguments to function. */ +/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void f0(void); +void f1(int); +void f1v(int, ...); +void f2(int, int); +void f2v(int, int, ...); + +struct s { + void (*f0)(void); + void (*f1)(int); + void (*f1v)(int, ...); + void (*f2)(int, int); + void (*f2v)(int, int, ...); +} x; + +void +g (int a) +{ + f0(); + x.f0(); + f0(a); /* { dg-error "error: too many arguments to function 'f0'" } */ + x.f0(a); /* { dg-error "error: too many arguments to function 'x.f0'" } */ + f0(a, a); /* { dg-error "error: too many arguments to function 'f0'" } */ + x.f0(a, a); /* { dg-error "error: too many arguments to function 'x.f0'" } */ + f1(); /* { dg-error "error: too few arguments to function 'f1'" } */ + x.f1(); /* { dg-error "error: too few arguments to function 'x.f1'" } */ + f1(a); + x.f1(a); + f1(a, a); /* { dg-error "error: too many arguments to function 'f1'" } */ + x.f1(a, a); /* { dg-error "error: too many arguments to function 'x.f1'" } */ + f1v(); /* { dg-error "error: too few arguments to function 'f1v'" } */ + x.f1v(); /* { dg-error "error: too few arguments to function 'x.f1v'" } */ + f1v(a); + x.f1v(a); + f1v(a, a); + x.f1v(a, a); + f2(a); /* { dg-error "error: too few arguments to function 'f2'" } */ + x.f2(a); /* { dg-error "error: too few arguments to function 'x.f2'" } */ + f2(a, a); + x.f2(a, a); + f2(a, a, a); /* { dg-error "error: too many arguments to function 'f2'" } */ + x.f2(a, a, a); /* { dg-error "error: too many arguments to function 'x.f2'" } */ + f2v(a); /* { dg-error "error: too few arguments to function 'f2v'" } */ + x.f2v(a); /* { dg-error "error: too few arguments to function 'x.f2v'" } */ + f2v(a, a); + x.f2v(a, a); + f2v(a, a, a); + x.f2v(a, a, a); +} diff --git a/gcc/testsuite/gcc.dg/noncompile/20020213-1.c b/gcc/testsuite/gcc.dg/noncompile/20020213-1.c index 77798b57c4b..c1de5663ace 100644 --- a/gcc/testsuite/gcc.dg/noncompile/20020213-1.c +++ b/gcc/testsuite/gcc.dg/noncompile/20020213-1.c @@ -24,8 +24,8 @@ int main () return 0; } -/* { dg-warning "passing arg 2 of" "2nd incompatible" { target *-*-* } 15 } */ -/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 16 } */ -/* { dg-warning "passing arg 2 of" "2nd incompatible" { target *-*-* } 16 } */ -/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 18 } */ -/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 20 } */ +/* { dg-warning "passing argument 2 of" "2nd incompatible" { target *-*-* } 15 } */ +/* { dg-warning "passing argument 1 of" "1st incompatible" { target *-*-* } 16 } */ +/* { dg-warning "passing argument 2 of" "2nd incompatible" { target *-*-* } 16 } */ +/* { dg-warning "passing argument 1 of" "1st incompatible" { target *-*-* } 18 } */ +/* { dg-warning "passing argument 1 of" "1st incompatible" { target *-*-* } 20 } */ diff --git a/gcc/testsuite/gcc.dg/ppc-fsel-1.c b/gcc/testsuite/gcc.dg/ppc-fsel-1.c index 266b8dbd5a5..8d364352ac9 100644 --- a/gcc/testsuite/gcc.dg/ppc-fsel-1.c +++ b/gcc/testsuite/gcc.dg/ppc-fsel-1.c @@ -1,8 +1,8 @@ /* { dg-do compile { target powerpc*-*-* } } */ -/* { dg-options "-O -mpowerpc-gfxopt" } */ +/* { dg-options "-O -mpowerpc-gfxopt -fno-trapping-math" } */ /* { dg-final { scan-assembler "fsel" } } */ -/* Check that fsel can be generated even without -ffast-math. */ +/* If the user doesn't care about signals, fsel can be used in many cases. */ double foo(double a, double b, double c, double d) { diff --git a/gcc/testsuite/gcc.dg/ppc-fsel-3.c b/gcc/testsuite/gcc.dg/ppc-fsel-3.c new file mode 100644 index 00000000000..1d07c528eb1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ppc-fsel-3.c @@ -0,0 +1,11 @@ +/* { dg-do compile { target powerpc*-*-* } } */ +/* { dg-options "-O -mpowerpc-gfxopt" } */ +/* { dg-final { scan-assembler-not "fsub" } } */ + +/* Check that an fsub isn't generated when no arithmetic was requested; + such an fsub might incorrectly set floating-point exception flags. */ + +double foo(double a, double b, double c, double d) +{ + return a < b ? c : d; +} diff --git a/gcc/testsuite/gcc.dg/ultrasp11.c b/gcc/testsuite/gcc.dg/ultrasp11.c new file mode 100644 index 00000000000..8f279f721ae --- /dev/null +++ b/gcc/testsuite/gcc.dg/ultrasp11.c @@ -0,0 +1,25 @@ +/* PR target/17245 */ +/* Origin: <aaronw@net.com> */ +/* Testcase by Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> */ +/* { dg-do compile { target sparc*-*-* } } */ +/* { dg-options "-O -mcpu=v9" } */ + +/* This used to fail on 32-bit Ultrasparc because reload was emitting + a move insn that doesn't satisfy its constraints. */ + +int n; +double range ; +double bin ; +double wmean; + +double f () +{ + int i ; + long double W = 0 ; + for ( i = 0 ; i < n ; i ++) { + double xi = range; + double wi = bin; + W += wi ; + wmean += ( xi - wmean) * ( wi / W); + } +} diff --git a/gcc/testsuite/gcc.dg/warn-1.c b/gcc/testsuite/gcc.dg/warn-1.c index ce35b41e941..dc2cd0e7c71 100644 --- a/gcc/testsuite/gcc.dg/warn-1.c +++ b/gcc/testsuite/gcc.dg/warn-1.c @@ -12,5 +12,5 @@ void bar (void) { void *vp; - foo (vp); /* { dg-warning "passing arg 1 of" } */ + foo (vp); /* { dg-warning "passing argument 1 of" } */ } |