system-header-simulator-cxx.h revision 8b625a3f7764959d0a2ac3cd860ce1e168e0fc9b
18c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// Like the compiler, the static analyzer treats some functions differently if 28c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// they come from a system header -- for example, it is assumed that system 38c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// functions do not arbitrarily free() their parameters, and that some bugs 48c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// found in system headers cannot be fixed by the user and should be 58c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// suppressed. 681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#pragma clang system_header 781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rosenamespace std { 981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose template <class T1, class T2> 1081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose struct pair { 1181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T1 first; 1281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T2 second; 1381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 1481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose pair() : first(), second() {} 1581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose pair(const T1 &a, const T2 &b) : first(a), second(b) {} 1681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 1781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose template<class U1, class U2> 1881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose pair(const pair<U1, U2> &other) : first(other.first), second(other.second) {} 1981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose }; 2081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 2181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose typedef __typeof__(sizeof(int)) size_t; 2281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 2381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose template<typename T> 2481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose class vector { 2581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T *_start; 2681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T *_finish; 2781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T *_end_of_storage; 2881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose public: 2981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose vector() : _start(0), _finish(0), _end_of_storage(0) {} 3081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose ~vector(); 3181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 3281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose size_t size() const { 3381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose return size_t(_finish - _start); 3481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose } 3581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 3681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose void push_back(); 3781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T pop_back(); 3881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 3981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T &operator[](size_t n) { 4081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose return _start[n]; 4181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose } 4281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 4381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose const T &operator[](size_t n) const { 4481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose return _start[n]; 4581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose } 4681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 4781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T *begin() { return _start; } 4881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose const T *begin() const { return _start; } 4981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 5081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose T *end() { return _finish; } 5181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose const T *end() const { return _finish; } 5281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose }; 5381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose 5481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose class exception { 5581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose public: 5681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose exception() throw(); 5781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose virtual ~exception() throw(); 5881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose virtual const char *what() const throw() { 5981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose return 0; 6081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose } 6181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose }; 622de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev 632de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev class bad_alloc : public exception { 642de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev public: 652de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev bad_alloc() throw(); 662de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev bad_alloc(const bad_alloc&) throw(); 672de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev bad_alloc& operator=(const bad_alloc&) throw(); 682de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev virtual const char* what() const throw() { 692de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev return 0; 702de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev } 712de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev }; 722de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev 732de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev struct nothrow_t {}; 742de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev 752de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev extern const nothrow_t nothrow; 76a12643622ad3b85972dfdd80fe9006a3e8d8fb80Jordan Rose 77a12643622ad3b85972dfdd80fe9006a3e8d8fb80Jordan Rose template<class InputIter, class OutputIter> 78a12643622ad3b85972dfdd80fe9006a3e8d8fb80Jordan Rose OutputIter copy(InputIter II, InputIter IE, OutputIter OI) { 79a12643622ad3b85972dfdd80fe9006a3e8d8fb80Jordan Rose while (II != IE) 80a12643622ad3b85972dfdd80fe9006a3e8d8fb80Jordan Rose *OI++ = *II++; 81a12643622ad3b85972dfdd80fe9006a3e8d8fb80Jordan Rose return OI; 82a12643622ad3b85972dfdd80fe9006a3e8d8fb80Jordan Rose } 83776d3bb65c90278b9c65544b235d2ac40aea1d6eJordan Rose 84776d3bb65c90278b9c65544b235d2ac40aea1d6eJordan Rose struct input_iterator_tag { }; 85776d3bb65c90278b9c65544b235d2ac40aea1d6eJordan Rose struct output_iterator_tag { }; 86776d3bb65c90278b9c65544b235d2ac40aea1d6eJordan Rose struct forward_iterator_tag : public input_iterator_tag { }; 87776d3bb65c90278b9c65544b235d2ac40aea1d6eJordan Rose struct bidirectional_iterator_tag : public forward_iterator_tag { }; 88776d3bb65c90278b9c65544b235d2ac40aea1d6eJordan Rose struct random_access_iterator_tag : public bidirectional_iterator_tag { }; 898b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks 908b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks template <class _Tp> 918b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks class allocator {}; 928b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks 938b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks template <class _Tp, class _Alloc> 948b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks class __list_imp 958b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks {}; 968b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks 978b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks template <class _Tp, class _Alloc = allocator<_Tp> > 988b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks class list 998b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks : private __list_imp<_Tp, _Alloc> 1008b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks { 1018b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks public: 1028b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks void pop_front(); 1038b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks bool empty() const; 1048b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks }; 1058b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks 10681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose} 1072de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev 1082de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid* operator new(std::size_t, const std::nothrow_t&) throw(); 1092de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid* operator new[](std::size_t, const std::nothrow_t&) throw(); 1102de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid operator delete(void*, const std::nothrow_t&) throw(); 1112de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid operator delete[](void*, const std::nothrow_t&) throw(); 1122de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev 1132de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid* operator new (std::size_t size, void* ptr) throw() { return ptr; }; 1142de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid* operator new[] (std::size_t size, void* ptr) throw() { return ptr; }; 1152de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid operator delete (void* ptr, void*) throw() {}; 1162de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid operator delete[] (void* ptr, void*) throw() {}; 117