181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,debug.ExprInspection -analyzer-ipa=dynamic -verify %s 281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,debug.ExprInspection -analyzer-ipa=dynamic -analyzer-config c++-stdlib-inlining=true -DINLINE=1 -verify %s 381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#include "../system-header-simulator-cxx.h" 581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rosevoid clang_analyzer_eval(bool); 781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rosevoid testVector(std::vector<int> &nums) { 981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose if (nums.begin()) return; 1081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose if (nums.end()) return; 1181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 1281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose clang_analyzer_eval(nums.size() == 0); 1381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#if INLINE 1481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose // expected-warning@-2 {{TRUE}} 1581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#else 1681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose // expected-warning@-4 {{UNKNOWN}} 1781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#endif 1881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose} 1981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 2081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rosevoid testException(std::exception e) { 2181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose // Notice that the argument is NOT passed by reference, so we can devirtualize. 2281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose const char *x = e.what(); 2381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose clang_analyzer_eval(x == 0); 2481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#if INLINE 2581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose // expected-warning@-2 {{TRUE}} 2681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#else 2781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose // expected-warning@-4 {{UNKNOWN}} 2881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#endif 2981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose} 30