92 lines · c
1// RUN: %clang_cc1 %s -Wno-unused-value -verify -fsyntax-only2// RUN: %clang_cc1 %s -Wno-unused-value -ast-dump -DAST_CHECK | FileCheck %s3 4struct S {};5void usage(float f, int i, double d) {6#ifdef AST_CHECK7 __builtin_fpclassify(d, 1, i, i, 3, d);8 //CHECK: CallExpr9 //CHECK-NEXT: ImplicitCastExpr10 //CHECK-SAME: <BuiltinFnToFnPtr>11 //CHECK-NEXT: DeclRefExpr12 //CHECK-SAME: '__builtin_fpclassify'13 //CHECK-NEXT: ImplicitCastExpr14 //CHECK-SAME: 'int' <FloatingToIntegral>15 //CHECK-NEXT: ImplicitCastExpr16 //CHECK-SAME: 'double' <LValueToRValue>17 //CHECK-NEXT: DeclRefExpr18 //CHECK-SAME: 'd' 'double'19 //CHECK-NEXT: IntegerLiteral20 //CHECK-NEXT: ImplicitCastExpr21 //CHECK-SAME: 'int' <LValueToRValue>22 //CHECK-NEXT: DeclRefExpr23 //CHECK-SAME: 'i' 'int'24 //CHECK-NEXT: ImplicitCastExpr25 //CHECK-SAME: 'int' <LValueToRValue>26 //CHECK-NEXT: DeclRefExpr27 //CHECK-SAME: 'i' 'int'28 //CHECK-NEXT: IntegerLiteral29 //CHECK-NEXT: ImplicitCastExpr30 //CHECK-SAME: 'double' <LValueToRValue>31 //CHECK-NEXT: DeclRefExpr32 //CHECK-SAME: 'd' 'double'33 34 __builtin_fpclassify(f, 1, i, i, 3, f);35 //CHECK: CallExpr36 //CHECK-NEXT: ImplicitCastExpr37 //CHECK-SAME: <BuiltinFnToFnPtr>38 //CHECK-NEXT: DeclRefExpr39 //CHECK-SAME: '__builtin_fpclassify'40 //CHECK-NEXT: ImplicitCastExpr41 //CHECK-SAME: 'int' <FloatingToIntegral>42 //CHECK-NEXT: ImplicitCastExpr43 //CHECK-SAME: 'float' <LValueToRValue>44 //CHECK-NEXT: DeclRefExpr45 //CHECK-SAME: 'f' 'float'46 //CHECK-NEXT: IntegerLiteral47 //CHECK-NEXT: ImplicitCastExpr48 //CHECK-SAME: 'int' <LValueToRValue>49 //CHECK-NEXT: DeclRefExpr50 //CHECK-SAME: 'i' 'int'51 //CHECK-NEXT: ImplicitCastExpr52 //CHECK-SAME: 'int' <LValueToRValue>53 //CHECK-NEXT: DeclRefExpr54 //CHECK-SAME: 'i' 'int'55 //CHECK-NEXT: IntegerLiteral56 //CHECK-NEXT: ImplicitCastExpr57 //CHECK-SAME: 'float' <LValueToRValue>58 //CHECK-NEXT: DeclRefExpr59 //CHECK-SAME: 'f' 'float'60 61 __builtin_isfinite(f);62 //CHECK: CallExpr63 //CHECK-NEXT: ImplicitCastExpr64 //CHECK-SAME: <BuiltinFnToFnPtr>65 //CHECK-NEXT: DeclRefExpr66 //CHECK-SAME: '__builtin_isfinite'67 //CHECK-NEXT: ImplicitCastExpr68 //CHECK-SAME: 'float' <LValueToRValue>69 //CHECK-NEXT: DeclRefExpr70 //CHECK-SAME: 'f' 'float'71 72 __builtin_isfinite(d);73 //CHECK: CallExpr74 //CHECK-NEXT: ImplicitCastExpr75 //CHECK-SAME: <BuiltinFnToFnPtr>76 //CHECK-NEXT: DeclRefExpr77 //CHECK-SAME: '__builtin_isfinite'78 //CHECK-NEXT: ImplicitCastExpr79 //CHECK-SAME: 'double' <LValueToRValue>80 //CHECK-NEXT: DeclRefExpr81 //CHECK-SAME: 'd' 'double'82#else83 struct S s;84 // expected-error@+1{{passing 'struct S' to parameter of incompatible type 'int'}}85 __builtin_fpclassify(d, s, i, i, 3, d);86 // expected-error@+1{{floating point classification requires argument of floating point type (passed in 'int')}}87 __builtin_fpclassify(d, 1, i, i, 3, i);88 // expected-error@+1{{floating point classification requires argument of floating point type (passed in 'int')}}89 __builtin_isfinite(i);90#endif91}92