// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s // rdar://problem/56586853 // expected-no-diagnostics struct Data { int x; Data *data; }; int compare(Data &a, Data &b) { Data *aData = a.data; Data *bData = b.data; // Covers the cases where both pointers are null as well as both pointing to the same buffer. if (aData == bData) return 0; if (aData && !bData) return 1; if (!aData && bData) return -1; return compare(*aData, *bData); // no-warning }