Anna Zaks | 45246a7 | 2012-05-14 22:38:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -analyze -analyzer-checker=core -fblocks -verify %s |
| 2 | |
| 3 | // Do not crash on this templated code which uses a block. |
| 4 | typedef void (^my_block)(void); |
| 5 | static void useBlock(my_block block){} |
| 6 | template<class T> class MyClass; |
| 7 | typedef MyClass<float> Mf; |
| 8 | |
| 9 | template<class T> |
| 10 | class MyClass |
| 11 | { |
| 12 | public: |
| 13 | MyClass() {} |
| 14 | MyClass(T a); |
| 15 | void I(); |
| 16 | private: |
| 17 | static const T one; |
| 18 | }; |
| 19 | |
| 20 | template<class T> const T MyClass<T>::one = static_cast<T>(1); |
| 21 | template<class T> inline MyClass<T>::MyClass(T a){} |
| 22 | template<class T> void MyClass<T>::I() { |
| 23 | static MyClass<T>* mPtr = 0; |
| 24 | useBlock(^{ mPtr = new MyClass<T> (MyClass<T>::one); }); |
| 25 | }; |
| 26 | int main(){ |
| 27 | Mf m; |
| 28 | m.I(); |
| 29 | } |