[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / AST / ast-print-fp-pragmas.c
blob0200c2c8e1c9ec7f90414e37c5c29eb640865cda
1 // RUN: %clang_cc1 -fsyntax-only -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
5 if (x != 0) {
6 return y;
8 return x + y;
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;
15 // CHECK-NEXT: }
16 // CHECK-NEXT: return x + y;
17 // CHECK-NEXT: }
19 float func_2(float x, float y) {
20 #pragma STDC FENV_ACCESS ON
21 if (x != 0) {
22 #pragma STDC FENV_ACCESS OFF
23 return y;
25 return x + y;
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;
33 // CHECK-NEXT: }
34 // CHECK-NEXT: return x + y;
35 // CHECK-NEXT: }
37 float func_3(float x, float y) {
38 #pragma STDC FENV_ROUND FE_DOWNWARD
39 return x + y;
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;
45 // CHECK-NEXT: }
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
51 if (z != 0) {
52 #pragma STDC FENV_ACCESS OFF
53 #pragma STDC FENV_ROUND FE_TOWARDZERO
54 return z + x;
56 return x + y;
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;
67 // CHECK-NEXT: }
68 // CHECK-NEXT: return x + y;
69 // CHECK-NEXT: }