| // RUN: %check_clang_tidy %s cppcoreguidelines-init-variables %t -- -- -fno-delayed-template-parsing -fexceptions |
| // CHECK-FIXES: {{^}}#include <math.h> |
| |
| // Ensure that function declarations are not changed. |
| void some_func(int x, double d, bool b, const char *p); |
| |
| // Ensure that function arguments are not changed |
| int identity_function(int x) { |
| return x; |
| } |
| |
| int do_not_modify_me; |
| |
| static int should_not_be_initialized; |
| extern int should_not_be_initialized2; |
| |
| typedef struct { |
| int unaltered1; |
| int unaltered2; |
| } UnusedStruct; |
| |
| typedef int my_int_type; |
| #define MACRO_INT int |
| #define FULL_DECLARATION() int macrodecl; |
| |
| template <typename T> |
| void template_test_function() { |
| T t; |
| int uninitialized; |
| // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: variable 'uninitialized' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} int uninitialized = 0;{{$}} |
| } |
| |
| void init_unit_tests() { |
| int x; |
| // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: variable 'x' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} int x = 0;{{$}} |
| my_int_type myint; |
| // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: variable 'myint' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} my_int_type myint = 0;{{$}} |
| |
| MACRO_INT macroint; |
| // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: variable 'macroint' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} MACRO_INT macroint = 0;{{$}} |
| FULL_DECLARATION(); |
| |
| int x0 = 1, x1, x2 = 2; |
| // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: variable 'x1' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} int x0 = 1, x1 = 0, x2 = 2;{{$}} |
| int y0, y1 = 1, y2; |
| // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: variable 'y0' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-MESSAGES: :[[@LINE-2]]:19: warning: variable 'y2' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} int y0 = 0, y1 = 1, y2 = 0;{{$}} |
| int hasval = 42; |
| |
| float f; |
| // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: variable 'f' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} float f = NAN;{{$}} |
| float fval = 85.0; |
| double d; |
| // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: variable 'd' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} double d = NAN;{{$}} |
| double dval = 99.0; |
| |
| bool b; |
| // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: variable 'b' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} bool b = 0;{{$}} |
| bool bval = true; |
| |
| const char *ptr; |
| // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: variable 'ptr' is not initialized [cppcoreguidelines-init-variables] |
| // CHECK-FIXES: {{^}} const char *ptr = nullptr;{{$}} |
| const char *ptrval = "a string"; |
| |
| UnusedStruct u; |
| |
| static int does_not_need_an_initializer; |
| extern int does_not_need_an_initializer2; |
| int parens(42); |
| int braces{42}; |
| } |
| |
| template <typename RANGE> |
| void f(RANGE r) { |
| for (char c : r) { |
| } |
| } |
| |
| void catch_variable_decl() { |
| // Expect no warning given here. |
| try { |
| } catch (int X) { |
| } |
| } |