OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/gnu-old/gcc-4.2.2/libmudflap/testsuite
    from Rev 154 to Rev 816
    Reverse comparison

Rev 154 → Rev 816

/libmudflap.c/pass47-frag.c
0,0 → 1,10
#include <stdlib.h>
#include <ctype.h>
 
int main ()
{
char* buf = "hello";
return ! ((toupper (buf[0]) == 'H' && toupper ('z') == 'Z' &&
tolower (buf[4]) == 'o' && tolower ('X') == 'x' &&
isdigit (buf[3])) == 0 && isalnum ('4'));
}
/libmudflap.c/fail33-frag.c
0,0 → 1,25
#include <stdlib.h>
 
#define SIZE 16
 
char b[SIZE];
char a[SIZE];
 
int main ()
{
int i, j=0, k;
int a_before_b = (& a[0] < & b[0]);
/* Rather than iterating linearly, which would allow loop unrolling
and mapping to pointer manipulation, we traverse the "joined"
arrays in some random order. */
for (i=0; i<SIZE*2; i++)
{
k = rand() % (SIZE*2);
j += (a_before_b ? a[k] : b[k]);
}
return j;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*\[ab\]" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail17-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
 
char * x;
int foo;
x = (char *) malloc (10);
strcpy (x, "123456789");
foo = strlen (x+10);
x [foo] = 1; /* we just just use foo to force execution of strlen */
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail27-frag.c
0,0 → 1,24
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char volatile *
__attribute__((noinline))
foo (unsigned i)
{
char volatile buffer[10];
char volatile *k = i ? & buffer[i] : NULL; /* defeat addr-of-local-returned warning */
return k;
}
 
int main ()
{
char volatile *f = foo (5);
f[0] = 'b';
 
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*buffer.*alloc.*dealloc" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail37-frag.c
0,0 → 1,22
typedef struct
{
short f : 3;
} small;
 
struct
{
int i;
small s[4];
} x;
 
main ()
{
int i;
for (i = 0; i < 5; i++)
x.s[i].f = 0;
exit (0);
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.* x.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass2-frag.c
0,0 → 1,9
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int foo [10][10];
foo[9][0] = 0;
return 0;
}
/libmudflap.c/pass6-frag.c
0,0 → 1,14
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
 
foo = (char *)malloc (10);
bar = (char *)malloc (10);
bar[2] = 'z'; /* touch memcpy source */
memcpy(foo, bar, 10);
return 0;
}
/libmudflap.c/fail1-frag.c
0,0 → 1,13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
volatile int foo [10];
foo[10] = 0;
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. foo.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail5-frag.c
0,0 → 1,14
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char foo [15];
char bar [10];
memcpy(foo, bar, 11);
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. bar.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail9-frag.c
0,0 → 1,21
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
foo = (char *)malloc (10);
bar = (char *)malloc (10);
 
free(foo);
 
bar[4] = 'a'; /* touch source buffer */
memcpy(foo, bar, 10);
return 0;
}
 
/* { dg-output "mudflap violation 1.*memcpy dest.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*malloc region.*alloc time.*dealloc time.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass12-frag.c
0,0 → 1,15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int i = 10;
int *x = (int *) malloc (i * sizeof (int));
 
while (--i)
{
++x;
*x = 0;
}
return 0;
}
/libmudflap.c/pass22-frag.c
0,0 → 1,23
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct foo {
unsigned base:8;
unsigned flag1:1;
unsigned flag2:3;
unsigned flag3:4;
char nothing[0];
};
 
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
 
struct foo* f = (struct foo *) malloc (offsetof (struct foo, nothing));
f->base = 1;
f->flag1 = 1;
free (f);
 
 
return 0;
}
/libmudflap.c/pass32-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct foo { char z[10]; };
 
char * get_z (struct foo *this)
{
return & this->z[0] /* the `this' pointer is not dereferenced! */;
}
 
int main ()
{
struct foo k;
char *n = get_z (& k);
srand ((int)(__mf_uintptr_t) n); /* use the pointer value */
return 0;
}
/libmudflap.c/pass42-frag.c
0,0 → 1,17
#include <stdio.h>
 
void
foo ()
{
putc ('h', stdout);
putc ('i', stdout);
putc ('\n', stdout);
}
 
int
main (int argc, char *argv[])
{
foo ();
return 0;
}
/* { dg-output "hi" } */
/libmudflap.c/pass52-frag.c
0,0 → 1,36
#include <stdio.h>
 
 
void writestuff (FILE *f)
{
fprintf (f, "hello world\n");
fputc ('y', f);
putc ('e', f);
}
 
void readstuff (FILE *f)
{
int c, d;
char stuff[100], *s;
c = fgetc (f);
ungetc (c, f);
d = fgetc (f);
s = fgets (stuff, sizeof(stuff), f);
}
 
int main ()
{
FILE *f;
writestuff (stdout);
writestuff (stderr);
f = fopen ("/dev/null", "w");
writestuff (f);
fclose (f);
f = fopen ("/dev/zero", "r");
readstuff (f);
f = freopen ("/dev/null", "w", f);
writestuff (f);
fclose (f);
 
return 0;
}
/libmudflap.c/pass16-frag.c
0,0 → 1,22
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct base {
int basic;
};
 
struct derived {
struct base common;
char extra;
};
 
struct base *bp;
 
bp = (struct base *) malloc (sizeof (struct derived));
 
bp->basic = 10;
((struct derived *)bp)->extra = 'x';
return 0;
}
/libmudflap.c/fail12-frag.c
0,0 → 1,19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int i = 10;
int *x = (int *) malloc (i * sizeof (int));
 
while (i--)
{
++x;
*x = 0;
}
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass26-frag.c
0,0 → 1,52
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
volatile int *p;
 
__mf_set_options ("-wipe-stack -no-check-initialization");
 
{
volatile int array [10];
p = & array[0];
 
array[0] = 2;
array[9] = 5;
 
/* Array[] should be wiped clean at this point. */
}
 
__mf_set_options ("-no-wipe-stack");
 
{
volatile int array2[10];
 
/* hope that this is allocated on top of old array[] */
if (p != & array2[0])
exit (0); /* Test is not applicable. */
 
array2[5] = 6;
 
/* Old values shouldn't still be around; the new one should. */
if (p[0] == 2 || p[9] == 5 || p[5] != 6)
abort() ;
 
/* array2[] should not be wiped at this point! */
}
 
{
volatile int array3[10];
 
/* hope that this is allocated on top of old array[] and array2[]*/
if (p != & array3[0])
exit (0); /* Test is not applicable. */
 
array3[1] = 2;
 
/* Check that old assignment is still around. */
if (p[5] != 6 || p[1] != 2)
abort() ;
}
return 0;
}
/libmudflap.c/fail22-frag.c
0,0 → 1,17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct boo { int a; };
int c;
struct boo *b = malloc (sizeof (struct boo));
__mf_set_options ("-check-initialization");
c = b->a;
(void) malloc (c); /* some dummy use of c */
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.malloc region.*1r/0w.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass36-frag.c
0,0 → 1,15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
 
int main ()
{
char *k;
__mf_set_options ("-sigusr1-report -print-leaks");
k = (char *) malloc (100);
raise (SIGUSR1);
free (k);
return 0;
}
/* { dg-output "Leaked object.*name=.malloc region.*objects: 1" } */
/libmudflap.c/fail32-frag.c
0,0 → 1,16
void foo (int k)
{
volatile int *b = & k;
b++;
*b = 5;
}
 
int main ()
{
foo (5);
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*k" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass46-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int foo (int *u, int i)
{
return u[i]; /* this dereference should not be instrumented */
}
 
int main ()
{
int *k = malloc (6);
int l = foo (k, 8);
int boo [8];
int m = boo [l % 2 + 12]; /* should not be instrumented */
return m & strlen (""); /* a fancy way of saying "0" */
}
/* { dg-options "-fmudflap -fmudflapir -lmudflap -Wall" } */
/libmudflap.c/pass56-frag.c
0,0 → 1,14
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
volatile int *k = (int *) malloc (sizeof (int));
volatile int l;
if (k == NULL) abort ();
*k = 5;
free ((void *) k);
__mf_set_options ("-ignore-reads");
l = *k; /* Should not trip, even though memory region just freed. */
return 0;
}
/libmudflap.c/fail16-frag.c
0,0 → 1,26
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct base {
int basic;
};
 
struct derived {
struct base common;
char extra;
};
 
struct base *bp;
 
bp = (struct base *) malloc (sizeof (struct base));;
 
bp->basic = 10;
((struct derived *)bp)->extra = 'x';
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/hook-allocstuff.c
0,0 → 1,16
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
char *foo = (char *) malloc (10);
strcpy (foo, "hello");
foo = (char *) realloc (foo, 20);
printf ("%s", foo);
if (strcmp (foo, "hello"))
abort ();
free (foo);
printf (" world\n");
return 0;
}
/* { dg-output "hello world" } */
/libmudflap.c/fail26-frag.c
0,0 → 1,24
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
 
__mf_set_options ("-check-initialization");
foo = (char *)malloc (1);
 
/* These two operations each expand to a read-modify-write.
* Even though the end result is that every bit of foo[0] is
* eventually written to deterministically, the first read
* triggers an uninit error. Ideally, it shouldn't, so this
* should be treated more like a regular XFAIL. */
foo[0] &= 0xfe;
foo[0] |= 0x01;
 
return foo[0];
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*malloc region.*1r/0w.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail36-frag.c
0,0 → 1,23
#include <stdlib.h>
 
struct k
{
int p;
struct {
int m : 31;
} q;
};
 
int
main ()
{
volatile struct k *l = malloc (sizeof (int)); /* make it only big enough for k.p */
/* Confirm that we instrument this nested construct
BIT_FIELD_REF(COMPONENT_REF(INDIRECT_REF)). */
l->q.m = 5;
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass1-frag.c
0,0 → 1,9
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int foo [10];
foo[9] = 0;
return 0;
}
/libmudflap.c/pass5-frag.c
0,0 → 1,11
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char foo [10];
char bar [10];
bar[4] = 'k'; /* touch memcpy source */
memcpy(foo, bar, 10);
return 0;
}
/libmudflap.c/fail4-frag.c
0,0 → 1,13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char foo [10];
strcpy(foo, "1234567890");
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. foo.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass9-frag.c
0,0 → 1,16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
foo = (char *)malloc (10);
bar = (char *)malloc (10);
 
free(foo);
foo = (char *)malloc (10);
bar[3] = 'w'; /* touch memcpy source */
memcpy(foo, bar, 10);
return 0;
}
/libmudflap.c/cfrags.exp
0,0 → 1,21
global MUDFLAP_FLAGS
set MUDFLAP_FLAGS [list {} {-static} {-O2} {-O3}]
 
libmudflap-init c
 
dg-init
 
global srcdir
foreach flags $MUDFLAP_FLAGS {
foreach srcfile [lsort [glob -nocomplain \
${srcdir}/libmudflap.c/*frag.c \
${srcdir}/libmudflap.c/heap*.c \
${srcdir}/libmudflap.c/hook*.c \
${srcdir}/libmudflap.c/pass*.c]] {
set bsrc [file tail $srcfile]
setenv MUDFLAP_OPTIONS "-viol-segv"
dg-runtest $srcfile $flags "-fmudflap -lmudflap"
}
}
 
dg-finish
/libmudflap.c/fail8-frag.c
0,0 → 1,19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
foo = (char *)malloc (10);
bar = (char *)malloc (10);
 
free(bar);
 
memcpy(foo, bar, 10);
return 0;
}
/* { dg-output "mudflap violation 1.*memcpy source.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*malloc region.*alloc time.*dealloc time.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/hook2-allocstuff.c
0,0 → 1,9
/* Generates recursive malloc call on i386-freebsd4.10 with -fmudflap. */
#include <stdlib.h>
 
int
main (void)
{
char *p = malloc (1<<24);
return 0;
}
/libmudflap.c/pass11-frag.c
0,0 → 1,15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int i = 10;
char *x = (char *) malloc (i * sizeof (char));
 
while (--i)
{
++x;
*x = 0;
}
return 0;
}
/libmudflap.c/externs-1.c
0,0 → 1,16
typedef struct { char *name; } dummy;
extern dummy d[];
 
int
main (void)
{
dummy *pd = d;
 
while (pd->name)
{
printf ("%s\n", pd->name);
pd++;
}
 
return 0;
}
/libmudflap.c/pass21-frag.c
0,0 → 1,15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef __FreeBSD__
#include <alloca.h>
#endif
int main ()
{
char *boo, *foo;
boo = (char *) alloca (100);
boo[99] = 'a';
foo = (char *) __builtin_alloca (200);
foo[44] = 'b';
return 0;
}
/libmudflap.c/pass51-frag.c
0,0 → 1,41
/* Test object-spanning accesses. This is most conveniently done with
mmap, thus the config.h specificity here. */
#include "../config.h"
 
#include <unistd.h>
#include <string.h>
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
 
int main ()
{
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
#endif
#ifdef HAVE_MMAP
void *p;
unsigned pg = getpagesize ();
int rc;
 
p = mmap (NULL, 4 * pg, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
if (p == NULL)
return 1;
 
memset (p, 0, 4*pg);
rc = munmap (p, pg);
if (rc < 0) return 1;
memset (p+pg, 0, 3*pg);
rc = munmap (p+pg, pg);
if (rc < 0) return 1;
memset (p+2*pg, 0, 2*pg);
rc = munmap (p+2*pg, pg);
if (rc < 0) return 1;
memset (p+3*pg, 0, pg);
rc = munmap (p+3*pg, pg);
if (rc < 0) return 1;
#endif
 
return 0;
}
/libmudflap.c/pass15-frag.c
0,0 → 1,23
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct base {
int basic;
};
 
struct derived {
struct base common;
char extra;
};
 
struct derived d;
struct base *bp;
 
bp = (struct base *)&d;
 
bp->basic = 10;
((struct derived *)bp)->extra = 'x';
return 0;
}
/libmudflap.c/pass25-frag.c
0,0 → 1,15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int *foo = malloc (10 * sizeof(int));
int *bar = & foo[3];
/* Watching occurs at the object granularity, which is in this case
the entire array. */
__mf_watch (& foo[1], sizeof(foo[1]));
__mf_unwatch (& foo[6], sizeof(foo[6]));
*bar = 10;
free (foo);
return 0;
}
/libmudflap.c/fail11-frag.c
0,0 → 1,19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int i = 10;
char *x = (char *) malloc (i * sizeof (char));
 
while (i--)
{
++x;
*x = 0;
}
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass35-frag.c
0,0 → 1,14
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
extern char end []; /* Any old symbol we're sure will be defined. */
/* { dg-warning "cannot track unknown size extern" "cannot track unknown size extern" { target *-*-* } 0 } */
 
int main ()
{
/* dummy register */
__mf_register ((void *) end, 1, __MF_TYPE_GUESS, "end");
char z = end[0];
return z & 0;
}
/libmudflap.c/fail21-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int *bar = (int *) malloc (sizeof (int));
/* Make an access here to get &foo into the lookup cache. */
*bar = 5;
__mf_watch (bar, sizeof(int));
/* This access should trigger the watch violation. */
*bar = 10;
/* NOTREACHED */
return 0;
}
/* { dg-output "mudflap violation 1.*watch.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass45-frag.c
0,0 → 1,31
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
extern void h (const char *p, const char *f);
int
main (void)
{
h (0, "foo");
return 0;
}
 
void
h (const char *p, const char *f)
{
size_t pl = p == NULL ? 0 : strlen (p);
size_t fl = strlen (f) + 1;
char a[pl + 1 + fl];
char *cp = a;
char b[pl + 5 + fl * 2];
char *cccp = b;
if (p != NULL)
{
cp = memcpy (cp, p, pl);
*cp++ = ':';
}
memcpy (cp, f, fl);
strcpy (b, a);
puts (a);
}
/* { dg-output "foo" } */
/libmudflap.c/fail31-frag.c
0,0 → 1,22
#include <stdio.h>
#include <stdlib.h>
 
extern int h (int i, int j);
 
int main ()
{
int z = h (4, 10);
return 0;
}
 
int h (int i, int j)
{
int k[i];
k[j] = i;
return j;
}
 
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*\(h\).*k" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass19-frag.c
0,0 → 1,11
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct foo {int base; char variable[1]; }; /* a common idiom for variable-size structs */
 
struct foo * b = (struct foo *) malloc (sizeof (int)); /* enough for base */
b->base = 4;
return 0;
}
/libmudflap.c/pass29-frag.c
0,0 → 1,15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct boo { int a; };
int c;
struct boo *b = malloc (sizeof (struct boo));
__mf_set_options ("-check-initialization");
b->a = 0;
/* That __mf_set_options call could be here instead. */
c = b->a;
(void) malloc (c); /* some dummy use of c */
return 0;
}
/libmudflap.c/fail15-frag.c
0,0 → 1,27
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct base {
int basic;
};
 
struct derived {
struct base common;
char extra;
};
 
volatile struct base b;
volatile struct base *bp;
 
bp = (struct base *)&b;
 
bp->basic = 10;
((struct derived volatile *)bp)->extra = 'x';
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. b.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail25-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
__mf_set_options ("-check-initialization");
foo = (char *)malloc (10);
bar = (char *)malloc (10);
/* bar[2] = 'z'; */ /* don't touch memcpy source */
memcpy(foo+1, bar+1, 9);
return 0;
}
/* { dg-output "mudflap violation 1.*check.read.*memcpy source.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*malloc region.*alloc time.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass49-frag.c
0,0 → 1,35
#include <stdlib.h>
#include <ctype.h>
#include <stdarg.h>
 
int foo (int a, ...)
{
va_list args;
char *a1;
int a2;
int k;
 
va_start (args, a);
for (k = 0; k < a; k++)
{
if ((k % 2) == 0)
{
char *b = va_arg (args, char *);
printf ("%s", b);
}
else
{
int b = va_arg (args, int);
printf ("%d", b);
}
}
va_end (args);
return a;
}
 
int main ()
{
foo (7, "hello ", 5, " ", 3, " world ", 9, "\n");
return 0;
}
/* { dg-output "hello 5 3 world 9" } */
/libmudflap.c/fail35-frag.c
0,0 → 1,23
#include <stdlib.h>
 
struct k
{
int p;
struct {
int m;
} q;
};
 
int
main ()
{
volatile struct k *l = malloc (sizeof (int)); /* make it only big enough for k.p */
/* Confirm that we instrument this nested construct
COMPONENT_REF(COMPONENT_REF(INDIRECT_REF)). */
l->q.m = 5;
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail19-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct foo {
int bar [10];
};
 
struct foo *k = (struct foo *) malloc (2 * sizeof(int));
k->bar[5] = 9;
free (k);
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail29-frag.c
0,0 → 1,17
#include <stdio.h>
#include <stdlib.h>
 
int foo (int u[10])
{
return u[8]; /* this dereference should be instrumented */
}
 
int main ()
{
int *k = malloc (6);
return foo (k);
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*malloc region.*alloc" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail39-frag.c
0,0 → 1,20
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
volatile int *k = (int *) malloc (sizeof (int));
volatile int l;
if (k == NULL) abort ();
*k = 5;
free ((void *) k);
__mf_set_options ("-ignore-reads");
l = *k; /* Should not trip, even though memory region just freed. */
__mf_set_options ("-no-ignore-reads");
l = *k; /* Should trip now. */
return 0;
}
/* { dg-output "mudflap violation 1.*check/read.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap dead object.*malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass-stratcliff.c
0,0 → 1,319
/* Test for string function add boundaries of usable memory.
Copyright (C) 1996,1997,1999,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
 
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
 
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA. */
 
#define _GNU_SOURCE 1
#define __USE_GNU
 
/* Make sure we don't test the optimized inline functions if we want to
test the real implementation. */
#undef __USE_STRING_INLINES
 
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/param.h>
 
#ifndef MAX
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#endif
 
int
main (int argc, char *argv[])
{
int size = sysconf (_SC_PAGESIZE);
char *adr, *dest;
int result = 0;
 
adr = (char *) mmap (NULL, 3 * size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
dest = (char *) mmap (NULL, 3 * size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
if (adr == MAP_FAILED || dest == MAP_FAILED)
{
if (errno == ENOSYS)
puts ("No test, mmap not available.");
else
{
printf ("mmap failed: %m");
result = 1;
}
}
else
{
int inner, middle, outer;
 
mprotect(adr, size, PROT_NONE);
mprotect(adr + 2 * size, size, PROT_NONE);
adr += size;
 
mprotect(dest, size, PROT_NONE);
mprotect(dest + 2 * size, size, PROT_NONE);
dest += size;
 
memset (adr, 'T', size);
 
/* strlen test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (inner = MAX (outer, size - 64); inner < size; ++inner)
{
adr[inner] = '\0';
 
if (strlen (&adr[outer]) != (size_t) (inner - outer))
{
printf ("strlen flunked for outer = %d, inner = %d\n",
outer, inner);
result = 1;
}
 
adr[inner] = 'T';
}
}
 
/* strchr test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (middle = MAX (outer, size - 64); middle < size; ++middle)
{
for (inner = middle; inner < size; ++inner)
{
char *cp;
adr[middle] = 'V';
adr[inner] = '\0';
 
cp = strchr (&adr[outer], 'V');
 
if ((inner == middle && cp != NULL)
|| (inner != middle
&& (cp - &adr[outer]) != middle - outer))
{
printf ("strchr flunked for outer = %d, middle = %d, "
"inner = %d\n", outer, middle, inner);
result = 1;
}
 
adr[inner] = 'T';
adr[middle] = 'T';
}
}
}
 
/* Special test. */
adr[size - 1] = '\0';
if (strchr (&adr[size - 1], '\n') != NULL)
{
puts ("strchr flunked for test of empty string at end of page");
result = 1;
}
 
/* strrchr test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (middle = MAX (outer, size - 64); middle < size; ++middle)
{
for (inner = middle; inner < size; ++inner)
{
char *cp;
adr[middle] = 'V';
adr[inner] = '\0';
 
cp = strrchr (&adr[outer], 'V');
 
if ((inner == middle && cp != NULL)
|| (inner != middle
&& (cp - &adr[outer]) != middle - outer))
{
printf ("strrchr flunked for outer = %d, middle = %d, "
"inner = %d\n", outer, middle, inner);
result = 1;
}
 
adr[inner] = 'T';
adr[middle] = 'T';
}
}
}
 
#ifndef __FreeBSD__
/* rawmemchr test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (middle = MAX (outer, size - 64); middle < size; ++middle)
{
char *cp;
adr[middle] = 'V';
 
cp = (char *) rawmemchr (&adr[outer], 'V');
 
if (cp - &adr[outer] != middle - outer)
{
printf ("rawmemchr flunked for outer = %d, middle = %d\n",
outer, middle);
result = 1;
}
 
adr[middle] = 'T';
}
}
#endif
 
/* strcpy test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (inner = MAX (outer, size - 64); inner < size; ++inner)
{
adr[inner] = '\0';
 
if (strcpy (dest, &adr[outer]) != dest
|| strlen (dest) != (size_t) (inner - outer))
{
printf ("strcpy flunked for outer = %d, inner = %d\n",
outer, inner);
result = 1;
}
 
adr[inner] = 'T';
}
}
 
/* strncpy tests */
adr[size-1] = 'T';
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
size_t len;
 
for (len = 0; len < size - outer; ++len)
{
if (strncpy (dest, &adr[outer], len) != dest
|| memcmp (dest, &adr[outer], len) != 0)
{
printf ("outer strncpy flunked for outer = %d, len = %Zd\n",
outer, len);
result = 1;
}
}
}
adr[size-1] = '\0';
 
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (inner = MAX (outer, size - 64); inner < size; ++inner)
{
size_t len;
 
adr[inner] = '\0';
 
for (len = 0; len < size - outer + 64; ++len)
{
if (strncpy (dest, &adr[outer], len) != dest
|| memcmp (dest, &adr[outer],
MIN (inner - outer, len)) != 0
|| (inner - outer < len
&& strlen (dest) != (inner - outer)))
{
printf ("strncpy flunked for outer = %d, inner = %d, len = %Zd\n",
outer, inner, len);
result = 1;
}
if (strncpy (dest + 1, &adr[outer], len) != dest + 1
|| memcmp (dest + 1, &adr[outer],
MIN (inner - outer, len)) != 0
|| (inner - outer < len
&& strlen (dest + 1) != (inner - outer)))
{
printf ("strncpy+1 flunked for outer = %d, inner = %d, len = %Zd\n",
outer, inner, len);
result = 1;
}
}
 
adr[inner] = 'T';
}
}
 
#ifndef __FreeBSD__
/* stpcpy test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (inner = MAX (outer, size - 64); inner < size; ++inner)
{
adr[inner] = '\0';
 
if ((stpcpy (dest, &adr[outer]) - dest) != inner - outer)
{
printf ("stpcpy flunked for outer = %d, inner = %d\n",
outer, inner);
result = 1;
}
 
adr[inner] = 'T';
}
}
 
/* stpncpy test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (middle = MAX (outer, size - 64); middle < size; ++middle)
{
adr[middle] = '\0';
 
for (inner = 0; inner < size - outer; ++ inner)
{
if ((stpncpy (dest, &adr[outer], inner) - dest)
!= MIN (inner, middle - outer))
{
printf ("stpncpy flunked for outer = %d, middle = %d, "
"inner = %d\n", outer, middle, inner);
result = 1;
}
}
 
adr[middle] = 'T';
}
}
#endif
 
/* memcpy test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
for (inner = 0; inner < size - outer; ++inner)
if (memcpy (dest, &adr[outer], inner) != dest)
{
printf ("memcpy flunked for outer = %d, inner = %d\n",
outer, inner);
result = 1;
}
 
#ifndef __FreeBSD__
/* mempcpy test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
for (inner = 0; inner < size - outer; ++inner)
if (mempcpy (dest, &adr[outer], inner) != dest + inner)
{
printf ("mempcpy flunked for outer = %d, inner = %d\n",
outer, inner);
result = 1;
}
#endif
}
 
return result;
}
/libmudflap.c/pass4-frag.c
0,0 → 1,9
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char foo[10];
strcpy (foo, "123456789");
return 0;
}
/libmudflap.c/pass8-frag.c
0,0 → 1,16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
foo = (char *)malloc (10);
bar = (char *)malloc (10);
 
free(bar);
bar = (char *)malloc (10);
bar[6] = 'k'; /* touch memcpy source */
memcpy(foo, bar, 10);
return 0;
}
/libmudflap.c/fail3-frag.c
0,0 → 1,13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
volatile int foo [10][10][10];
foo[9][10][0] = 0;
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. foo.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail7-frag.c
0,0 → 1,17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
foo = (char *)malloc (12);
bar = (char *)malloc (10);
 
memcpy(foo+1, bar+1, 10);
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass10-frag.c
0,0 → 1,12
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int foo[10];
int sz = sizeof (int);
 
char *bar = (char *)foo;
bar [sz * 9] = 0;
return 0;
}
/libmudflap.c/pass20-frag.c
0,0 → 1,13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct bar {int stuff; int array[10]; };
 
struct bar *foo = (struct bar *) malloc (sizeof (struct bar));
foo->array[5] = 4;
free (foo);
 
return 0;
}
/libmudflap.c/pass30-frag.c
0,0 → 1,12
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char zoo [10];
 
int main ()
{
int i = strlen ("eight") + strlen ("one");
zoo[i] = 'a';
return 0;
}
/libmudflap.c/pass50-frag.c
0,0 → 1,29
#include <stdlib.h>
 
struct a
{
int a1[5];
union
{
int b1[5];
struct
{
int c1;
int c2;
} b2[4];
} a2[8];
};
 
int i1 = 5;
int i2 = 2;
int i3 = 6;
int i4 = 0;
 
int
main ()
{
volatile struct a *k = calloc (1, sizeof (struct a));
k->a2[i1].b1[i2] = k->a2[i3].b2[i4].c2;
free ((void *) k);
return 0;
}
/libmudflap.c/pass14-frag.c
0,0 → 1,20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct a {
int x;
int y;
char z;
};
 
struct a k;
struct a *p;
 
p = &k;
 
p->z = 'q';
 
return 0;
}
/libmudflap.c/pass24-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct foo {
int zoo;
int bar [10];
float baz;
};
 
#define offsetof(S,F) ((size_t) & (((S *) 0)->F))
 
struct foo *k = (struct foo *) malloc (offsetof (struct foo, bar[4]));
k->bar[1] = 9;
free (k);
return 0;
}
/libmudflap.c/fail10-frag.c
0,0 → 1,16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
volatile int foo[10];
int sz = sizeof (int);
 
volatile char *bar = (char *)foo;
bar [sz * 10] = 0;
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. foo.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail20-frag.c
0,0 → 1,13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
volatile char *p = (char *) 0;
*p = 5;
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.NULL.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass34-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void test (int *k)
{
if (*k > 5) { *k --; }
}
 
int z;
 
int main ()
{
/* z is initialized, but not via a pointer, so not instrumented */
z = rand ();
test (& z);
return 0;
}
/libmudflap.c/fail30-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
 
int foo (int u)
{
return u*u;
}
 
int main ()
{
int *k = malloc(5);
int j = foo (k[8]); /* this call argument should be instrumented */
return j;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*malloc region.*alloc" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass44-frag.c
0,0 → 1,14
#include <stdio.h>
 
void
foo ()
{
return; /* accept value-less return statement */
}
 
int
main (int argc, char *argv[])
{
foo ();
return 0;
}
/libmudflap.c/pass18-frag.c
0,0 → 1,27
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int t;
char foo[3] = { 'b', 'c', 'd' };
int bar[3] = {1, 2, 0};
t = 1;
 
/* These tests check expression evaluation rules, such as
ensuring that side-effect expression (++) get executed the
right number of times; that array lookup checks nest correctly. */
foo[t++] = 'a';
if (foo[0] != 'b' || foo[1] != 'a' || foo[2] != 'd' || t != 2) abort ();
if (bar[0] != 1 || bar[1] != 2 || bar[2] != 0) abort();
 
foo[bar[t--]] = 'e';
if (foo[0] != 'e' || foo[1] != 'a' || foo[2] != 'd' || t != 1) abort ();
if (bar[0] != 1 || bar[1] != 2 || bar[2] != 0) abort();
 
foo[bar[++t]--] = 'g';
if (foo[0] != 'g' || foo[1] != 'a' || foo[2] != 'd' || t != 2) abort ();
if (bar[0] != 1 || bar[1] != 2 || bar[2] != -1) abort();
 
return 0;
}
/libmudflap.c/fail40-frag.c
0,0 → 1,56
/* Test proper lookup-uncaching of large objects */
#include "../config.h"
 
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
 
int main ()
{
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
#endif
#ifdef HAVE_MMAP
volatile unsigned char *p;
unsigned num = getpagesize ();
unsigned i;
int rc;
 
/* Get a bit of usable address space. We really want an 2**N+1-sized object,
so the low/high addresses wrap when hashed into the lookup cache. So we
will manually unregister the entire mmap, then re-register a slice. */
p = mmap (NULL, num, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
if (p == NULL)
return 1;
/* Now unregister it, as if munmap was called. But don't actually munmap, so
we can write into the memory. */
__mf_unregister ((void *) p, num, __MF_TYPE_HEAP_I);
 
/* Now register it under a slightly inflated, 2**N+1 size. */
__mf_register ((void *) p, num+1, __MF_TYPE_HEAP_I, "fake mmap registration");
 
/* Traverse array to ensure that entire lookup cache is made to point at it. */
for (i=0; i<num; i++)
p[i] = 0;
 
/* Unregister it. This should clear the entire lookup cache, even though
hash(low) == hash (high) (and probably == 0) */
__mf_unregister ((void *) p, num+1, __MF_TYPE_HEAP_I);
 
/* Now touch the middle portion of the ex-array. If the lookup cache was
well and truly cleaned, then this access should trap. */
p[num/2] = 1;
 
return 0;
#else
return 1;
#endif
}
/* { dg-output "mudflap violation 1.*check/write.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap dead object.*fake mmap registration.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass54-frag.c
0,0 → 1,33
struct k
{
struct {
int b;
int c;
} a;
};
 
static struct k l;
static struct k m;
 
void foo ()
{
/* This should not be instrumented. */
l.a.b = 5;
}
 
void bar ()
{
/* This should not be instrumented. */
m.a.b = 5;
}
 
int main ()
{
/* Force TREE_ADDRESSABLE on "l" only. */
volatile int *k = & l.a.c;
*k = 8;
__mf_set_options ("-mode-violate");
foo ();
bar ();
__mf_set_options ("-mode-check");
}
/libmudflap.c/fail14-frag.c
0,0 → 1,29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct a {
int x;
int y;
char z;
};
 
struct b {
int x;
int y;
};
 
volatile struct b k;
volatile struct a *p;
 
p = (struct a*) &k;
 
p->z = 'q';
 
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. k.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass38-frag.c
0,0 → 1,9
/* Test an odd construct for compilability. */
static void *fwd;
void *bwd = &fwd;
static void *fwd = &bwd;
 
int main ()
{
return 0;
}
/libmudflap.c/fail34-frag.c
0,0 → 1,22
#include <stdlib.h>
 
struct s
{
int a1[4];
};
 
struct s a, b;
int idx = 7; /* should pass to the next object */
 
int
main ()
{
int i, j=0;
int a_before_b = (& a < & b);
j = (a_before_b ? a.a1[idx] : b.a1[idx]);
return j;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*\[ab\]" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass48-frag.c
0,0 → 1,11
void foo (int k)
{
volatile int *b = & k;
*b = 5;
}
 
int main ()
{
foo (5);
return 0;
}
/libmudflap.c/fail18-frag.c
0,0 → 1,16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
/* One cannot redeclare __mf_lc_mask in proper C from instrumented
code, because of the way the instrumentation code emits its decls. */
extern unsigned foo __asm__ ("__mf_lc_mask");
unsigned * volatile bar = &foo;
*bar = 4;
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.__mf_lc_mask.*no-access.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/externs.exp
0,0 → 1,43
global MUDFLAP_FLAGS
set MUDFLAP_FLAGS [list {} {-static} {-O2} {-O3}]
 
libmudflap-init c
dg-init
 
global srcdir subdir
 
foreach flags $MUDFLAP_FLAGS {
set l1 [libmudflap_target_compile "$srcdir/$subdir/externs-1.c" "externs-1.o" object {additional_flags=-fmudflap}]
set test "externs-1 compilation ${flags}"
if [string match "*mudflap cannot track unknown size extern *d*" $l1] { pass $test } { fail $test }
 
set l2 [libmudflap_target_compile "$srcdir/$subdir/externs-2.c" "externs-2.o" object {additional_flags=-fmudflap}]
set test "externs-2 compilation ${flags}"
if [string match "" $l2] { pass $test } { fail $test }
 
set l3 [libmudflap_target_compile "externs-1.o externs-2.o" "externs-12.exe" executable {additional_flags=-fmudflap additional_flags=-lmudflap}]
set test "externs-12 linkage ${flags}"
if [string match "" $l3] { pass $test } { fail $test }
 
set l4 [libmudflap_target_compile "externs-2.o externs-1.o" "externs-21.exe" executable {additional_flags=-fmudflap additional_flags=-lmudflap}]
set test "externs-21 linkage ${flags}"
if [string match "" $l3] { pass $test } { fail $test }
 
setenv MUDFLAP_OPTIONS "-viol-segv"
 
remote_spawn host "./externs-12.exe"
set l5 [remote_wait host 10]
set test "externs-12 execution ${flags}"
if {[lindex $l5 0] == 0} { pass $test } { fail $test }
 
remote_spawn host "./externs-21.exe"
set l6 [remote_wait host 10]
set test "externs-21 execution ${flags}"
if {[lindex $l6 0] == 0} { pass $test } { fail $test }
 
foreach f [glob -nocomplain "externs-*"] {
remote_file build delete $f
}
}
 
dg-finish
/libmudflap.c/fail28-frag.c
0,0 → 1,18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int foo (int *u, int i)
{
return u[i]; /* this dereference should be instrumented */
}
 
int main ()
{
int *k = malloc (6);
return foo (k, 8);
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*malloc region.*alloc" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail38-frag.c
0,0 → 1,29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct a {
int x;
int y;
int z : 10;
};
 
struct b {
int x;
int y;
};
 
volatile struct b k;
volatile struct a *p;
 
p = (struct a*) &k;
 
p->z = 'q';
 
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. k.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/heap-scalestress.c
0,0 → 1,79
/* zz30
*
* demonstrate a splay-tree depth problem
*/
 
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
 
#ifndef SCALE
#define SCALE 100000
#endif
 
 
struct list
{
struct list *next;
};
 
 
int
main ()
{
struct list *head = NULL;
struct list *tail = NULL;
struct list *p;
long n;
int direction;
 
for (direction = 0; direction < 2; direction++)
{
fprintf (stdout, "allocating\n");
fflush (stdout);
 
for (n = 0; n < SCALE; ++n)
{
p = malloc (sizeof *p);
if (NULL == p)
{
fprintf (stdout, "malloc failed\n");
break;
}
if (direction == 0)
{ /* add at tail */
p->next = NULL;
if (NULL != tail)
tail->next = p;
else
head = p;
tail = p;
}
else
{ /* add at head */
p->next = head;
if (NULL == tail)
tail = p;
head = p;
}
}
 
fprintf (stdout, "freeing\n");
fflush (stdout);
 
while (NULL != head)
{
p = head;
head = head->next;
free (p);
}
 
}
 
fprintf (stdout, "done\n");
fflush (stdout);
 
return (0);
}
 
/* { dg-output "allocating.*freeing.*allocating.*freeing.*done" } */
/libmudflap.c/pass3-frag.c
0,0 → 1,9
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int foo [10][10][10];
foo[9][9][0] = 0;
return 0;
}
/libmudflap.c/fail2-frag.c
0,0 → 1,13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
volatile int foo [10][10];
foo[10][0] = 0;
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. foo.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass7-frag.c
0,0 → 1,13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
foo = (char *)malloc (10);
bar = (char *)malloc (10);
bar[2] = 'z'; /* touch memcpy source */
memcpy(foo+1, bar+1, 9);
return 0;
}
/libmudflap.c/fail6-frag.c
0,0 → 1,17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *foo;
char *bar;
foo = (char *)malloc (10);
bar = (char *)malloc (15);
 
memcpy(foo, bar, 11);
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*malloc region.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/pass13-frag.c
0,0 → 1,17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct a {
int x;
int y;
char z;
};
 
struct a k;
 
k.z = 'q';
 
return 0;
}
/libmudflap.c/externs-2.c
0,0 → 1,2
typedef struct { char *name; } dummy;
dummy d[] = { {"a"}, {0} };
/libmudflap.c/pass23-frag.c
0,0 → 1,29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct foo {
int part1: 8;
int nothing : 1;
int part2 : 5;
int lots_more_nothing : 3;
int some_padding; /* for 64-bit hosts */
float some_more_nothing;
double yet_more_nothing;
};
 
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
 
struct foo* q = (struct foo *) malloc (offsetof (struct foo, some_more_nothing));
q->nothing = 1; /* touch q */
/* The RHS of the following expression is meant to trigger a
fold-const.c mapping the expression to a BIT_FIELD_REF. It glues
together the accesses to the two non-neighbouring bitfields into a
single bigger boolean test. */
q->lots_more_nothing = (q->part1 == 13 && q->part2 == 7);
free (q);
 
 
return 0;
}
/libmudflap.c/pass33-frag.c
0,0 → 1,17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void test (int *k)
{
if (*k > 5) { *k --; }
}
 
int main ()
{
int z;
/* z is initialized, but not via a pointer, so not instrumented */
z = rand ();
test (& z);
return 0;
}
/libmudflap.c/pass43-frag.c
0,0 → 1,11
void
foo ()
{
}
 
int
main (int argc, char *argv[])
{
foo ();
return 0;
}
/libmudflap.c/pass17-frag.c
0,0 → 1,9
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
 
strlen("123456789");
return 0;
}
/libmudflap.c/pass53-frag.c
0,0 → 1,41
int foo1 ()
{
union { int l; char c[sizeof (int)]; } k1;
char *m;
k1.l = 0;
/* This test variant triggers ADDR_EXPR of k explicitly in order to
ensure it's registered with the runtime. */
m = k1.c;
k1.c [sizeof (int)-1] = m[sizeof (int)-2];
}
 
int foo2 ()
{
union { int l; char c[sizeof (int)]; } k2;
k2.l = 0;
/* Since this access is known-in-range, k need not be registered
with the runtime, but then this access better not be instrumented
either. */
k2.c [sizeof (int)-1] ++;
return k2.l;
}
 
int foo3idx = sizeof (int)-1;
 
int foo3 ()
{
union { int l; char c[sizeof (int)]; } k3;
k3.l = 0;
/* NB this test uses foo3idx, an extern variable, to defeat mudflap
known-in-range-index optimizations. */
k3.c [foo3idx] ++;
return k3.l;
}
 
int main ()
{
foo1 ();
foo2 ();
foo3 ();
return 0;
}
/libmudflap.c/fail13-frag.c
0,0 → 1,26
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
struct a {
int x;
int y;
char z;
};
 
struct b {
int x;
int y;
};
 
struct b k;
 
(*((volatile struct a *) &k)).z = 'q';
 
return 0;
}
/* { dg-output "mudflap violation 1..check/write.*" } */
/* { dg-output "Nearby object 1.*" } */
/* { dg-output "mudflap object.*.main. k.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c/fail23-frag.c
0,0 → 1,16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char zoo [10];
 
int main ()
{
int i = strlen ("012345") + strlen ("6789") + strlen ("01"); /* 11 */
zoo[i] = 'a';
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*zoo.*static.*" } */
/* { dg-do run { xfail *-*-* } } */
/Makefile.in
0,0 → 1,373
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
 
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
 
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = testsuite
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/mfconfig.exp.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = mfconfig.exp
SOURCES =
DIST_SOURCES =
DEJATOOL = $(PACKAGE)
RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LIBMUDFLAPTH_FALSE = @LIBMUDFLAPTH_FALSE@
LIBMUDFLAPTH_TRUE = @LIBMUDFLAPTH_TRUE@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MF_HAVE_STDINT_H = @MF_HAVE_STDINT_H@
MF_HAVE_UINTPTR_T = @MF_HAVE_UINTPTR_T@
NM = @NM@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SECTION_FLAGS = @SECTION_FLAGS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
ac_ct_NM = @ac_ct_NM@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_libmudflapth = @build_libmudflapth@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
enable_shared = @enable_shared@
enable_static = @enable_static@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
multi_basedir = @multi_basedir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_noncanonical = @target_noncanonical@
target_os = @target_os@
target_vendor = @target_vendor@
toolexecdir = @toolexecdir@
toolexeclibdir = @toolexeclibdir@
AUTOMAKE_OPTIONS = foreign dejagnu
EXPECT = `if [ -f ../../expect/expect ] ; then \
echo ../../expect/expect ; \
else echo expect ; fi`
 
RUNTEST = `if [ -f ${srcdir}/../../dejagnu/runtest ] ; then \
echo ${srcdir}/../../dejagnu/runtest ; \
else echo runtest ; fi`
 
all: all-am
 
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign testsuite/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
 
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mfconfig.exp: $(top_builddir)/config.status $(srcdir)/mfconfig.exp.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
mostlyclean-libtool:
-rm -f *.lo
 
clean-libtool:
-rm -rf .libs _libs
 
distclean-libtool:
-rm -f libtool
uninstall-info-am:
tags: TAGS
TAGS:
 
ctags: CTAGS
CTAGS:
 
 
check-DEJAGNU: site.exp
srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
EXPECT=$(EXPECT); export EXPECT; \
runtest=$(RUNTEST); \
if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
l='$(DEJATOOL)'; for tool in $$l; do \
$$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
done; \
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi
site.exp: Makefile
@echo 'Making a new site.exp file...'
@echo '## these variables are automatically generated by make ##' >site.tmp
@echo '# Do not edit here. If you wish to override these values' >>site.tmp
@echo '# edit the last section' >>site.tmp
@echo 'set srcdir $(srcdir)' >>site.tmp
@echo "set objdir `pwd`" >>site.tmp
@echo 'set build_alias "$(build_alias)"' >>site.tmp
@echo 'set build_triplet $(build_triplet)' >>site.tmp
@echo 'set host_alias "$(host_alias)"' >>site.tmp
@echo 'set host_triplet $(host_triplet)' >>site.tmp
@echo 'set target_alias "$(target_alias)"' >>site.tmp
@echo 'set target_triplet $(target_triplet)' >>site.tmp
@echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
@test ! -f site.exp || \
sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
@-rm -f site.bak
@test ! -f site.exp || mv site.exp site.bak
@mv site.tmp site.exp
 
distclean-DEJAGNU:
-rm -f site.exp site.bak
-l='$(DEJATOOL)'; for tool in $$l; do \
rm -f $$tool.sum $$tool.log; \
done
 
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
 
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
 
clean-generic:
 
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
 
clean-am: clean-generic clean-libtool mostlyclean-am
 
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-DEJAGNU distclean-generic \
distclean-libtool
 
dvi: dvi-am
 
dvi-am:
 
html: html-am
 
info: info-am
 
info-am:
 
install-data-am:
 
install-exec-am:
 
install-info: install-info-am
 
install-man:
 
installcheck-am:
 
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
 
mostlyclean: mostlyclean-am
 
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
pdf: pdf-am
 
pdf-am:
 
ps: ps-am
 
ps-am:
 
uninstall-am: uninstall-info-am
 
.PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \
clean-libtool distclean distclean-DEJAGNU distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
uninstall uninstall-am uninstall-info-am
 
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
/config/default.exp
0,0 → 1,3
load_lib standard.exp
load_lib libmudflap.exp
load_lib mfconfig.exp
/lib/mfdg.exp
0,0 → 1,377
# `mfdg' - overrides parts of general purpose testcase driver.
# Copyright (C) 1994 - 2001, 2003 Free Software Foundation, Inc.
 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 
 
# This is a modified excerpt of dejagnu/lib/dg.exp.
 
load_lib dg.exp
 
 
# dg-test -- runs a new style DejaGnu test
#
# Syntax: dg-test [-keep-output] prog tool_flags default_extra_tool_flags
#
# PROG is the full path name of the file to pass to the tool (eg: compiler).
# TOOL_FLAGS is a set of options to always pass.
# DEFAULT_EXTRA_TOOL_FLAGS are additional options if the testcase has none.
 
#proc dg-test { prog tool_flags default_extra_tool_flags } {
proc dg-test { args } {
global dg-do-what-default dg-interpreter-batch-mode dg-linenum-format
global errorCode errorInfo
global tool
global srcdir ;# eg: /calvin/dje/build/gcc/./testsuite/
global host_triplet target_triplet
 
set keep 0
set i 0
set dg-repetitions 1 ;# may be overridden by { dg-repetitions N }
global dg-timeout
set dg-timeout 0 ;# likewise by { dg-timeout N }
 
if { [string index [lindex $args 0] 0] == "-" } {
for { set i 0 } { $i < [llength $args] } { incr i } {
if { [lindex $args $i] == "--" } {
incr i
break
} elseif { [lindex $args $i] == "-keep-output" } {
set keep 1
} elseif { [string index [lindex $args $i] 0] == "-" } {
clone_output "ERROR: dg-test: illegal argument: [lindex $args $i]"
return
} else {
break
}
}
}
 
if { $i + 3 != [llength $args] } {
clone_output "ERROR: dg-test: missing arguments in call"
return
}
set prog [lindex $args $i]
set tool_flags [lindex $args [expr $i + 1]]
set default_extra_tool_flags [lindex $args [expr $i + 2]]
 
set text "\[- A-Za-z0-9\.\;\"\_\:\'\`\(\)\!\#\=\+\?\&\*]*"
 
set name [dg-trim-dirname $srcdir $prog]
# If we couldn't rip $srcdir out of `prog' then just do the best we can.
# The point is to reduce the unnecessary noise in the logs. Don't strip
# out too much because different testcases with the same name can confuse
# `test-tool'.
if [string match "/*" $name] {
set name "[file tail [file dirname $prog]]/[file tail $prog]"
}
 
if {$tool_flags != ""} {
append name " ($tool_flags)"
}
 
# Process any embedded dg options in the testcase.
 
# Use "" for the second element of dg-do-what so we can tell if it's been
# explicitly set to "S".
set dg-do-what [list ${dg-do-what-default} "" P]
set dg-excess-errors-flag 0
set dg-messages ""
set dg-extra-tool-flags $default_extra_tool_flags
set dg-final-code ""
 
# `dg-output-text' is a list of two elements: pass/fail and text.
# Leave second element off for now (indicates "don't perform test")
set dg-output-text "P"
 
# Define our own "special function" `unknown' so we catch spelling errors.
# But first rename the existing one so we can restore it afterwards.
catch {rename dg-save-unknown ""}
rename unknown dg-save-unknown
proc unknown { args } {
return -code error "unknown dg option: $args"
}
 
set tmp [dg-get-options $prog]
foreach op $tmp {
verbose "Processing option: $op" 3
set status [catch "$op" errmsg]
if { $status != 0 } {
if { 0 && [info exists errorInfo] } {
# This also prints a backtrace which will just confuse
# testcase writers, so it's disabled.
perror "$name: $errorInfo\n"
} else {
perror "$name: $errmsg for \"$op\"\n"
}
# ??? The call to unresolved here is necessary to clear `errcnt'.
# What we really need is a proc like perror that doesn't set errcnt.
# It should also set exit_status to 1.
unresolved "$name: $errmsg for \"$op\""
return
}
}
 
# Restore normal error handling.
rename unknown ""
rename dg-save-unknown unknown
 
# If we're not supposed to try this test on this target, we're done.
if { [lindex ${dg-do-what} 1] == "N" } {
unsupported "$name"
verbose "$name not supported on this target, skipping it" 3
return
}
 
# Run the tool and analyze the results.
# The result of ${tool}-dg-test is in a bit of flux.
# Currently it is the name of the output file (or "" if none).
# If we need more than this it will grow into a list of things.
# No intention is made (at this point) to preserve upward compatibility
# (though at some point we'll have to).
 
set results [${tool}-dg-test $prog [lindex ${dg-do-what} 0] "$tool_flags ${dg-extra-tool-flags}"];
 
set comp_output [lindex $results 0];
set output_file [lindex $results 1];
 
#send_user "\nold_dejagnu.exp: comp_output1 = :$comp_output:\n\n"
#send_user "\nold_dejagnu.exp: message = :$message:\n\n"
#send_user "\nold_dejagnu.exp: message length = [llength $message]\n\n"
 
foreach i ${dg-messages} {
verbose "Scanning for message: $i" 4
 
# Remove all error messages for the line [lindex $i 0]
# in the source file. If we find any, success!
set line [lindex $i 0]
set pattern [lindex $i 2]
set comment [lindex $i 3]
#send_user "Before:\n$comp_output\n"
if [regsub -all "(^|\n)(\[^\n\]+$line\[^\n\]*($pattern)\[^\n\]*\n?)+" $comp_output "\n" comp_output] {
set comp_output [string trimleft $comp_output]
set ok pass
set uhoh fail
} else {
set ok fail
set uhoh pass
}
#send_user "After:\n$comp_output\n"
 
# $line will either be a formatted line number or a number all by
# itself. Delete the formatting.
scan $line ${dg-linenum-format} line
switch [lindex $i 1] {
"ERROR" {
$ok "$name $comment (test for errors, line $line)"
}
"XERROR" {
x$ok "$name $comment (test for errors, line $line)"
}
"WARNING" {
$ok "$name $comment (test for warnings, line $line)"
}
"XWARNING" {
x$ok "$name $comment (test for warnings, line $line)"
}
"BOGUS" {
$uhoh "$name $comment (test for bogus messages, line $line)"
}
"XBOGUS" {
x$uhoh "$name $comment (test for bogus messages, line $line)"
}
"BUILD" {
$uhoh "$name $comment (test for build failure, line $line)"
}
"XBUILD" {
x$uhoh "$name $comment (test for build failure, line $line)"
}
"EXEC" { }
"XEXEC" { }
}
#send_user "\nold_dejagnu.exp: comp_output2= :$comp_output:\n\n"
}
#send_user "\nold_dejagnu.exp: comp_output3 = :$comp_output:\n\n"
 
# Remove messages from the tool that we can ignore.
#send_user "comp_output: $comp_output\n"
set comp_output [prune_warnings $comp_output]
 
if { [info proc ${tool}-dg-prune] != "" } {
set comp_output [${tool}-dg-prune $target_triplet $comp_output]
switch -glob $comp_output {
"::untested::*" {
regsub "::untested::" $comp_output "" message
untested "$name: $message"
return
}
"::unresolved::*" {
regsub "::unresolved::" $comp_output "" message
unresolved "$name: $message"
return
}
"::unsupported::*" {
regsub "::unsupported::" $comp_output "" message
unsupported "$name: $message"
return
}
}
}
 
# See if someone forgot to delete the extra lines.
regsub -all "\n+" $comp_output "\n" comp_output
regsub "^\n+" $comp_output "" comp_output
#send_user "comp_output: $comp_output\n"
 
# Don't do this if we're testing an interpreter.
# FIXME: why?
if { ${dg-interpreter-batch-mode} == 0 } {
# Catch excess errors (new bugs or incomplete testcases).
if ${dg-excess-errors-flag} {
setup_xfail "*-*-*"
}
if ![string match "" $comp_output] {
fail "$name (test for excess errors)"
send_log "Excess errors:\n$comp_output\n"
} else {
pass "$name (test for excess errors)"
}
}
 
# Run the executable image if asked to do so.
# FIXME: This is the only place where we assume a standard meaning to
# the `keyword' argument of dg-do. This could be cleaned up.
if { [lindex ${dg-do-what} 0] == "run" } {
if ![file exists $output_file] {
warning "$name compilation failed to produce executable"
} else {
set testname $name
for {set rep 0} {$rep < ${dg-repetitions}} {incr rep} {
# include repetition number in test name
if {$rep > 0} { set name "$testname (rerun $rep)" }
 
set status -1
set result [${tool}_load $output_file]
set status [lindex $result 0];
set output [lindex $result 1];
#send_user "After exec, status: $status\n"
 
if { "$status" == "pass" } {
verbose "Exec succeeded." 3
} elseif { "$status" == "fail" } {
# It would be nice to get some info out of errorCode.
if [info exists errorCode] {
verbose "Exec failed, errorCode: $errorCode" 3
} else {
verbose "Exec failed, errorCode not defined!" 3
}
}
if { [lindex ${dg-do-what} 2] == "F" } {
# Instead of modelling this as an xfail (via setup_xfail),
# treat an expected crash as a success.
if { $status == "pass" } then { set status fail } else { set status pass }
set testtype "crash"
} else { set testtype "execution" }
$status "$name $testtype test"
if { [llength ${dg-output-text}] > 1 } {
#send_user "${dg-output-text}\n"
if { [lindex ${dg-output-text} 0] == "F" } {
setup_xfail "*-*-*"
}
set texttmp [lindex ${dg-output-text} 1]
if { ![regexp $texttmp ${output}] } {
fail "$name output pattern test"
} else {
pass "$name output pattern test"
}
verbose -log "Output pattern $texttmp"
unset texttmp
}
}
}
}
 
# Are there any further tests to perform?
# Note that if the program has special run-time requirements, running
# of the program can be delayed until here. Ditto for other situations.
# It would be a bit cumbersome though.
 
if ![string match ${dg-final-code} ""] {
regsub -all "\\\\(\[{}\])" ${dg-final-code} "\\1" dg-final-code
# Note that the use of `args' here makes this a varargs proc.
proc dg-final-proc { args } ${dg-final-code}
verbose "Running dg-final tests." 3
verbose "dg-final-proc:\n[info body dg-final-proc]" 4
if [catch "dg-final-proc $prog" errmsg] {
perror "$name: error executing dg-final: $errmsg"
# ??? The call to unresolved here is necessary to clear `errcnt'.
# What we really need is a proc like perror that doesn't set errcnt.
# It should also set exit_status to 1.
unresolved "$name: error executing dg-final: $errmsg"
}
}
 
# Do some final clean up.
# When testing an interpreter, we don't compile something and leave an
# output file.
if { ! ${keep} && ${dg-interpreter-batch-mode} == 0 } {
catch "exec rm -f $output_file"
}
}
 
 
 
#
# Indicate that this test case is to be rerun several times. This
# is useful if it is nondeterministic. This applies to rerunning the
# test program only, not rebuilding it.
# The embedded format is "{ dg-repetitions N }", where N is the number
# of repetitions. It better be greater than zero.
#
proc dg-repetitions { line value } {
upvar dg-repetitions repetitions
set repetitions $value
}
 
 
#
# Indicate that this test case is to be run with a short timeout.
# The embedded format is "{ dg-timeout N }", where N is in seconds.
#
proc dg-timeout { line value } {
global dg-timeout
set dg-timeout $value
}
 
 
# dejagnu's config/unix.exp hard-codes 300 seconds as the timeout
# for any natively run executable. That's too long for tests run
# multiple times and that may possibly hang. So we override it here
# to provide some degree of control.
rename standard_wait hooked_standard_wait
proc standard_wait { dest timeout } {
global dg-timeout
if {[info exists dg-timeout]} {
if {${dg-timeout} > 0} {
verbose -log "Overriding timeout = ${dg-timeout}"
set timeout ${dg-timeout}
}
}
 
hooked_standard_wait $dest $timeout
}
/lib/libmudflap.exp
0,0 → 1,287
# Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 
# Define libmudflap callbacks for dg.exp.
# This file is a copy of libstdc++-v3's dejagnu driver, with minor changes.
 
# Useful hook: if ${hostname}_init exists, it will be called, almost
# the last thing before testing begins. This can be defined in, e.g.,
# ~/.dejagnurc or $DEJAGNU.
 
proc load_gcc_lib { filename } {
global srcdir
load_file $srcdir/../../gcc/testsuite/lib/$filename
}
 
load_lib mfdg.exp
load_lib libgloss.exp
load_gcc_lib target-libpath.exp
 
proc libmudflap-init { language } {
global env
global srcdir outdir blddir objdir tool_root_dir
global cxx cxxflags
global includes
global libs
global gluefile wrap_flags
global ld_library_path
 
switch $language {
"c" { set cxx [find_gcc] }
"c++" { set cxx [find_g++] }
default { error "bad language code $language"; return }
}
 
verbose -log "libmudflap-init $cxx"
 
set blddir [lookfor_file [get_multilibs] libmudflap]
set cxxblddir [lookfor_file [get_multilibs] libstdc++-v3]
set cxxflags_file "${cxxblddir}/scripts/testsuite_flags"
 
# By default, we assume we want to run program images.
global dg-do-what-default
set dg-do-what-default run
 
# set LD_LIBRARY_PATH so that libgcc_s, libstdc++ binaries can be found.
# locate libgcc.a so we don't need to account for different values of
# SHLIB_EXT on different platforms
set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
if {$gccdir != ""} {
set gccdir [file dirname $gccdir]
}
 
set ld_library_path "."
append ld_library_path ":${gccdir}"
append ld_library_path ":${cxxblddir}/src/.libs"
if {[is_remote host] == 0} {
foreach i "[exec ${gccdir}/xgcc --print-multi-lib]" {
set mldir ""
regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
set mldir [string trimright $mldir "\;@"]
if { "$mldir" == "." } {
continue
}
if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
append ld_library_path ":${gccdir}/${mldir}"
}
}
}
append ld_library_path ":${blddir}/.libs"
 
set libs "-L${blddir}/.libs"
set cxxflags "-ggdb3 -DDEBUG_ASSERT"
set includes "-I${srcdir} -I${srcdir}/.. -I.."
 
if {$language == "c++"} {
if {[file exists $cxxflags_file]} then {
set includes "${includes} [exec sh $cxxflags_file --build-includes]"
set cxxflags "${cxxflags} [exec sh $cxxflags_file --cxxflags]"
# c++ libs are included by --build-cxx below
set cxx "[exec sh $cxxflags_file --build-cxx]"
} else {
lappend libs "-L${cxxblddir}src/.libs"
lappend includes "-I../../libstdc++-v3/include"
}
}
 
global mfconfig_libs
global add_flags
append add_flags " $mfconfig_libs"
 
set_ld_library_path_env_vars
if [info exists env(LD_LIBRARY_PATH)] {
verbose -log "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)"
}
 
if { [target_info needs_status_wrapper]!=""} {
file delete ${objdir}/testglue.o;
set gluefile ${objdir}/testglue.o;
set result [build_wrapper $gluefile];
if { $result != "" } {
set gluefile [lindex $result 0];
set wrap_flags [lindex $result 1];
} else {
unset gluefile
}
}
 
# If there is no static library then don't run tests with -static.
global tool
set opts "additional_flags=-static"
lappend opts "additional_flags=-fmudflap"
lappend opts "additional_flags=-lmudflap"
set src stlm[pid].c
set exe stlm[pid].x
 
set f [open $src "w"]
puts $f "int main () { }"
close $f
set lines [${tool}_target_compile $src $exe executable "$opts"]
file delete $src
remote_file build delete $exe
 
if { ![string match "" $lines] } {
# Compilation failed; assume static library is not available.
global MUDFLAP_FLAGS
set i [lsearch $MUDFLAP_FLAGS "*static*"]
set MUDFLAP_FLAGS [lreplace $MUDFLAP_FLAGS $i $i]
}
}
 
proc libmudflap-dg-test { prog do_what extra_tool_flags } {
# Set up the compiler flags, based on what we're going to do.
 
switch $do_what {
"preprocess" {
set compile_type "preprocess"
set output_file "[file rootname [file tail $prog]].i"
}
"compile" {
set compile_type "assembly"
set output_file "[file rootname [file tail $prog]].s"
}
"assemble" {
set compile_type "object"
set output_file "[file rootname [file tail $prog]].o"
}
"link" {
set compile_type "executable"
set output_file "./[file rootname [file tail $prog]].exe"
}
"run" {
set compile_type "executable"
# FIXME: "./" is to cope with "." not being in $PATH.
# Should this be handled elsewhere?
# YES.
set output_file "./[file rootname [file tail $prog]].exe"
# This is the only place where we care if an executable was
# created or not. If it was, dg.exp will try to run it.
remote_file build delete $output_file;
}
default {
perror "$do_what: not a valid dg-do keyword"
return ""
}
}
set options ""
if { $extra_tool_flags != "" } {
lappend options "additional_flags=$extra_tool_flags"
}
 
global mfconfig_libs
lappend options "libs=$mfconfig_libs"
 
set comp_output [libmudflap_target_compile "$prog" "$output_file" "$compile_type" $options];
set comp_output [prune_gcc_output $comp_output ];
 
return [list $comp_output $output_file]
}
 
 
proc libmudflap_target_compile { source dest type options } {
global gluefile
global wrap_flags
global cxx
global cxxflags
global includes
global libs
global blddir
 
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"
lappend options "ldflags=${wrap_flags}"
}
 
set cxx_final $cxx
set cxxlibglossflags [libgloss_link_flags]
set cxx_final [concat $cxx_final $cxxlibglossflags]
set cxx_final [concat $cxx_final $cxxflags]
set cxx_final [concat $cxx_final $includes]
set cxx_final [concat $cxx_final $libs]
 
lappend options "compiler=$cxx_final"
 
# Picks up the freshly-built testsuite library corresponding to the
# multilib under test.
lappend options "ldflags=-L${blddir}/testsuite"
 
return [target_compile $source $dest $type $options]
}
 
 
# A bit sloppy... Returns a list of source files (full pathnames) to
# compile. We mimic the mkcheck script in that the first time this is run,
# all existing files are listed in "testsuite_files" in the output
# directory. Subsequent runs pull the list from that file, allowing users
# to trim the list down to problematic tests.
### This is supposed to be done via RUNTESTFLAGS, but that doesn't work.
proc libmudflap-list-sourcefiles { } {
global srcdir
global outdir
 
set files_file "${outdir}/testsuite_files"
set sfiles ""
if { [file exists $files_file] } {
set f [open $files_file]
while { ! [eof $f] } {
set t [gets $f]
if { [string length "$t"] != 0 } {
lappend sfiles ${srcdir}/${t}
}
}
} else {
set f [open $files_file "w"]
set where_we_were [pwd]
cd $srcdir
foreach s [lsort [glob -nocomplain "*/*.cc" "*/*/*.cc" "{,*/}*/*/*/*.cc" ]] {
lappend sfiles ${srcdir}/${s}
puts $f $s
}
cd $where_we_were
}
close $f
 
# Disable wchar_t tests if library not configured to support
# wchar_t testing.
set wchar_file "${outdir}/testsuite_wchar_t"
if { [file exists $wchar_file] } {
return $sfiles
} else {
# Remove wchar_t tests files from list.
set res {}
foreach w $sfiles {
if [regexp "wchar_t" $w] {
verbose -log "element out list is $w"
} else {
verbose -log "element in list is $w"
lappend res $w
}
}
return $res
}
}
 
 
proc prune_gcc_output { text } {
regsub -all {(^|\n)[^\n]*ld: warning: libgcc_s[^\n]*not found[^\n]*try using[^\n]*} $text "" text
regsub -all {(^|\n)[^\n]*In function.*pthread_create[^\n]*} $text "" text
regsub -all {(^|\n)[^\n]*the use of .pthread.*is deprecated[^\n]*} $text "" text
regsub -all {(^|\n)[^\n]*Dwarf Error:.*FORM value: 14[^\n]*} $text "" text
regsub -all {(^|\n)[^\n]*In function[^\n]*} $text "" text
regsub -all {(^|\n)[^\n]*Using.*in statically linked applications requires[^\n]*} $text "" text
 
return $text
}
/libmudflap.c++/fail24-frag.cxx
0,0 → 1,16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char zoo [10];
 
int main ()
{
int i = strlen ("twelve") + strlen ("zero") + strlen ("seventeen");
zoo[i] = 'a';
return 0;
}
/* { dg-output "mudflap violation 1.*" } */
/* { dg-output "Nearby object.*" } */
/* { dg-output "mudflap object.*zoo.*static.*" } */
/* { dg-do run { xfail *-*-* } } */
/libmudflap.c++/pass57-frag.cxx
0,0 → 1,25
#include <vector>
#include <string>
 
class fitscolumn
{
private:
std::string name_, unit_;
int i, t;
public:
fitscolumn (const std::string &nm, const std::string &un,int i1,int t1)
: name_(nm), unit_(un), i(i1), t(t1){}
};
 
void init_bintab(std::vector<fitscolumn> & columns_)
{
char ttype[81], tunit[81], tform[81];
long repc;
int typecode;
columns_.push_back (fitscolumn (ttype,tunit,1,typecode));
}
 
int main ()
{
return 0;
}
/libmudflap.c++/pass58-frag.cxx
0,0 → 1,12
// PR 19319
struct k {
int data;
k(int j): data(j) {}
};
k make_k () { return k(1); }
 
int main ()
{
k foo = make_k ();
return 0;
}
/libmudflap.c++/ctors.exp
0,0 → 1,48
global MUDFLAP_FLAGS
set MUDFLAP_FLAGS [list {} {-static} {-O2} {-O3}]
 
libmudflap-init c++
if {$cxx == "g++"} then {
unsupported "g++ not found"
return
}
 
dg-init
 
global srcdir subdir
 
foreach flags $MUDFLAP_FLAGS {
set l1 [libmudflap_target_compile "$srcdir/$subdir/ctors-1.cxx" "ctors-1.o" object {additional_flags=-fmudflap}]
set test "ctors-1 compilation ${flags}"
if [string match "*mudflap cannot track unknown size extern *k*" $l1] { pass $test } { fail $test }
 
set l2 [libmudflap_target_compile "$srcdir/$subdir/ctors-2.cxx" "ctors-2.o" object {additional_flags=-fmudflap}]
set test "ctors-2 compilation ${flags}"
if [string match "" $l2] { pass $test } { fail $test }
 
set l3 [libmudflap_target_compile "ctors-1.o ctors-2.o" "ctors-12.exe" executable {additional_flags=-fmudflap additional_flags=-lmudflap additional_flags=-lstdc++}]
set test "ctors-12 linkage ${flags}"
if [string match "" $l3] { pass $test } { fail $test }
 
set l4 [libmudflap_target_compile "ctors-2.o ctors-1.o" "ctors-21.exe" executable {additional_flags=-fmudflap additional_flags=-lmudflap additional_flags=-lstdc++}]
set test "ctors-21 linkage ${flags}"
if [string match "" $l3] { pass $test } { fail $test }
 
setenv MUDFLAP_OPTIONS "-viol-segv"
 
remote_spawn host "./ctors-12.exe"
set l5 [remote_wait host 10]
set test "ctors-12 execution ${flags}"
if {[lindex $l5 0] == 0} { pass $test } { fail $test }
 
remote_spawn host "./ctors-21.exe"
set l6 [remote_wait host 10]
set test "ctors-21 execution ${flags}"
if {[lindex $l6 0] == 0} { pass $test } { fail $test }
 
foreach f [glob -nocomplain "ctors-*"] {
remote_file build delete $f
}
}
 
dg-finish
/libmudflap.c++/c++frags.exp
0,0 → 1,22
global MUDFLAP_FLAGS
set MUDFLAP_FLAGS [list {} {-static} { -O} {-O2} {-O3}]
 
libmudflap-init c++
if {$cxx == "g++"} then {
unsupported "g++ not found"
return
}
 
dg-init
 
global srcdir
 
foreach flags $MUDFLAP_FLAGS {
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libmudflap.c++/*frag.cxx]] {
set bsrc [file tail $srcfile]
setenv MUDFLAP_OPTIONS "-viol-segv"
dg-runtest $srcfile $flags "-fmudflap -lmudflap"
}
}
 
dg-finish
/libmudflap.c++/error1-frag.cxx
0,0 → 1,5
// PR 26789
// { dg-do compile }
 
struct A;
A a; // { dg-error "incomplete" }
/libmudflap.c++/pass31-frag.cxx
0,0 → 1,12
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char zoo [10];
 
int main ()
{
int i = strlen ("eight") + strlen ("one");
zoo[i] = 'a';
return 0;
}
/libmudflap.c++/ctors-1.cxx
0,0 → 1,20
#include <iostream>
 
 
extern char k [];
 
class foo
{
public:
foo (char *m) { m [40] = 20; }
};
 
 
foo f1 (k);
foo f2 (k);
foo f3 (k);
 
int main ()
{
return 0;
}
/libmudflap.c++/error2-frag.cxx
0,0 → 1,10
// PR 26790
// { dg-do compile }
 
struct A;
 
A foo() // { dg-error "incomplete" }
{
A a; // { dg-error "incomplete" }
return a;
}
/libmudflap.c++/pass41-frag.cxx
0,0 → 1,10
#include <string>
#include <iostream>
 
int
main (int argc, char *argv[])
{
std::string myStr = "Hello, World!";
std::cout << myStr << std::endl;
return 0;
}
/libmudflap.c++/ctors-2.cxx
0,0 → 1,10
char k [500];
/libmudflap.c++/pass27-frag.cxx
0,0 → 1,12
class foo {
char z [10];
public:
char *get_z () { return & this->z[0]; }
};
 
int main ()
{
foo x;
x.get_z()[9] = 'a';
return 0;
}
/libmudflap.c++/pass28-frag.cxx
0,0 → 1,20
class foo {
char z [10];
public:
virtual char *get_z () { return & this->z[0]; }
};
 
class bar: public foo {
char q [20];
public:
char *get_z () { return & this->q[0]; }
};
 
int main () {
foo *x = new bar ();
 
x->get_z()[9] = 'a';
 
delete x;
return 0;
}
/libmudflap.c++/pass55-frag.cxx
0,0 → 1,7
#include <vector>
 
int main() {
std::vector<int> v;
v.push_back(1);
return 0;
}
/mfconfig.exp.in
0,0 → 1,4
global mfconfig_libs
set mfconfig_libs "@LIBS@"
global libmudflapth
set libmudflapth "@build_libmudflapth@"
/Makefile.am
0,0 → 1,11
## Process this with automake to create Makefile.in
 
AUTOMAKE_OPTIONS = foreign dejagnu
 
EXPECT = `if [ -f ../../expect/expect ] ; then \
echo ../../expect/expect ; \
else echo expect ; fi`
 
RUNTEST = `if [ -f ${srcdir}/../../dejagnu/runtest ] ; then \
echo ${srcdir}/../../dejagnu/runtest ; \
else echo runtest ; fi`
/libmudflap.cth/pass39-frag.c
0,0 → 1,57
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <sched.h>
#include <assert.h>
 
static void *
func (void *p)
{
int *counter = (int *) p;
unsigned i;
enum { numarrays = 100, numels = 17 };
char *arrays [numarrays];
 
for (i=0; i<numarrays; i++)
{
(*counter) ++;
unsigned x = i % numels;
arrays[i] = calloc (numels, sizeof(arrays[i][0]));
assert (arrays[i] != NULL);
arrays[i][x] = i;
free (arrays[i]);
sched_yield (); /* sleep (1); */
}
 
return (NULL);
}
 
 
int main ()
{
int rc;
unsigned i;
enum foo { NT=10 };
pthread_t threads[NT];
int counts[NT];
 
 
for (i=0; i<NT; i++)
{
counts[i] = 0;
rc = pthread_create (& threads[i], NULL, func, (void *) & counts[i]);
if (rc) abort();
}
 
for (i=0; i<NT; i++)
{
rc = pthread_join (threads[i], NULL);
if (rc) abort();
printf ("%d%s", counts[i], (i==NT-1) ? "\n" : " ");
}
 
return 0;
}
/* { dg-output "100 100 100 100 100 100 100 100 100 100" } */
/* { dg-repetitions 20 } */
/* { dg-timeout 10 } */
/libmudflap.cth/pass40-frag.c
0,0 → 1,59
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
 
static void *
func (void *p)
{
return (NULL);
}
 
static void
test (void)
{
int rc;
pthread_attr_t my_pthread_attr;
pthread_t h;
long i;
 
rc = pthread_attr_init (&my_pthread_attr);
 
for (i = 1; i <= 10000; ++i) {
if (i%100 == 0) fprintf (stderr, "%i ", i);
if (i%1000 == 0) fprintf (stderr, "\n");
#ifndef STATIC
/* Some glibc versions don't like static multithreaded programs doing this. */
if (i==5000) __mf_set_options ("-thread-stack=192");
#endif
rc = pthread_create (&h, &my_pthread_attr,
func, NULL);
if (rc)
break;
 
rc = pthread_join (h, NULL);
if (rc)
break;
}
rc = pthread_attr_destroy (&my_pthread_attr);
}
int main ()
{
test ();
return (0);
}
 
/* { dg-timeout 20 } */
/* { dg-output "100 200 300 400 500 600 700 800 900 1000 \n" } */
/* { dg-output "1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 \n" } */
/* { dg-output "2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 \n" } */
/* { dg-output "3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 \n" } */
/* { dg-output "4100 4200 4300 4400 4500 4600 4700 4800 4900 5000 \n" } */
/* { dg-output "5100 5200 5300 5400 5500 5600 5700 5800 5900 6000 \n" } */
/* { dg-output "6100 6200 6300 6400 6500 6600 6700 6800 6900 7000 \n" } */
/* { dg-output "7100 7200 7300 7400 7500 7600 7700 7800 7900 8000 \n" } */
/* { dg-output "8100 8200 8300 8400 8500 8600 8700 8800 8900 9000 \n" } */
/* { dg-output "9100 9200 9300 9400 9500 9600 9700 9800 9900 10000 \n" } */
 
/libmudflap.cth/cthfrags.exp
0,0 → 1,25
global MUDFLAP_FLAGS
set MUDFLAP_FLAGS [list {} {-static -DSTATIC} {-O2} {-O3}]
 
libmudflap-init c
 
dg-init
 
global srcdir
foreach flags $MUDFLAP_FLAGS {
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libmudflap.cth/*.c]] {
set bsrc [file tail $srcfile]
setenv MUDFLAP_OPTIONS "-viol-segv"
if {$libmudflapth} then {
# --noinhibit-exec works around a ld problem that causes
# "Dwarf Error: Invalid or unhandled FORM value: 14"
# to fail builds unnecessarily.
dg-runtest $srcfile $flags "-fmudflapth -lmudflapth -lpthread -Wl,--noinhibit-exec"
} else {
if {$flags != ""} {set f " ($flags)"} {set f ""}
untested "libmudflap.cth/$bsrc$f"
}
}
}
 
dg-finish
/libmudflap.cth/pass37-frag.c
0,0 → 1,58
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <sched.h>
 
static void *
func (void *p)
{
int *counter = (int *) p;
unsigned i;
for (i=0; i<100; i++)
{
(*counter) ++;
{
int array[17];
unsigned x = i % (sizeof(array)/sizeof(array[0]));
/* VRP could prove that x is within [0,16], but until then, the
following access will ensure that array[] is registered to
libmudflap. */
array[x] = i;
}
sched_yield (); /* sleep (1); */
}
 
return (NULL);
}
 
 
int main ()
{
int rc;
unsigned i;
enum foo { NT=10 };
pthread_t threads[NT];
int counts[NT];
 
 
for (i=0; i<NT; i++)
{
counts[i] = 0;
rc = pthread_create (& threads[i], NULL, func, (void *) & counts[i]);
if (rc) abort();
}
 
for (i=0; i<NT; i++)
{
rc = pthread_join (threads[i], NULL);
if (rc) abort();
printf ("%d%s", counts[i], (i==NT-1) ? "\n" : " ");
}
 
return 0;
}
 
/* { dg-output "100 100 100 100 100 100 100 100 100 100" } */
/* { dg-repetitions 20 } */
/* { dg-timeout 10 } */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.