llvm-project/clang/test/Analysis/cxx11-crashes.cpp
Pavel Labath 868bebf844 Teach static analyzer about AttributedStmts
Summary:
Static analyzer used to abort when encountering AttributedStmts, because it
asserted that the statements should not appear in the CFG. This is however not
the case, since at least the clang::fallthrough annotation makes it through.

This commit simply makes the analyzer ignore the statement attributes.

CC: cfe-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D1030

llvm-svn: 185417
2013-07-02 09:38:48 +00:00

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]];
}
}