1*67e74705SXin Li // REQUIRES: arm-registered-target
2*67e74705SXin Li // RUN: %clang_cc1 -triple arm-unknown-linux-gnueabi -emit-llvm -o - %s | FileCheck %s
3*67e74705SXin Li
4*67e74705SXin Li // CHECK: declare i32 @printf(i8*, ...)
f0()5*67e74705SXin Li void f0() {
6*67e74705SXin Li printf("a\n");
7*67e74705SXin Li }
8*67e74705SXin Li
9*67e74705SXin Li // CHECK: call void @exit
10*67e74705SXin Li // CHECK: unreachable
f1()11*67e74705SXin Li void f1() {
12*67e74705SXin Li exit(1);
13*67e74705SXin Li }
14*67e74705SXin Li
15*67e74705SXin Li // CHECK: call i8* @strstr{{.*}} [[NUW:#[0-9]+]]
f2(char * a,char * b)16*67e74705SXin Li char* f2(char* a, char* b) {
17*67e74705SXin Li return __builtin_strstr(a, b);
18*67e74705SXin Li }
19*67e74705SXin Li
20*67e74705SXin Li // frexp is NOT readnone. It writes to its pointer argument.
21*67e74705SXin Li // <rdar://problem/10070234>
22*67e74705SXin Li //
23*67e74705SXin Li // CHECK: f3
24*67e74705SXin Li // CHECK: call double @frexp(double %
25*67e74705SXin Li // CHECK-NOT: readnone
26*67e74705SXin Li // CHECK: call float @frexpf(float %
27*67e74705SXin Li // CHECK-NOT: readnone
28*67e74705SXin Li // CHECK: call double @frexpl(double %
29*67e74705SXin Li // CHECK-NOT: readnone
30*67e74705SXin Li //
31*67e74705SXin Li // Same thing for modf and friends.
32*67e74705SXin Li //
33*67e74705SXin Li // CHECK: call double @modf(double %
34*67e74705SXin Li // CHECK-NOT: readnone
35*67e74705SXin Li // CHECK: call float @modff(float %
36*67e74705SXin Li // CHECK-NOT: readnone
37*67e74705SXin Li // CHECK: call double @modfl(double %
38*67e74705SXin Li // CHECK-NOT: readnone
39*67e74705SXin Li //
40*67e74705SXin Li // CHECK: call double @remquo(double %
41*67e74705SXin Li // CHECK-NOT: readnone
42*67e74705SXin Li // CHECK: call float @remquof(float %
43*67e74705SXin Li // CHECK-NOT: readnone
44*67e74705SXin Li // CHECK: call double @remquol(double %
45*67e74705SXin Li // CHECK-NOT: readnone
46*67e74705SXin Li // CHECK: ret
f3(double x)47*67e74705SXin Li int f3(double x) {
48*67e74705SXin Li int e;
49*67e74705SXin Li __builtin_frexp(x, &e);
50*67e74705SXin Li __builtin_frexpf(x, &e);
51*67e74705SXin Li __builtin_frexpl(x, &e);
52*67e74705SXin Li __builtin_modf(x, &e);
53*67e74705SXin Li __builtin_modff(x, &e);
54*67e74705SXin Li __builtin_modfl(x, &e);
55*67e74705SXin Li __builtin_remquo(x, x, &e);
56*67e74705SXin Li __builtin_remquof(x, x, &e);
57*67e74705SXin Li __builtin_remquol(x, x, &e);
58*67e74705SXin Li return e;
59*67e74705SXin Li }
60*67e74705SXin Li
61*67e74705SXin Li // CHECK: attributes [[NUW]] = { nounwind{{.*}} }
62