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