// Test without serialization: // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s \ // RUN: | FileCheck -strict-whitespace %s // // Test with serialization: // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-pch -o %t %s // RUN: %clang_cc1 -triple x86_64-unknown-unknown -x c++ -include-pch %t -ast-dump-all /dev/null \ // RUN: | FileCheck -strict-whitespace %s void test_type_trait() { // An unary type trait. enum E {}; (void) __is_enum(E); // A binary type trait. (void) __is_same(int ,float); // An n-ary type trait. (void) __is_constructible(int, int, int, int); } void test_array_type_trait() { // An array type trait. (void) __array_rank(int[10][20]); } void test_expression_trait() { // An expression trait. (void) __is_lvalue_expr(1); } void test_unary_expr_or_type_trait() { // Some UETTs. (void) sizeof(int); (void) alignof(int); (void) __alignof(int); } // CHECK: TranslationUnitDecl {{.*}} <> {{( )?}} // CHECK: |-FunctionDecl {{.*}} <{{.*}}ast-dump-traits.cpp:10:1, line:18:1> line:10:6{{( imported)?}} test_type_trait 'void ()' // CHECK-NEXT: | `-CompoundStmt {{.*}} // CHECK-NEXT: | |-DeclStmt {{.*}} // CHECK-NEXT: | | `-EnumDecl {{.*}} col:8{{( imported)?}} referenced E // CHECK-NEXT: | |-CStyleCastExpr {{.*}} 'void' // CHECK-NEXT: | | `-TypeTraitExpr {{.*}} 'bool' __is_enum // CHECK-NEXT: | |-CStyleCastExpr {{.*}} 'void' // CHECK-NEXT: | | `-TypeTraitExpr {{.*}} 'bool' __is_same // CHECK-NEXT: | `-CStyleCastExpr {{.*}} 'void' // CHECK-NEXT: | `-TypeTraitExpr {{.*}} 'bool' __is_constructible // CHECK-NEXT: |-FunctionDecl {{.*}} line:20:6{{( imported)?}} test_array_type_trait 'void ()' // CHECK-NEXT: | `-CompoundStmt {{.*}} // CHECK-NEXT: | `-CStyleCastExpr {{.*}} 'void' // CHECK-NEXT: | `-ArrayTypeTraitExpr {{.*}} 'unsigned long' __array_rank // CHECK-NEXT: |-FunctionDecl {{.*}} line:25:6{{( imported)?}} test_expression_trait 'void ()' // CHECK-NEXT: | `-CompoundStmt {{.*}} // CHECK-NEXT: | `-CStyleCastExpr {{.*}} 'void' // CHECK-NEXT: | `-ExpressionTraitExpr {{.*}} 'bool' __is_lvalue_expr // CHECK-NEXT: `-FunctionDecl {{.*}} line:30:6{{( imported)?}} test_unary_expr_or_type_trait 'void ()' // CHECK-NEXT: `-CompoundStmt {{.*}} // CHECK-NEXT: |-CStyleCastExpr {{.*}} 'void' // CHECK-NEXT: | `-UnaryExprOrTypeTraitExpr {{.*}} 'unsigned long' sizeof 'int' // CHECK-NEXT: |-CStyleCastExpr {{.*}} 'void' // CHECK-NEXT: | `-UnaryExprOrTypeTraitExpr {{.*}} 'unsigned long' alignof 'int' // CHECK-NEXT: `-CStyleCastExpr {{.*}} 'void' // CHECK-NEXT: `-UnaryExprOrTypeTraitExpr {{.*}} 'unsigned long' __alignof 'int'