140 lines · c
1// RUN: %check_clang_tidy -std=c23-or-later %s modernize-use-nullptr %t2 3#define NULL 04 5void test_assignment() {6 int *p1 = 0;7 // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use nullptr [modernize-use-nullptr]8 // CHECK-FIXES: int *p1 = nullptr;9 p1 = 0;10 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use nullptr11 // CHECK-FIXES: p1 = nullptr;12 13 int *p2 = NULL;14 // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use nullptr15 // CHECK-FIXES: int *p2 = nullptr;16 17 p2 = p1;18 // CHECK-FIXES: p2 = p1;19 20 const int null = 0;21 int *p3 = &null;22 23 p3 = NULL;24 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use nullptr25 // CHECK-FIXES: p3 = nullptr;26 27 int *p4 = p3;28 29 int i1 = 0;30 31 int i2 = NULL;32 33 int i3 = null;34 35 int *p5, *p6, *p7;36 p5 = p6 = p7 = NULL;37 // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: use nullptr38 // CHECK-FIXES: p5 = p6 = p7 = nullptr;39}40 41void test_function(int *p) {}42 43void test_function_no_ptr_param(int i) {}44 45void test_function_call() {46 test_function(0);47 // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: use nullptr48 // CHECK-FIXES: test_function(nullptr);49 50 test_function(NULL);51 // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: use nullptr52 // CHECK-FIXES: test_function(nullptr);53 54 test_function_no_ptr_param(0);55}56 57char *test_function_return1() {58 return 0;59 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use nullptr60 // CHECK-FIXES: return nullptr;61}62 63void *test_function_return2() {64 return NULL;65 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use nullptr66 // CHECK-FIXES: return nullptr;67}68 69int test_function_return4() {70 return 0;71}72 73int test_function_return5() {74 return NULL;75}76 77int *test_function_return_cast1() {78 return(int)0;79 // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use nullptr80 // CHECK-FIXES: return nullptr;81}82 83int *test_function_return_cast2() {84#define RET return85 RET(int)0;86 // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use nullptr87 // CHECK-FIXES: RET nullptr;88#undef RET89}90 91// Test parentheses expressions resulting in a nullptr.92int *test_parentheses_expression1() {93 return(0);94 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use nullptr95 // CHECK-FIXES: return(nullptr);96}97 98int *test_parentheses_expression2() {99 return((int)(0.0f));100 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use nullptr101 // CHECK-FIXES: return(nullptr);102}103 104int *test_nested_parentheses_expression() {105 return((((0))));106 // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use nullptr107 // CHECK-FIXES: return((((nullptr))));108}109 110void test_const_pointers() {111 const int *const_p1 = 0;112 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: use nullptr113 // CHECK-FIXES: const int *const_p1 = nullptr;114 const int *const_p2 = NULL;115 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: use nullptr116 // CHECK-FIXES: const int *const_p2 = nullptr;117 const int *const_p3 = (int)0;118 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: use nullptr119 // CHECK-FIXES: const int *const_p3 = nullptr;120 const int *const_p4 = (int)0.0f;121 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: use nullptr122 // CHECK-FIXES: const int *const_p4 = nullptr;123}124 125void test_nested_implicit_cast_expr() {126 int func0(void*, void*);127 int func1(int, void*, void*);128 129 (double)func1(0, 0, 0);130 // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: use nullptr131 // CHECK-MESSAGES: :[[@LINE-2]]:23: warning: use nullptr132 // CHECK-FIXES: (double)func1(0, nullptr, nullptr);133 (double)func1(func0(0, 0), 0, 0);134 // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: use nullptr135 // CHECK-MESSAGES: :[[@LINE-2]]:26: warning: use nullptr136 // CHECK-MESSAGES: :[[@LINE-3]]:30: warning: use nullptr137 // CHECK-MESSAGES: :[[@LINE-4]]:33: warning: use nullptr138 // CHECK-FIXES: (double)func1(func0(nullptr, nullptr), nullptr, nullptr);139}140