// RUN: %clang_cc1 %s -Wno-unused-value -verify -fsyntax-only // RUN: %clang_cc1 %s -Wno-unused-value -ast-dump -DAST_CHECK | FileCheck %s struct S {}; void usage(float f, int i, double d) { #ifdef AST_CHECK __builtin_fpclassify(d, 1, i, i, 3, d); //CHECK: CallExpr //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: //CHECK-NEXT: DeclRefExpr //CHECK-SAME: '__builtin_fpclassify' //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'int' //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'double' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'd' 'double' //CHECK-NEXT: IntegerLiteral //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'int' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'i' 'int' //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'int' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'i' 'int' //CHECK-NEXT: IntegerLiteral //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'double' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'd' 'double' __builtin_fpclassify(f, 1, i, i, 3, f); //CHECK: CallExpr //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: //CHECK-NEXT: DeclRefExpr //CHECK-SAME: '__builtin_fpclassify' //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'int' //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'float' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'f' 'float' //CHECK-NEXT: IntegerLiteral //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'int' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'i' 'int' //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'int' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'i' 'int' //CHECK-NEXT: IntegerLiteral //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'float' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'f' 'float' __builtin_isfinite(f); //CHECK: CallExpr //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: //CHECK-NEXT: DeclRefExpr //CHECK-SAME: '__builtin_isfinite' //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'float' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'f' 'float' __builtin_isfinite(d); //CHECK: CallExpr //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: //CHECK-NEXT: DeclRefExpr //CHECK-SAME: '__builtin_isfinite' //CHECK-NEXT: ImplicitCastExpr //CHECK-SAME: 'double' //CHECK-NEXT: DeclRefExpr //CHECK-SAME: 'd' 'double' #else struct S s; // expected-error@+1{{passing 'struct S' to parameter of incompatible type 'int'}} __builtin_fpclassify(d, s, i, i, 3, d); // expected-error@+1{{floating point classification requires argument of floating point type (passed in 'int')}} __builtin_fpclassify(d, 1, i, i, 3, i); // expected-error@+1{{floating point classification requires argument of floating point type (passed in 'int')}} __builtin_isfinite(i); #endif }