brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 647b2e5 Raw
45 lines · plain
1// RUN: %check_clang_tidy %s bugprone-dynamic-static-initializers %t -- -- -fno-threadsafe-statics2 3int fact(int n) {4  return (n == 0) ? 1 : n * fact(n - 1);5}6 7int static_thing = fact(5);8// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: static variable 'static_thing' may be dynamically initialized in this header file [bugprone-dynamic-static-initializers]9 10int sample() {11    int x;12    return x;13}14 15int dynamic_thing = sample();16// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: static variable 'dynamic_thing' may be dynamically initialized in this header file [bugprone-dynamic-static-initializers]17 18int not_so_bad = 12 + 4942; // no warning19 20extern int bar();21 22int foo() {23  static int k = bar();24  // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: static variable 'k' may be dynamically initialized in this header file [bugprone-dynamic-static-initializers]25  return k;26}27 28int bar2() {29  return 7;30}31 32int foo2() {33  // This may work fine when optimization is enabled because bar() can34  // be turned into a constant 7.  But without optimization, it can35  // cause problems. Therefore, we must err on the side of conservatism.36  static int x = bar2();37  // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: static variable 'x' may be dynamically initialized in this header file [bugprone-dynamic-static-initializers]38  return x;39}40 41int foo3() {42  static int p = 7 + 83; // no warning43  return p;44}45