brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 6de6aef Raw
240 lines · cpp
1// RUN: not %clang_cc1 -std=c++11 -fno-diagnostics-show-line-numbers -fcaret-diagnostics-max-lines=5 -Wsometimes-uninitialized %s 2>&1 | FileCheck %s --strict-whitespace2 3void line(int);4 5// Check we expand the range as much as possible within the limit.6 7// CHECK:      warning: variable 'a' is used uninitialized whenever 'if' condition is true8// CHECK-NEXT: {{^}}  if (cond) {9// CHECK-NEXT: {{^}}      ^~~~{{$}}10// CHECK-NEXT: note: uninitialized use occurs here11// CHECK-NEXT: {{^}}  return a;12// CHECK-NEXT: {{^}}         ^13// CHECK-NEXT: note: remove the 'if' if its condition is always false14// CHECK-NEXT: {{^}}  if (cond) {15// CHECK-NEXT: {{^}}  ^~~~~~~~~~~{{$}}16// CHECK-NEXT: {{^}}    line(1);17// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}18// CHECK-NEXT: {{^}}  } else {19// CHECK-NEXT: {{^}}  ~~~~~~{{$}}20// CHECK-NEXT: note: initialize the variable21int f1(int cond) {22  int a;23  if (cond) {24    line(1);25  } else {26    a = 3;27  }28  return a;29}30 31// CHECK:      warning: variable 'a' is used uninitialized whenever 'if' condition is true32// CHECK-NEXT: {{^}}  if (cond) {33// CHECK-NEXT: {{^}}      ^~~~{{$}}34// CHECK-NEXT: note: uninitialized use occurs here35// CHECK-NEXT: {{^}}  return a;36// CHECK-NEXT: {{^}}         ^37// CHECK-NEXT: note: remove the 'if' if its condition is always false38// CHECK-NEXT: {{^}}  if (cond) {39// CHECK-NEXT: {{^}}  ^~~~~~~~~~~{{$}}40// CHECK-NEXT: {{^}}    line(1);41// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}42// CHECK-NEXT: {{^}}    line(2);43// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}44// CHECK-NEXT: {{^}}  } else {45// CHECK-NEXT: {{^}}  ~~~~~~{{$}}46// CHECK-NEXT: note: initialize the variable47int f2(int cond) {48  int a;49  if (cond) {50    line(1);51    line(2);52  } else {53    a = 3;54  }55  return a;56}57 58// CHECK:      warning: variable 'a' is used uninitialized whenever 'if' condition is true59// CHECK-NEXT: {{^}}  if (cond) {60// CHECK-NEXT: {{^}}      ^~~~{{$}}61// CHECK-NEXT: note: uninitialized use occurs here62// CHECK-NEXT: {{^}}  return a;63// CHECK-NEXT: {{^}}         ^64// CHECK-NEXT: note: remove the 'if' if its condition is always false65// CHECK-NEXT: {{^}}  if (cond) {66// CHECK-NEXT: {{^}}  ^~~~~~~~~~~{{$}}67// CHECK-NEXT: {{^}}    line(1);68// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}69// CHECK-NEXT: {{^}}    line(2);70// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}71// CHECK-NEXT: {{^}}    line(3);72// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}73// CHECK-NEXT: {{^}}  } else {74// CHECK-NEXT: {{^}}  ~~~~~~{{$}}75// CHECK-NEXT: note: initialize the variable76int f3(int cond) {77  int a;78  if (cond) {79    line(1);80    line(2);81    line(3);82  } else {83    a = 3;84  }85  return a;86}87 88// CHECK:      warning: variable 'a' is used uninitialized whenever 'if' condition is true89// CHECK-NEXT: {{^}}  if (cond) {90// CHECK-NEXT: {{^}}      ^~~~{{$}}91// CHECK-NEXT: note: uninitialized use occurs here92// CHECK-NEXT: {{^}}  return a;93// CHECK-NEXT: {{^}}         ^94// CHECK-NEXT: note: remove the 'if' if its condition is always false95// CHECK-NEXT: {{^}}  if (cond) {96// CHECK-NEXT: {{^}}  ^~~~~~~~~~~{{$}}97// CHECK-NEXT: {{^}}    line(1);98// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}99// CHECK-NEXT: {{^}}    line(2);100// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}101// CHECK-NEXT: {{^}}    line(3);102// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}103// CHECK-NEXT: {{^}}    line(4);104// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}105// CHECK-NEXT: note: initialize the variable106int f4(int cond) {107  int a;108  if (cond) {109    line(1);110    line(2);111    line(3);112    line(4);113  } else {114    a = 3;115  }116  return a;117}118 119// CHECK:      warning: variable 'a' is used uninitialized whenever 'if' condition is true120// CHECK-NEXT: {{^}}  if (cond) {121// CHECK-NEXT: {{^}}      ^~~~{{$}}122// CHECK-NEXT: note: uninitialized use occurs here123// CHECK-NEXT: {{^}}  return a;124// CHECK-NEXT: {{^}}         ^125// CHECK-NEXT: note: remove the 'if' if its condition is always false126// CHECK-NEXT: {{^}}  if (cond) {127// CHECK-NEXT: {{^}}  ^~~~~~~~~~~{{$}}128// CHECK-NEXT: {{^}}    line(1);129// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}130// CHECK-NEXT: {{^}}    line(2);131// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}132// CHECK-NEXT: {{^}}    line(3);133// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}134// CHECK-NEXT: {{^}}    line(4);135// CHECK-NEXT: {{^}}    ~~~~~~~~{{$}}136// CHECK-NEXT: note: initialize the variable137int f5(int cond) {138  int a;139  if (cond) {140    line(1);141    line(2);142    line(3);143    line(4);144    line(5);145  } else {146    a = 3;147  }148  return a;149}150 151 152// Check that we don't include lines with no interesting code if we can't reach153// the interesting part within the line limit.154 155// CHECK:      error: no matching function for call to 'g156 157// CHECK:      note: candidate template ignored: substitution failure158// CHECK-NEXT: {{^}}decltype(T()159// CHECK-NEXT: {{^}}         ~{{$}}160// CHECK-NEXT: {{^}}    + 1161// CHECK-NEXT: {{^}}    + 2162// CHECK-NEXT: {{^}}    + 3163// CHECK-NEXT: {{^}}void g();164// CHECK-NEXT: {{^}}     ^{{$}}165template<typename T>166decltype(T()167    + 1168    + 2169    + 3)170void g();171 172// CHECK:      note: candidate template ignored: substitution failure173// CHECK-NEXT: {{^}}void g();174// CHECK-NEXT: {{^}}     ^{{$}}175template<typename T>176decltype(T()177    + 1178    + 2179    + 3180    + 4)181void g();182 183void h() { g<int()>(); }184 185 186void multiple_ranges(int a, int b) {187  // CHECK:      error: invalid operands188  // CHECK-NEXT: &(a)189  // CHECK-NEXT: ~~~~190  // CHECK-NEXT: +191  // CHECK-NEXT: ^192  // CHECK-NEXT: &(b)193  // CHECK-NEXT: ~~~~194  &(a)195  +196  &(b);197 198  // CHECK-NEXT: error: invalid operands199  // CHECK-NEXT: &(200  // CHECK-NEXT: ~~201  // CHECK-NEXT: a202  // CHECK-NEXT: ~203  // CHECK-NEXT: )204  // CHECK-NEXT: ~205  // CHECK-NEXT: +206  // CHECK-NEXT: ^207  // CHECK-NEXT: &(208  // CHECK-NEXT: ~~209  &(210  a211  )212  +213  &(214  b215  );216 217  // CHECK-NEXT: error: invalid operands218  // CHECK-NEXT: &(a219  // CHECK-NEXT: ~~220  // CHECK-NEXT: )221  // CHECK-NEXT: ~222  // CHECK-NEXT: +223  // CHECK-NEXT: ^224  // CHECK-NEXT: &(225  // CHECK-NEXT: ~~226  // CHECK-NEXT: b227  // CHECK-NEXT: ~228  &(a229  )230  +231  &(232  b233  );234}235 236#define pr33902_a(b) #b237#define pr33902_c(d) _Pragma(pr33902_a(d))238#define pr33902_e(f) pr33902_c(GCC warning #f)239pr33902_e() pr33902_e()240