68 lines
1.1 KiB
C
68 lines
1.1 KiB
C
/* PR middle-end/19551 */
|
|
/* { dg-options "-O2" } */
|
|
/* { dg-do link } */
|
|
|
|
extern void abort ();
|
|
|
|
#define T(type, name) \
|
|
extern __attribute__((pure)) _Complex type \
|
|
foo_c##name (int x); \
|
|
\
|
|
void \
|
|
bar_c##name (type *x) \
|
|
{ \
|
|
type f = __real foo_c##name (5); \
|
|
if (0) *x = f; \
|
|
} \
|
|
\
|
|
void \
|
|
baz_c##name (type *x) \
|
|
{ \
|
|
type f = __imag foo_c##name (5); \
|
|
if (0) *x = f; \
|
|
} \
|
|
\
|
|
extern __attribute__((pure)) type \
|
|
foo_##name (int x); \
|
|
\
|
|
void \
|
|
bar_##name (type *x) \
|
|
{ \
|
|
type f = foo_##name (5); \
|
|
if (0) *x = f; \
|
|
}
|
|
|
|
typedef long double ldouble_t;
|
|
typedef long long llong;
|
|
|
|
T (float, float)
|
|
T (double, double)
|
|
T (long double, ldouble_t)
|
|
T (char, char)
|
|
T (short, short)
|
|
T (int, int)
|
|
T (long, long)
|
|
T (long long, llong)
|
|
#undef T
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
#define T(type, name) \
|
|
{ \
|
|
type var = 0; \
|
|
bar_c##name (&var); \
|
|
baz_c##name (&var); \
|
|
bar_##name (&var); \
|
|
}
|
|
T (float, float)
|
|
T (double, double)
|
|
T (long double, ldouble_t)
|
|
T (char, char)
|
|
T (short, short)
|
|
T (int, int)
|
|
T (long, long)
|
|
T (long long, llong)
|
|
return 0;
|
|
}
|