mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-11 19:49:32 +00:00
87 lines
1.2 KiB
C
87 lines
1.2 KiB
C
/* PR c/64868 */
|
|
/* { dg-do run } */
|
|
|
|
float f = 2.0f;
|
|
double d = 4.0;
|
|
long double ld = 8.0L;
|
|
|
|
void
|
|
foo ()
|
|
{
|
|
#pragma omp atomic
|
|
f = 1.0f / f;
|
|
#pragma omp atomic
|
|
f = 1 / f;
|
|
#pragma omp atomic
|
|
f = f / 2.0f;
|
|
#pragma omp atomic
|
|
f = f / 2;
|
|
#pragma omp atomic
|
|
f /= 2.0f;
|
|
#pragma omp atomic
|
|
f /= 2;
|
|
#pragma omp atomic
|
|
d = 1.0 / d;
|
|
#pragma omp atomic
|
|
d = 1 / d;
|
|
#pragma omp atomic
|
|
d = d / 2.0;
|
|
#pragma omp atomic
|
|
d = d / 2;
|
|
#pragma omp atomic
|
|
d /= 2.0;
|
|
#pragma omp atomic
|
|
d /= 2;
|
|
#pragma omp atomic
|
|
ld = 1.0L / ld;
|
|
#pragma omp atomic
|
|
ld = 1 / ld;
|
|
#pragma omp atomic
|
|
ld = ld / 2.0L;
|
|
#pragma omp atomic
|
|
ld = ld / 2;
|
|
#pragma omp atomic
|
|
ld /= 2.0L;
|
|
#pragma omp atomic
|
|
ld /= 2;
|
|
if (f != 0.125f || d != 0.25 || ld != 0.5L)
|
|
__builtin_abort ();
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
template <typename T, int N1, int N2>
|
|
void
|
|
bar ()
|
|
{
|
|
T v = ::d;
|
|
#pragma omp atomic
|
|
v *= 16;
|
|
#pragma omp atomic
|
|
v = 1.0 / v;
|
|
#pragma omp atomic
|
|
v = N1 / v;
|
|
#pragma omp atomic
|
|
v = v / 2.0;
|
|
#pragma omp atomic
|
|
v = v / N2;
|
|
#pragma omp atomic
|
|
v /= 2.0;
|
|
#pragma omp atomic
|
|
v /= N2;
|
|
if (v != 0.25)
|
|
__builtin_abort ();
|
|
}
|
|
#endif
|
|
|
|
int
|
|
main ()
|
|
{
|
|
foo ();
|
|
#ifdef __cplusplus
|
|
bar<float, 1, 2> ();
|
|
bar<double, 1, 2> ();
|
|
bar<long double, 1, 2> ();
|
|
#endif
|
|
return 0;
|
|
}
|