165d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow//===----------------------------------------------------------------------===// 265d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow// 365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow// The LLVM Compiler Infrastructure 465d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow// 565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open 665d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow// Source Licenses. See LICENSE.TXT for details. 765d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow// 865d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow//===----------------------------------------------------------------------===// 965d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 1065d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow// <list> 1165d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 1265d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow// Operations on "NULL" iterators 1365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 145e57142c5902c3f73a6fdcb8cab55e88ffb43a56Howard Hinnant#if _LIBCPP_DEBUG >= 1 1565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 1665d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#define _LIBCPP_ASSERT(x, m) do { if (!x) throw 1; } while(0) 1765d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 1865d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#include <list> 1965d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#include <cassert> 2065d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#include <iterator> 2165d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#include <exception> 2265d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#include <cstdlib> 2365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 2465d2e6a39202efb1db3826224d7050393f79acf0Marshall Clowstruct S { int val; }; 2565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 2665d2e6a39202efb1db3826224d7050393f79acf0Marshall Clowint main() 2765d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow{ 2865d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#if _LIBCPP_STD_VER > 11 2965d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow { 30ab61b2c9f1058302d13e59cadf360a5afce5eaa9Howard Hinnant unsigned lib_asserts; 3165d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 3265d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow typedef S T; 3365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow typedef std::list<T> C; 3465d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow C::iterator i{}; 3565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow C::const_iterator ci{}; 3665d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 3765d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow lib_asserts = 0; 3865d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { ++i; } catch (int) { ++lib_asserts; } 3965d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { i++; } catch (int) { ++lib_asserts; } 4065d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { ++ci; } catch (int) { ++lib_asserts; } 4165d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { ci++; } catch (int) { ++lib_asserts; } 4265d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow assert(lib_asserts == 4); 4365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 4465d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow lib_asserts = 0; 4565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { --i; } catch (int) { ++lib_asserts; } 4665d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { i--; } catch (int) { ++lib_asserts; } 4765d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { --ci; } catch (int) { ++lib_asserts; } 4865d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { ci--; } catch (int) { ++lib_asserts; } 4965d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow assert(lib_asserts == 4); 5065d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 5165d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow lib_asserts = 0; 5265d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { *i; } catch (int) { ++lib_asserts; } 5365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { *ci; } catch (int) { ++lib_asserts; } 5465d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { (void) i->val; } catch (int) { ++lib_asserts; } 5565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow try { (void) ci->val; } catch (int) { ++lib_asserts; } 5665d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow assert(lib_asserts == 4); 5765d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow } 5865d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#endif 5965d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow} 6065d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 6165d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#else 6265d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 6365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clowint main() 6465d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow{ 6565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow} 6665d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 6765d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#endif 68