re PR rtl-optimization/30807 (postreload bug (might be generic in trunk))
PR target/30807 * gcc.target/sh/torture/pr30807.c: New. From-SVN: r204473
This commit is contained in:
parent
71b71b96f0
commit
73afb55da8
2 changed files with 223 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2013-11-06 Oleg Endo <olegendo@gcc.gnu.org>
|
||||
|
||||
PR target/30807
|
||||
* gcc.target/sh/torture/pr30807.c: New.
|
||||
|
||||
2013-11-06 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/11006
|
||||
|
|
218
gcc/testsuite/gcc.target/sh/torture/pr30807.c
Normal file
218
gcc/testsuite/gcc.target/sh/torture/pr30807.c
Normal file
|
@ -0,0 +1,218 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fpic -std=c99" } */
|
||||
/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */
|
||||
|
||||
typedef unsigned int size_t;
|
||||
typedef struct
|
||||
{
|
||||
unsigned long __val[(1024 / (8 * sizeof (unsigned long)))];
|
||||
} __sigset_t;
|
||||
struct __jmp_buf_tag
|
||||
{
|
||||
__sigset_t __saved_mask;
|
||||
};
|
||||
typedef struct __jmp_buf_tag sigjmp_buf[1];
|
||||
struct stat
|
||||
{
|
||||
long long st_dev;
|
||||
unsigned short int __pad1;
|
||||
int tm_isdst;
|
||||
long int tm_gmtoff;
|
||||
char *tm_zone;
|
||||
};
|
||||
|
||||
typedef size_t STRLEN;
|
||||
typedef struct op OP;
|
||||
typedef struct cop COP;
|
||||
typedef struct interpreter PerlInterpreter;
|
||||
typedef struct sv SV;
|
||||
typedef struct av AV;
|
||||
typedef struct cv CV;
|
||||
typedef struct gp GP;
|
||||
typedef struct gv GV;
|
||||
typedef struct xpv XPV;
|
||||
typedef struct xpvio XPVIO;
|
||||
typedef union any ANY;
|
||||
typedef unsigned char U8;
|
||||
typedef long I32;
|
||||
typedef unsigned long U32;
|
||||
typedef U32 line_t;
|
||||
typedef struct _PerlIO PerlIOl;
|
||||
typedef PerlIOl *PerlIO;
|
||||
struct sv
|
||||
{
|
||||
void *sv_any;
|
||||
U32 sv_flags;
|
||||
union
|
||||
{
|
||||
char *svu_pv;
|
||||
} sv_u;
|
||||
};
|
||||
struct gv
|
||||
{
|
||||
U32 sv_flags;
|
||||
union
|
||||
{
|
||||
GP *svu_gp;
|
||||
} sv_u;
|
||||
};
|
||||
struct io
|
||||
{
|
||||
XPVIO *sv_any;
|
||||
};
|
||||
struct xpv
|
||||
{
|
||||
STRLEN xpv_cur;
|
||||
};
|
||||
struct xpvio
|
||||
{
|
||||
PerlIO *xio_ofp;
|
||||
};
|
||||
struct gp
|
||||
{
|
||||
SV *gp_sv;
|
||||
struct io *gp_io;
|
||||
};
|
||||
struct jmpenv
|
||||
{
|
||||
struct jmpenv *je_prev;
|
||||
sigjmp_buf je_buf;
|
||||
int je_ret;
|
||||
};
|
||||
typedef struct jmpenv JMPENV;
|
||||
struct cop
|
||||
{
|
||||
line_t cop_line;
|
||||
struct refcounted_he *cop_hints_hash;
|
||||
};
|
||||
struct interpreter
|
||||
{
|
||||
SV **Istack_sp;
|
||||
OP *Iop;
|
||||
SV **Icurpad;
|
||||
SV **Istack_base;
|
||||
SV **Istack_max;
|
||||
I32 *Iscopestack;
|
||||
I32 Iscopestack_ix;
|
||||
I32 Iscopestack_max;
|
||||
ANY *Isavestack;
|
||||
I32 Isavestack_ix;
|
||||
I32 Isavestack_max;
|
||||
SV **Itmps_stack;
|
||||
I32 Itmps_ix;
|
||||
I32 Itmps_floor;
|
||||
I32 Itmps_max;
|
||||
I32 Imodcount;
|
||||
I32 *Imarkstack;
|
||||
I32 *Imarkstack_ptr;
|
||||
I32 *Imarkstack_max;
|
||||
SV *ISv;
|
||||
XPV *IXpv;
|
||||
STRLEN Ina;
|
||||
struct stat Istatbuf;
|
||||
struct stat Istatcache;
|
||||
OP *Irestartop;
|
||||
COP *volatile Icurcop;
|
||||
JMPENV *Itop_env;
|
||||
U8 Iexit_flags;
|
||||
I32 Istatusvalue;
|
||||
I32 Istatusvalue_posix;
|
||||
GV *Istderrgv;
|
||||
GV *Ierrgv;
|
||||
AV *Ibeginav;
|
||||
AV *Iunitcheckav;
|
||||
COP Icompiling;
|
||||
char Isavebegin;
|
||||
volatile U32 Idebug;
|
||||
AV *Ibeginav_save;
|
||||
AV *Icheckav_save;
|
||||
AV *Iunitcheckav_save;
|
||||
};
|
||||
|
||||
void S_my_exit_jump (PerlInterpreter *my_perl __attribute__((unused)))
|
||||
__attribute__((noreturn));
|
||||
|
||||
int Perl_av_len (PerlInterpreter*, AV*);
|
||||
void Perl_av_create_and_push (PerlInterpreter*, AV**, SV*);
|
||||
int __sigsetjmp (sigjmp_buf env, int savemask);
|
||||
void Perl_sv_2pv_flags (PerlInterpreter*, SV*, STRLEN*, int);
|
||||
void Perl_deb (PerlInterpreter*,
|
||||
const char*, const char*, int, const char*, int);
|
||||
void Perl_croak (PerlInterpreter*, const char*, void*);
|
||||
void foo (void);
|
||||
|
||||
void
|
||||
Perl_call_list (PerlInterpreter *my_perl __attribute__((unused)),
|
||||
I32 oldscope, AV *paramList)
|
||||
{
|
||||
SV *atsv;
|
||||
CV *cv;
|
||||
STRLEN len;
|
||||
int ret;
|
||||
JMPENV cur_env;
|
||||
GV *shplep;
|
||||
volatile line_t oldline;
|
||||
|
||||
oldline = (my_perl->Icurcop) ? my_perl->Icurcop->cop_line : 0;
|
||||
|
||||
while (Perl_av_len (my_perl, paramList) >= 0)
|
||||
{
|
||||
if (my_perl->Isavebegin)
|
||||
{
|
||||
if (paramList == my_perl->Ibeginav)
|
||||
{
|
||||
Perl_av_create_and_push (my_perl, &my_perl->Ibeginav_save,
|
||||
(SV*) cv);
|
||||
Perl_av_create_and_push(my_perl, &my_perl->Icheckav_save,
|
||||
(SV*) cv);
|
||||
}
|
||||
else if (paramList == my_perl->Iunitcheckav)
|
||||
Perl_av_create_and_push(my_perl, &my_perl->Iunitcheckav_save,
|
||||
(SV*) cv);
|
||||
}
|
||||
|
||||
cur_env.je_ret = __sigsetjmp (cur_env.je_buf, 0);
|
||||
|
||||
switch (ret)
|
||||
{
|
||||
case 0:
|
||||
shplep = (GV *) my_perl->Ierrgv;
|
||||
*my_perl->Imarkstack_ptr = my_perl->Istack_sp - my_perl->Istack_base;
|
||||
atsv = shplep->sv_u.svu_gp->gp_sv;
|
||||
if (atsv->sv_flags & 0x00000400 == 0x00000400)
|
||||
len = ((XPV*) ((SV *) atsv)->sv_any)->xpv_cur;
|
||||
else
|
||||
Perl_sv_2pv_flags (my_perl, atsv, &len, 2|32);
|
||||
|
||||
if (len)
|
||||
{
|
||||
my_perl->Icurcop = &my_perl->Icompiling;
|
||||
while (my_perl->Iscopestack_ix > oldscope)
|
||||
{
|
||||
if (my_perl->Idebug & 0x00000004)
|
||||
Perl_deb (my_perl, "scope", "LEAVE",
|
||||
my_perl->Iscopestack_ix, "perl.c", 5166);
|
||||
(my_perl->Itop_env) = cur_env.je_prev;
|
||||
}
|
||||
|
||||
Perl_croak (my_perl, "%""-p""", (void*) atsv);
|
||||
}
|
||||
|
||||
case 1:
|
||||
my_perl->Istatusvalue = 1;
|
||||
my_perl->Istatusvalue_posix = 1;
|
||||
case 2:
|
||||
while (my_perl->Iscopestack_ix > oldscope)
|
||||
if (my_perl->Idebug & 0x00000004)
|
||||
foo ();
|
||||
my_perl->Icurcop = &my_perl->Icompiling;
|
||||
my_perl->Icurcop->cop_line = oldline;
|
||||
if (my_perl->Idebug & 0x00000004)
|
||||
foo ();
|
||||
S_my_exit_jump (my_perl);
|
||||
case 3:
|
||||
if (my_perl->Irestartop)
|
||||
foo ();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue