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