1719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks// RUN: %clang_cc1 -analyze -analyzer-checker=core -std=c++11 -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 3719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks 4719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks// radar://11485149, PR12871 5719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaksclass PlotPoint { 6719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks bool valid; 7719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks}; 8719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks 9719b429e3ed660cfd9cce88397b29c695a25fa50Anna ZaksPlotPoint limitedFit () { 10719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks PlotPoint fit0; 11719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks fit0 = limitedFit (); 12719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks return fit0; 13719b429e3ed660cfd9cce88397b29c695a25fa50Anna Zaks} 14671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks 15671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks// radar://11487541, NamespaceAlias 16671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaksnamespace boost {namespace filesystem3 { 17671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaksclass path { 18671e3bc1a16562902c0e6efc157b519977c299a8Anna Zakspublic: 19671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks path(){} 20671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks}; 21671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks 22671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks}} 23671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaksnamespace boost 24671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks{ 25671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks namespace filesystem 26671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks { 27671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks using filesystem3::path; 28671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks } 29671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks} 30671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks 31671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaksvoid radar11487541() { 32671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks namespace fs = boost::filesystem; 33671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks fs::path p; 34671e3bc1a16562902c0e6efc157b519977c299a8Anna Zaks} 3513dd47a0c01f8b4a6b3fbe379218f7ba8e692d0fAnna Zaks 3698553e894111627ac0bd4a6972431f09ea37f2c1Anna Zaks// PR12873 radar://11499139 3713dd47a0c01f8b4a6b3fbe379218f7ba8e692d0fAnna Zaksvoid testFloatInitializer() { 3813dd47a0c01f8b4a6b3fbe379218f7ba8e692d0fAnna Zaks const float ysize={0.015}, xsize={0.01}; 3913dd47a0c01f8b4a6b3fbe379218f7ba8e692d0fAnna Zaks} 4017eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks 4117eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks 4217eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks// PR12874, radar://11487525 4317eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zakstemplate<class T> struct addr_impl_ref { 4417eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks T & v_; 4517eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks inline addr_impl_ref( T & v ): v_( v ) { 4617eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks } 4717eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks inline operator T& () const {return v_;} 4817eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks}; 4917eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zakstemplate<class T> struct addressof_impl { 5017eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks static inline T * f( T & v, long ) { 5117eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks return reinterpret_cast<T*>(&const_cast<char&>(reinterpret_cast<const volatile char &>(v))); 5217eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks } 5317eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks}; 5417eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zakstemplate<class T> T * addressof( T & v ) { 5517eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks return addressof_impl<T>::f( addr_impl_ref<T>( v ), 0 ); 5617eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks} 5717eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaksvoid testRadar11487525_1(){ 5817eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks bool s[25]; 5917eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks addressof(s); 6017eb65f1bfcc33d2a9ecefe32368cb374155dbdcAnna Zaks} 61e41458c37923c77fdae39676b3b4bce9f6c80defAnna Zaks 62e41458c37923c77fdae39676b3b4bce9f6c80defAnna Zaks// radar://11487525 Don't crash on CK_LValueBitCast. 63e41458c37923c77fdae39676b3b4bce9f6c80defAnna Zaksbool begin(double *it) { 64e41458c37923c77fdae39676b3b4bce9f6c80defAnna Zaks typedef bool type[25]; 65e41458c37923c77fdae39676b3b4bce9f6c80defAnna Zaks bool *a = reinterpret_cast<type &>(*( reinterpret_cast<char *>( it ))); 66e41458c37923c77fdae39676b3b4bce9f6c80defAnna Zaks return *a; 67e41458c37923c77fdae39676b3b4bce9f6c80defAnna Zaks} 68bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks 69bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks// radar://14164698 Don't crash on "assuming" a ComoundVal. 70bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaksclass JSONWireProtocolInputStream { 71bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zakspublic: 72bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks virtual ~JSONWireProtocolInputStream(); 73bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks}; 74bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaksclass JSONWireProtocolReader { 75bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zakspublic: 76bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks JSONWireProtocolReader(JSONWireProtocolInputStream& istream) 77bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks : _istream{istream} {} // On evaluating a bind here, 78bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks // the dereference checker issues an assume on a CompoundVal. 79bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks~JSONWireProtocolReader(); 80bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaksprivate: 81bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna ZaksJSONWireProtocolInputStream& _istream; 82bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks}; 83bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaksclass SocketWireProtocolStream : public JSONWireProtocolInputStream { 84bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks}; 85bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaksvoid test() { 86bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks SocketWireProtocolStream stream{}; 87bd34520a8c4fe689cca8afaa8114e50bd6bad8f8Anna Zaks JSONWireProtocolReader reader{stream}; 88ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labath} 89ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labath 90ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labath// This crashed because the analyzer did not understand AttributedStmts. 91ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labathvoid fallthrough() { 92ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labath switch (1) { 93ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labath case 1: 94ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labath [[clang::fallthrough]]; 95ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labath } 96ed2e2de580f840385f25a188ed48d2a14948af76Pavel Labath} 97