15fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose// RUN: %clang --analyze -Xanalyzer -analyzer-output=text -fno-caret-diagnostics %s 2>&1 | FileCheck %s
25fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose
35fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rosevoid testA() {
45fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  int *p = 0;
55fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  *p = 1;
65fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose
75fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  // CHECK-LABEL: text-diagnostics.c:{{.*}}:6: warning: Dereference of null pointer (loaded from variable 'p')
85fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  // CHECK-NEXT: text-diagnostics.c:[[@LINE-4]]:3: note: 'p' initialized to a null pointer value
95fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  // CHECK-NEXT: text-diagnostics.c:[[@LINE-4]]:6: note: Dereference of null pointer (loaded from variable 'p')
105fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose}
115fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose
125fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rosevoid testB(int *q) {
135fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  if (q)
145fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose    return;
155fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  *q = 1;
165fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose
175fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  // CHECK-LABEL: text-diagnostics.c:{{.*}}:6: warning: Dereference of null pointer (loaded from variable 'q')
185fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  // CHECK-NEXT: text-diagnostics.c:[[@LINE-5]]:7: note: Assuming 'q' is null
195fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  // CHECK-NEXT: text-diagnostics.c:[[@LINE-6]]:3: note: Taking false branch
205fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose  // CHECK-NEXT: text-diagnostics.c:[[@LINE-5]]:6: note: Dereference of null pointer (loaded from variable 'q')
215fba5a789a238c29ef811a39a39be722443ec1b1Jordan Rose}
22