File: init-variables.cpp

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (136 lines) | stat: -rw-r--r-- 4,594 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// RUN: %check_clang_tidy %s cppcoreguidelines-init-variables -fix-errors %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 = false;{{$}}
  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) {
  }
}

enum Color { Red,
             Green,
             Blue };

enum Car { Benz,
           BMW = 20,
           Audi = BMW + 2 };

enum Gender : char { Male,
                     Female };

enum class Direction { Up,
                       Down,
                       Left,
                       Right };

enum class Fruit : int { Apple,
                         Orange };

void uninitialized_enum() {
  Color color;
  // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: variable 'color' is not initialized [cppcoreguidelines-init-variables]
  Car car;
  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: variable 'car' is not initialized [cppcoreguidelines-init-variables]
  Gender gender;
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: variable 'gender' is not initialized [cppcoreguidelines-init-variables]
  Direction direction;
  // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: variable 'direction' is not initialized [cppcoreguidelines-init-variables]
  Fruit fruit;
  // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: variable 'fruit' is not initialized [cppcoreguidelines-init-variables]
}

void test_clang_diagnostic_error() {
  int a;
  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: variable 'a' is not initialized [cppcoreguidelines-init-variables]
  // CHECK-FIXES: {{^}}  int a = 0;{{$}}

  UnknownType b;
  // CHECK-MESSAGES: :[[@LINE-1]]:3: error: unknown type name 'UnknownType' [clang-diagnostic-error]
  // CHECK-FIXES-NOT: {{^}}  UnknownType b = 0;{{$}}
}