1 // RUN: %clang_cc1 -triple x86_64-pc-linux -ast-print %s -o - | FileCheck %s
3 float func_1(float x
, float y
) {
4 #pragma STDC FENV_ACCESS ON
11 // CHECK-LABEL: float func_1(float x, float y) {
12 // CHECK-NEXT: #pragma STDC FENV_ACCESS ON
13 // CHECK-NEXT: if (x != 0) {
14 // CHECK-NEXT: return y;
16 // CHECK-NEXT: return x + y;
19 float func_2(float x
, float y
) {
20 #pragma STDC FENV_ACCESS ON
22 #pragma STDC FENV_ACCESS OFF
28 // CHECK-LABEL: float func_2(float x, float y) {
29 // CHECK-NEXT: #pragma STDC FENV_ACCESS ON
30 // CHECK-NEXT: if (x != 0) {
31 // CHECK-NEXT: #pragma STDC FENV_ACCESS OFF
32 // CHECK-NEXT: return y;
34 // CHECK-NEXT: return x + y;
37 float func_3(float x
, float y
) {
38 #pragma STDC FENV_ROUND FE_DOWNWARD
42 // CHECK-LABEL: float func_3(float x, float y) {
43 // CHECK-NEXT: #pragma STDC FENV_ROUND FE_DOWNWARD
44 // CHECK-NEXT: return x + y;
47 float func_4(float x
, float y
, float z
) {
48 #pragma STDC FENV_ACCESS ON
49 #pragma clang fp exceptions(maytrap)
50 #pragma STDC FENV_ROUND FE_UPWARD
52 #pragma STDC FENV_ACCESS OFF
53 #pragma STDC FENV_ROUND FE_TOWARDZERO
59 // CHECK-LABEL: float func_4(float x, float y, float z) {
60 // CHECK-NEXT: #pragma STDC FENV_ACCESS ON
61 // CHECK-NEXT: #pragma clang fp exceptions(maytrap)
62 // CHECK-NEXT: #pragma STDC FENV_ROUND FE_UPWARD
63 // CHECK-NEXT: if (z != 0) {
64 // CHECK-NEXT: #pragma STDC FENV_ACCESS OFF
65 // CHECK-NEXT: #pragma STDC FENV_ROUND FE_TOWARDZERO
66 // CHECK-NEXT: return z + x;
68 // CHECK-NEXT: return x + y;