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