1 // RUN: %clang_cc1 -triple x86_64-apple-darwin12 -S -o - -emit-llvm %s | FileCheck %s -check-prefix=CHECK-NOERRNO 2 // RUN: %clang_cc1 -triple x86_64-linux-gnu -S -o - -emit-llvm -fmath-errno %s | FileCheck %s -check-prefix=CHECK-ERRNO 3 // RUN: %clang_cc1 -triple x86_64-apple-darwin12 -S -o - -emit-llvm -x c++ %s | FileCheck %s -check-prefix=CHECK-NOERRNO 4 // RUN: %clang_cc1 -triple x86_64-linux-gnu -S -o - -emit-llvm -x c++ -fmath-errno %s | FileCheck %s -check-prefix=CHECK-ERRNO 5 6 // Prototypes. 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 double acos(double); 11 long double acosl(long double); 12 float acosf(float); 13 double asin(double); 14 long double asinl(long double); 15 float asinf(float); 16 double atan(double); 17 long double atanl(long double); 18 float atanf(float); 19 double atan2(double, double); 20 long double atan2l(long double, long double); 21 float atan2f(float, float); 22 double ceil(double); 23 long double ceill(long double); 24 float ceilf(float); 25 double copysign(double, double); 26 long double copysignl(long double, long double); 27 float copysignf(float, float); 28 double cos(double); 29 long double cosl(long double); 30 float cosf(float); 31 double exp(double); 32 long double expl(long double); 33 float expf(float); 34 double exp2(double); 35 long double exp2l(long double); 36 float exp2f(float); 37 double fabs(double); 38 long double fabsl(long double); 39 float fabsf(float); 40 double floor(double); 41 long double floorl(long double); 42 float floorf(float); 43 double fma(double, double, double); 44 long double fmal(long double, long double, long double); 45 float fmaf(float, float, float); 46 double fmax(double, double); 47 long double fmaxl(long double, long double); 48 float fmaxf(float, float); 49 double fmin(double, double); 50 long double fminl(long double, long double); 51 float fminf(float, float); 52 double log(double); 53 long double logl(long double); 54 float logf(float); 55 double log2(double); 56 long double log2l(long double); 57 float log2f(float); 58 long lrint(double); 59 long lrintl(long double); 60 long lrintf(float); 61 double nearbyint(double); 62 long double nearbyintl(long double); 63 float nearbyintf(float); 64 double pow(double, double); 65 long double powl(long double, long double); 66 float powf(float, float); 67 double rint(double); 68 long double rintl(long double); 69 float rintf(float); 70 double round(double); 71 long double roundl(long double); 72 float roundf(float); 73 double sin(double); 74 long double sinl(long double); 75 float sinf(float); 76 double sqrt(double); 77 long double sqrtl(long double); 78 float sqrtf(float); 79 double tan(double); 80 long double tanl(long double); 81 float tanf(float); 82 double trunc(double); 83 long double truncl(long double); 84 float truncf(float); 85 #ifdef __cplusplus 86 } 87 #endif 88 89 // Force emission of the declare statements. 90 #define F(x) ((void*)x) 91 void *use[] = { F(acos), F(acosl), F(acosf), F(asin), F(asinl), F(asinf), 92 F(atan), F(atanl), F(atanf), F(atan2), F(atan2l), F(atan2f), 93 F(ceil), F(ceill), F(ceilf), F(copysign), F(copysignl), 94 F(copysignf), F(cos), F(cosl), F(cosf), F(exp), F(expl), 95 F(expf), F(exp2), F(exp2l), F(exp2f), F(fabs), F(fabsl), 96 F(fabsf), F(floor), F(floorl), F(floorf), F(fma), F(fmal), 97 F(fmaf), F(fmax), F(fmaxl), F(fmaxf), F(fmin), F(fminl), 98 F(fminf), F(log), F(logl), F(logf), F(log2), F(log2l), 99 F(log2f), F(lrint), F(lrintl), F(lrintf), F(nearbyint), 100 F(nearbyintl), F(nearbyintf), F(pow), F(powl), F(powf), 101 F(rint), F(rintl), F(rintf), F(round), F(roundl), F(roundf), 102 F(sin), F(sinl), F(sinf), F(sqrt), F(sqrtl), F(sqrtf), F(tan), 103 F(tanl), F(tanf), F(trunc), F(truncl), F(truncf) }; 104 105 // CHECK-NOERRNO: declare double @acos(double) [[NUW:#[0-9]+]] 106 // CHECK-NOERRNO: declare x86_fp80 @acosl(x86_fp80) [[NUW]] 107 // CHECK-NOERRNO: declare float @acosf(float) [[NUW]] 108 // CHECK-NOERRNO: declare double @asin(double) [[NUW]] 109 // CHECK-NOERRNO: declare x86_fp80 @asinl(x86_fp80) [[NUW]] 110 // CHECK-NOERRNO: declare float @asinf(float) [[NUW]] 111 // CHECK-NOERRNO: declare double @atan(double) [[NUW]] 112 // CHECK-NOERRNO: declare x86_fp80 @atanl(x86_fp80) [[NUW]] 113 // CHECK-NOERRNO: declare float @atanf(float) [[NUW]] 114 // CHECK-NOERRNO: declare double @atan2(double, double) [[NUW]] 115 // CHECK-NOERRNO: declare x86_fp80 @atan2l(x86_fp80, x86_fp80) [[NUW]] 116 // CHECK-NOERRNO: declare float @atan2f(float, float) [[NUW]] 117 // CHECK-NOERRNO: declare double @ceil(double) [[NUW]] 118 // CHECK-NOERRNO: declare x86_fp80 @ceill(x86_fp80) [[NUW]] 119 // CHECK-NOERRNO: declare float @ceilf(float) [[NUW]] 120 // CHECK-NOERRNO: declare double @copysign(double, double) [[NUW]] 121 // CHECK-NOERRNO: declare x86_fp80 @copysignl(x86_fp80, x86_fp80) [[NUW]] 122 // CHECK-NOERRNO: declare float @copysignf(float, float) [[NUW]] 123 // CHECK-NOERRNO: declare double @cos(double) [[NUW]] 124 // CHECK-NOERRNO: declare x86_fp80 @cosl(x86_fp80) [[NUW]] 125 // CHECK-NOERRNO: declare float @cosf(float) [[NUW]] 126 // CHECK-NOERRNO: declare double @exp(double) [[NUW]] 127 // CHECK-NOERRNO: declare x86_fp80 @expl(x86_fp80) [[NUW]] 128 // CHECK-NOERRNO: declare float @expf(float) [[NUW]] 129 // CHECK-NOERRNO: declare double @exp2(double) [[NUW]] 130 // CHECK-NOERRNO: declare x86_fp80 @exp2l(x86_fp80) [[NUW]] 131 // CHECK-NOERRNO: declare float @exp2f(float) [[NUW]] 132 // CHECK-NOERRNO: declare double @fabs(double) [[NUW]] 133 // CHECK-NOERRNO: declare x86_fp80 @fabsl(x86_fp80) [[NUW]] 134 // CHECK-NOERRNO: declare float @fabsf(float) [[NUW]] 135 // CHECK-NOERRNO: declare double @floor(double) [[NUW]] 136 // CHECK-NOERRNO: declare x86_fp80 @floorl(x86_fp80) [[NUW]] 137 // CHECK-NOERRNO: declare float @floorf(float) [[NUW]] 138 // CHECK-NOERRNO: declare double @fma(double, double, double) [[NUW]] 139 // CHECK-NOERRNO: declare x86_fp80 @fmal(x86_fp80, x86_fp80, x86_fp80) [[NUW]] 140 // CHECK-NOERRNO: declare float @fmaf(float, float, float) [[NUW]] 141 // CHECK-NOERRNO: declare double @fmax(double, double) [[NUW]] 142 // CHECK-NOERRNO: declare x86_fp80 @fmaxl(x86_fp80, x86_fp80) [[NUW]] 143 // CHECK-NOERRNO: declare float @fmaxf(float, float) [[NUW]] 144 // CHECK-NOERRNO: declare double @fmin(double, double) [[NUW]] 145 // CHECK-NOERRNO: declare x86_fp80 @fminl(x86_fp80, x86_fp80) [[NUW]] 146 // CHECK-NOERRNO: declare float @fminf(float, float) [[NUW]] 147 // CHECK-NOERRNO: declare double @log(double) [[NUW]] 148 // CHECK-NOERRNO: declare x86_fp80 @logl(x86_fp80) [[NUW]] 149 // CHECK-NOERRNO: declare float @logf(float) [[NUW]] 150 // CHECK-NOERRNO: declare double @log2(double) [[NUW]] 151 // CHECK-NOERRNO: declare x86_fp80 @log2l(x86_fp80) [[NUW]] 152 // CHECK-NOERRNO: declare float @log2f(float) [[NUW]] 153 // CHECK-NOERRNO: declare {{i..}} @lrint(double) [[NUW]] 154 // CHECK-NOERRNO: declare {{i..}} @lrintl(x86_fp80) [[NUW]] 155 // CHECK-NOERRNO: declare {{i..}} @lrintf(float) [[NUW]] 156 // CHECK-NOERRNO: declare double @nearbyint(double) [[NUW]] 157 // CHECK-NOERRNO: declare x86_fp80 @nearbyintl(x86_fp80) [[NUW]] 158 // CHECK-NOERRNO: declare float @nearbyintf(float) [[NUW]] 159 // CHECK-NOERRNO: declare double @pow(double, double) [[NUW]] 160 // CHECK-NOERRNO: declare x86_fp80 @powl(x86_fp80, x86_fp80) [[NUW]] 161 // CHECK-NOERRNO: declare float @powf(float, float) [[NUW]] 162 // CHECK-NOERRNO: declare double @rint(double) [[NUW]] 163 // CHECK-NOERRNO: declare x86_fp80 @rintl(x86_fp80) [[NUW]] 164 // CHECK-NOERRNO: declare float @rintf(float) [[NUW]] 165 // CHECK-NOERRNO: declare double @round(double) [[NUW]] 166 // CHECK-NOERRNO: declare x86_fp80 @roundl(x86_fp80) [[NUW]] 167 // CHECK-NOERRNO: declare float @roundf(float) [[NUW]] 168 // CHECK-NOERRNO: declare double @sin(double) [[NUW]] 169 // CHECK-NOERRNO: declare x86_fp80 @sinl(x86_fp80) [[NUW]] 170 // CHECK-NOERRNO: declare float @sinf(float) [[NUW]] 171 // CHECK-NOERRNO: declare double @sqrt(double) [[NUW]] 172 // CHECK-NOERRNO: declare x86_fp80 @sqrtl(x86_fp80) [[NUW]] 173 // CHECK-NOERRNO: declare float @sqrtf(float) [[NUW]] 174 // CHECK-NOERRNO: declare double @tan(double) [[NUW]] 175 // CHECK-NOERRNO: declare x86_fp80 @tanl(x86_fp80) [[NUW]] 176 // CHECK-NOERRNO: declare float @tanf(float) [[NUW]] 177 // CHECK-NOERRNO: declare double @trunc(double) [[NUW]] 178 // CHECK-NOERRNO: declare x86_fp80 @truncl(x86_fp80) [[NUW]] 179 // CHECK-NOERRNO: declare float @truncf(float) [[NUW]] 180 181 // CHECK-ERRNO: declare double @ceil(double) [[NUW:#[0-9]+]] 182 // CHECK-ERRNO: declare x86_fp80 @ceill(x86_fp80) [[NUW]] 183 // CHECK-ERRNO: declare float @ceilf(float) [[NUW]] 184 // CHECK-ERRNO: declare double @copysign(double, double) [[NUW]] 185 // CHECK-ERRNO: declare x86_fp80 @copysignl(x86_fp80, x86_fp80) [[NUW]] 186 // CHECK-ERRNO: declare float @copysignf(float, float) [[NUW]] 187 // CHECK-ERRNO: declare double @fabs(double) [[NUW]] 188 // CHECK-ERRNO: declare x86_fp80 @fabsl(x86_fp80) [[NUW]] 189 // CHECK-ERRNO: declare float @fabsf(float) [[NUW]] 190 // CHECK-ERRNO: declare double @floor(double) [[NUW]] 191 // CHECK-ERRNO: declare x86_fp80 @floorl(x86_fp80) [[NUW]] 192 // CHECK-ERRNO: declare float @floorf(float) [[NUW]] 193 // CHECK-ERRNO: declare double @fmax(double, double) [[NUW]] 194 // CHECK-ERRNO: declare x86_fp80 @fmaxl(x86_fp80, x86_fp80) [[NUW]] 195 // CHECK-ERRNO: declare float @fmaxf(float, float) [[NUW]] 196 // CHECK-ERRNO: declare double @fmin(double, double) [[NUW]] 197 // CHECK-ERRNO: declare x86_fp80 @fminl(x86_fp80, x86_fp80) [[NUW]] 198 // CHECK-ERRNO: declare float @fminf(float, float) [[NUW]] 199 // CHECK-ERRNO: declare {{i..}} @lrint(double) [[NUW]] 200 // CHECK-ERRNO: declare {{i..}} @lrintl(x86_fp80) [[NUW]] 201 // CHECK-ERRNO: declare {{i..}} @lrintf(float) [[NUW]] 202 // CHECK-ERRNO: declare double @nearbyint(double) [[NUW]] 203 // CHECK-ERRNO: declare x86_fp80 @nearbyintl(x86_fp80) [[NUW]] 204 // CHECK-ERRNO: declare float @nearbyintf(float) [[NUW]] 205 // CHECK-ERRNO: declare double @rint(double) [[NUW]] 206 // CHECK-ERRNO: declare x86_fp80 @rintl(x86_fp80) [[NUW]] 207 // CHECK-ERRNO: declare float @rintf(float) [[NUW]] 208 // CHECK-ERRNO: declare double @round(double) [[NUW]] 209 // CHECK-ERRNO: declare x86_fp80 @roundl(x86_fp80) [[NUW]] 210 // CHECK-ERRNO: declare float @roundf(float) [[NUW]] 211 // CHECK-ERRNO: declare double @trunc(double) [[NUW]] 212 // CHECK-ERRNO: declare x86_fp80 @truncl(x86_fp80) [[NUW]] 213 // CHECK-ERRNO: declare float @truncf(float) [[NUW]] 214 215 // CHECK-NOERRNO: attributes [[NUW]] = { nounwind readnone{{.*}} } 216 217 // CHECK-ERRNO: attributes [[NUW]] = { nounwind readnone{{.*}} } 218