1*67e74705SXin Li // RUN: %clang_cc1 -analyze -analyzer-checker=core -std=c++11 -verify %s 2*67e74705SXin Li 3*67e74705SXin Li // radar://11485149, PR12871 4*67e74705SXin Li class PlotPoint { 5*67e74705SXin Li bool valid; 6*67e74705SXin Li }; 7*67e74705SXin Li limitedFit()8*67e74705SXin LiPlotPoint limitedFit () { 9*67e74705SXin Li PlotPoint fit0; 10*67e74705SXin Li fit0 = limitedFit (); 11*67e74705SXin Li return fit0; 12*67e74705SXin Li } 13*67e74705SXin Li 14*67e74705SXin Li // radar://11487541, NamespaceAlias 15*67e74705SXin Li namespace boost {namespace filesystem3 { 16*67e74705SXin Li class path { 17*67e74705SXin Li public: path()18*67e74705SXin Li path(){} 19*67e74705SXin Li }; 20*67e74705SXin Li 21*67e74705SXin Li }} 22*67e74705SXin Li namespace boost 23*67e74705SXin Li { 24*67e74705SXin Li namespace filesystem 25*67e74705SXin Li { 26*67e74705SXin Li using filesystem3::path; 27*67e74705SXin Li } 28*67e74705SXin Li } 29*67e74705SXin Li radar11487541()30*67e74705SXin Livoid radar11487541() { 31*67e74705SXin Li namespace fs = boost::filesystem; 32*67e74705SXin Li fs::path p; 33*67e74705SXin Li } 34*67e74705SXin Li 35*67e74705SXin Li // PR12873 radar://11499139 testFloatInitializer()36*67e74705SXin Livoid testFloatInitializer() { 37*67e74705SXin Li const float ysize={0.015}, xsize={0.01}; 38*67e74705SXin Li } 39*67e74705SXin Li 40*67e74705SXin Li 41*67e74705SXin Li // PR12874, radar://11487525 42*67e74705SXin Li template<class T> struct addr_impl_ref { 43*67e74705SXin Li T & v_; addr_impl_refaddr_impl_ref44*67e74705SXin Li inline addr_impl_ref( T & v ): v_( v ) { 45*67e74705SXin Li } operator T&addr_impl_ref46*67e74705SXin Li inline operator T& () const {return v_;} 47*67e74705SXin Li }; 48*67e74705SXin Li template<class T> struct addressof_impl { faddressof_impl49*67e74705SXin Li static inline T * f( T & v, long ) { 50*67e74705SXin Li return reinterpret_cast<T*>(&const_cast<char&>(reinterpret_cast<const volatile char &>(v))); 51*67e74705SXin Li } 52*67e74705SXin Li }; addressof(T & v)53*67e74705SXin Litemplate<class T> T * addressof( T & v ) { 54*67e74705SXin Li return addressof_impl<T>::f( addr_impl_ref<T>( v ), 0 ); 55*67e74705SXin Li } testRadar11487525_1()56*67e74705SXin Livoid testRadar11487525_1(){ 57*67e74705SXin Li bool s[25]; 58*67e74705SXin Li addressof(s); 59*67e74705SXin Li } 60*67e74705SXin Li 61*67e74705SXin Li // radar://11487525 Don't crash on CK_LValueBitCast. begin(double * it)62*67e74705SXin Libool begin(double *it) { 63*67e74705SXin Li typedef bool type[25]; 64*67e74705SXin Li bool *a = reinterpret_cast<type &>(*( reinterpret_cast<char *>( it ))); 65*67e74705SXin Li return *a; 66*67e74705SXin Li } 67*67e74705SXin Li 68*67e74705SXin Li // radar://14164698 Don't crash on "assuming" a ComoundVal. 69*67e74705SXin Li class JSONWireProtocolInputStream { 70*67e74705SXin Li public: 71*67e74705SXin Li virtual ~JSONWireProtocolInputStream(); 72*67e74705SXin Li }; 73*67e74705SXin Li class JSONWireProtocolReader { 74*67e74705SXin Li public: JSONWireProtocolReader(JSONWireProtocolInputStream & istream)75*67e74705SXin Li JSONWireProtocolReader(JSONWireProtocolInputStream& istream) 76*67e74705SXin Li : _istream{istream} {} // On evaluating a bind here, 77*67e74705SXin Li // the dereference checker issues an assume on a CompoundVal. 78*67e74705SXin Li ~JSONWireProtocolReader(); 79*67e74705SXin Li private: 80*67e74705SXin Li JSONWireProtocolInputStream& _istream; 81*67e74705SXin Li }; 82*67e74705SXin Li class SocketWireProtocolStream : public JSONWireProtocolInputStream { 83*67e74705SXin Li }; test()84*67e74705SXin Livoid test() { 85*67e74705SXin Li SocketWireProtocolStream stream{}; 86*67e74705SXin Li JSONWireProtocolReader reader{stream}; 87*67e74705SXin Li } 88*67e74705SXin Li 89*67e74705SXin Li // This crashed because the analyzer did not understand AttributedStmts. fallthrough()90*67e74705SXin Livoid fallthrough() { 91*67e74705SXin Li switch (1) { 92*67e74705SXin Li case 1: 93*67e74705SXin Li [[clang::fallthrough]]; // expected-error {{does not directly precede}} 94*67e74705SXin Li } 95*67e74705SXin Li } 96