xref: /aosp_15_r20/external/clang/test/Analysis/cxx11-crashes.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li PlotPoint 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 Li void 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 Li void 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 Li template<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 Li void 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 Li bool 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 Li void 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 Li void 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