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