// RUN: %clang_cc1 -std=c++98 %s -verify -pedantic-errors // RUN: %clang_cc1 -std=c++11 %s -verify -pedantic-errors -ast-dump | FileCheck %s // RUN: %clang_cc1 -std=c++14 %s -verify -pedantic-errors -ast-dump | FileCheck %s // RUN: %clang_cc1 -std=c++17 %s -verify -pedantic-errors -ast-dump | FileCheck %s // RUN: %clang_cc1 -std=c++20 %s -verify -pedantic-errors -ast-dump | FileCheck %s // RUN: %clang_cc1 -std=c++23 %s -verify -pedantic-errors -ast-dump | FileCheck %s // RUN: %clang_cc1 -std=c++26 %s -verify -pedantic-errors -ast-dump | FileCheck %s // expected-no-diagnostics // cwg722: 20 #if __cplusplus >= 201103L namespace std { using nullptr_t = decltype(nullptr); } // namespace std void f(std::nullptr_t, ...); std::nullptr_t g(); void h() { std::nullptr_t np; const std::nullptr_t cnp = nullptr; extern int i; f( nullptr, nullptr, np, cnp, static_cast(np), g(), __builtin_bit_cast(std::nullptr_t, static_cast(&i)) ); // CHECK: `-CallExpr {{.+}} 'void' // CHECK-NEXT: |-ImplicitCastExpr {{.+}} 'void (*)(std::nullptr_t, ...)' // CHECK-NEXT: | `-DeclRefExpr {{.+}} 'void (std::nullptr_t, ...)' lvalue Function {{.+}} 'f' 'void (std::nullptr_t, ...)' // CHECK-NEXT: |-CXXNullPtrLiteralExpr {{.+}} 'std::nullptr_t' // CHECK-NEXT: |-ImplicitCastExpr {{.+}} 'void *' // CHECK-NEXT: | `-CXXNullPtrLiteralExpr {{.+}} 'std::nullptr_t' // CHECK-NEXT: |-ImplicitCastExpr {{.+}} 'void *' // CHECK-NEXT: | `-DeclRefExpr {{.+}} 'std::nullptr_t' lvalue Var {{.+}} 'np' 'std::nullptr_t' // CHECK-NEXT: |-ImplicitCastExpr {{.+}} 'void *' // CHECK-NEXT: | `-DeclRefExpr {{.+}} 'const std::nullptr_t' lvalue Var {{.+}} 'cnp' 'const std::nullptr_t' // CHECK-NEXT: |-ImplicitCastExpr {{.+}} 'void *' // CHECK-NEXT: | `-CXXStaticCastExpr {{.+}} 'std::nullptr_t' static_cast // CHECK-NEXT: | `-ImplicitCastExpr {{.+}} 'std::nullptr_t' part_of_explicit_cast // CHECK-NEXT: | `-DeclRefExpr {{.+}} 'std::nullptr_t' lvalue Var {{.+}} 'np' 'std::nullptr_t' // CHECK-NEXT: |-ImplicitCastExpr {{.+}} 'void *' // CHECK-NEXT: | `-CallExpr {{.+}} 'std::nullptr_t' // CHECK-NEXT: | `-ImplicitCastExpr {{.+}} 'std::nullptr_t (*)()' // CHECK-NEXT: | `-DeclRefExpr {{.+}} 'std::nullptr_t ()' lvalue Function {{.+}} 'g' 'std::nullptr_t ()' // CHECK-NEXT: `-ImplicitCastExpr {{.+}} 'void *' // CHECK-NEXT: `-BuiltinBitCastExpr {{.+}} 'std::nullptr_t' // CHECK-NEXT: `-MaterializeTemporaryExpr {{.+}} 'void *' xvalue // CHECK-NEXT: `-CXXStaticCastExpr {{.+}} 'void *' static_cast // CHECK-NEXT: `-ImplicitCastExpr {{.+}} 'void *' part_of_explicit_cast // CHECK-NEXT: `-UnaryOperator {{.+}} 'int *' prefix '&' cannot overflow // CHECK-NEXT: `-DeclRefExpr {{.+}} 'int' lvalue Var {{.+}} 'i' 'int' } #endif