URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 298 |
Rev 338 |
/* { dg-do run } */
|
/* { dg-do run } */
|
/* { dg-options "-O2" } */
|
/* { dg-options "-O2" } */
|
|
|
extern void abort (void) __attribute__ ((__nothrow__)) __attribute__
|
extern void abort (void) __attribute__ ((__nothrow__)) __attribute__
|
((__noreturn__));
|
((__noreturn__));
|
extern void exit (int __status) __attribute__ ((__nothrow__))
|
extern void exit (int __status) __attribute__ ((__nothrow__))
|
__attribute__ ((__noreturn__));
|
__attribute__ ((__noreturn__));
|
|
|
struct bootLoader {
|
struct bootLoader {
|
int x;
|
int x;
|
};
|
};
|
|
|
void
|
void
|
zap(struct bootLoader *bootLoader)
|
zap(struct bootLoader *bootLoader)
|
{
|
{
|
/* The expression on the RHS of the assignment is *not* a
|
/* The expression on the RHS of the assignment is *not* a
|
dereference of pointer 'bootLoader'. It is merely used as an
|
dereference of pointer 'bootLoader'. It is merely used as an
|
offset calculation. VRP was erroneously removing the if()
|
offset calculation. VRP was erroneously removing the if()
|
because it thought that 'bootLoader' was always dereferenced. */
|
because it thought that 'bootLoader' was always dereferenced. */
|
int *boot = &bootLoader->x;
|
int *boot = &bootLoader->x;
|
|
|
if (bootLoader)
|
if (bootLoader)
|
{
|
{
|
useboot (boot);
|
useboot (boot);
|
}
|
}
|
}
|
}
|
|
|
int
|
int
|
useboot (void *boot)
|
useboot (void *boot)
|
{
|
{
|
abort ();
|
abort ();
|
}
|
}
|
|
|
main()
|
main()
|
{
|
{
|
zap (0);
|
zap (0);
|
return 0;
|
return 0;
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.