blob: 4395378e17ddfe97b9aa3f190338cbb028bb731a [file] [log] [blame]
/* { dg-do compile } */
/* { dg-skip-if "not an SPE target" { ! powerpc_spe_nocache } } */
/* { dg-options "-mdejagnu-cpu=8548 -mno-spe -mfloat-gprs=double -Os -fdata-sections -fpic -mrelocatable" } */
#define NULL 0
int func (int val);
void *func2 (void *ptr);
static const char *ifs;
static char map[256];
typedef struct {
/* None of these fields are used, but removing any
of them makes the problem go away. */
char *data;
int length;
int maxlen;
int quote;
} o_string;
#define NULL_O_STRING {NULL,0,0,0}
static int parse_stream (void *dest, void *ctx)
{
int ch = func (0), m;
while (ch != -1) {
m = map[ch];
if (ch != '\n')
func2(dest);
ctx = func2 (ctx);
if (!func (0))
return 0;
if (m != ch) {
func2 ("htns");
break;
}
}
return -1;
}
static void mapset (const char *set, int code)
{
const char *s;
for (s=set; *s; s++) map[(int)*s] = code;
}
static void update_ifs_map(void)
{
/* char *ifs and char map[256] are both globals. */
ifs = func2 ("abc");
if (ifs == NULL) ifs="def";
func2 (map);
{
char subst[2] = {4, 0};
mapset (subst, 3);
}
mapset (";&|#", 1);
}
int parse_stream_outer (int flag)
{
int blah;
o_string temp=NULL_O_STRING;
int rcode;
do {
update_ifs_map ();
func2 (&blah); /* a memory clobber works as well. */
rcode = parse_stream (&temp, NULL);
func2 ("aoeu");
if (func (0) != 0) {
func2 (NULL);
}
} while (rcode != -1);
return 0;
}
/* { dg-final { if ![file exists pr60158.s] { fail "pr60158.c (compile)"; return; } } } */
/* { dg-final { set c_rel [llength [grep pr60158.s \\.data\\.rel\\.ro\\.local]] } } */
/* { dg-final { set c_fix [llength [grep pr60158.s \\.fixup]] } } */
/* { dg-final { if [string match $c_rel $c_fix] \{ } } */
/* { dg-final { pass "pr60158.c (passed)" } } */
/* { dg-final { \} else \{ } } */
/* { dg-final { fail "pr60158.c (.fixup table entries not generated for .data.rel.ro.local section)" } } */
/* { dg-final { \} } } */