forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -analyze -analyzer-checker=core -std=c++11 -verify %s
 | |
| // expected-no-diagnostics
 | |
| 
 | |
| // radar://11485149, PR12871
 | |
| class PlotPoint {
 | |
|   bool valid;
 | |
| };
 | |
| 
 | |
| PlotPoint limitedFit () {
 | |
|   PlotPoint fit0;
 | |
|   fit0 = limitedFit ();
 | |
|   return fit0;
 | |
| }
 | |
| 
 | |
| // radar://11487541, NamespaceAlias
 | |
| namespace boost {namespace filesystem3 {
 | |
| class path {
 | |
| public:
 | |
|  path(){}
 | |
| };
 | |
| 
 | |
| }}
 | |
| namespace boost
 | |
| {
 | |
|   namespace filesystem
 | |
|   {
 | |
|     using filesystem3::path;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void radar11487541() {
 | |
|   namespace fs = boost::filesystem;
 | |
|   fs::path p;
 | |
| }
 | |
| 
 | |
| // PR12873 radar://11499139
 | |
| void testFloatInitializer() {
 | |
|   const float ysize={0.015}, xsize={0.01};
 | |
| }
 | |
| 
 | |
| 
 | |
| // PR12874, radar://11487525
 | |
| template<class T> struct addr_impl_ref {
 | |
|   T & v_;
 | |
|   inline addr_impl_ref( T & v ): v_( v ) {
 | |
|   }
 | |
|   inline operator T& () const {return v_;}
 | |
| };
 | |
| template<class T> struct addressof_impl {
 | |
|   static inline T * f( T & v, long )     {
 | |
|     return reinterpret_cast<T*>(&const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
 | |
|   }
 | |
| };
 | |
| template<class T> T * addressof( T & v ) {
 | |
|   return addressof_impl<T>::f( addr_impl_ref<T>( v ), 0 );
 | |
| }
 | |
| void testRadar11487525_1(){
 | |
|   bool s[25];
 | |
|   addressof(s);
 | |
| }
 | |
| 
 | |
| // radar://11487525 Don't crash on CK_LValueBitCast.
 | |
| bool begin(double *it) {
 | |
|   typedef bool type[25];
 | |
|   bool *a = reinterpret_cast<type &>(*( reinterpret_cast<char *>( it )));
 | |
|   return *a;
 | |
| }
 | |
| 
 | |
| // radar://14164698 Don't crash on "assuming" a ComoundVal.
 | |
| class JSONWireProtocolInputStream {
 | |
| public:
 | |
|   virtual ~JSONWireProtocolInputStream();
 | |
| };
 | |
| class JSONWireProtocolReader {
 | |
| public:
 | |
|   JSONWireProtocolReader(JSONWireProtocolInputStream& istream)
 | |
|   : _istream{istream} {} // On evaluating a bind here,
 | |
|                          // the dereference checker issues an assume on a CompoundVal.
 | |
| ~JSONWireProtocolReader();
 | |
| private:
 | |
| JSONWireProtocolInputStream& _istream;
 | |
| };
 | |
| class SocketWireProtocolStream : public JSONWireProtocolInputStream {
 | |
| };
 | |
| void test() {
 | |
|   SocketWireProtocolStream stream{};
 | |
|   JSONWireProtocolReader reader{stream};
 | |
| }
 | |
| 
 | |
| // This crashed because the analyzer did not understand AttributedStmts.
 | |
| void fallthrough() {
 | |
|   switch (1) {
 | |
|     case 1:
 | |
|       [[clang::fallthrough]];
 | |
|   }
 | |
| }
 |