brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · ade5114 Raw
50 lines · c
1// RUN: %clang_analyze_cc1 %s -verify \2// RUN:   -analyzer-checker=core \3// RUN:   -analyzer-config core.CallAndMessage:ArgPointeeInitializedness=true \4// RUN:   -analyzer-config core.CallAndMessage:ArgInitializedness=false \5// RUN:   -analyzer-output=plist -o %t.plist6// RUN: cat %t.plist | FileCheck %s7 8// RUN: %clang_analyze_cc1 %s -verify=no-pointee \9// RUN:   -analyzer-checker=core \10// RUN:   -analyzer-config core.CallAndMessage:ArgPointeeInitializedness=false \11// RUN:   -analyzer-config core.CallAndMessage:ArgInitializedness=false12 13// RUN: %clang_analyze_cc1 %s -verify=arg-init \14// RUN:   -analyzer-checker=core \15// RUN:   -analyzer-config core.CallAndMessage:ArgPointeeInitializedness=false \16// RUN:   -analyzer-config core.CallAndMessage:ArgInitializedness=true17 18// no-pointee-no-diagnostics19 20void doStuff_pointerToConstInt(const int *u){};21void pointee_uninit(void) {22  int i;23  int *p = &i;24  doStuff_pointerToConstInt(p); // expected-warning{{1st function call argument is a pointer to uninitialized value [core.CallAndMessage]}}25}26 27// TODO: If this hash ever changes, turn28// core.CallAndMessage:ArgPointeeInitializedness from a checker option into a29// checker, as described in the CallAndMessage comments!30// CHECK: <key>issue_hash_content_of_line_in_context</key>31// CHECK-SAME: <string>97a74322d64dca40aa57303842c745a1</string>32 33typedef struct {34  int i  :2;35  int    :30;  // unnamed bit-field36} B;37 38extern void consume_B(B);39 40void bitfield_B_init(void) {41  B b1;42  b1.i = 1; // b1 is initialized43  consume_B(b1);44}45 46void bitfield_B_uninit(void) {47  B b2;48  consume_B(b2); // arg-init-warning{{Passed-by-value struct argument contains uninitialized data (e.g., field: 'i') [core.CallAndMessage]}}49}50