16cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier//===----------------------------------------------------------------------===// 26cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// 36cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// The LLVM Compiler Infrastructure 46cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// 56cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open 66cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// Source Licenses. See LICENSE.TXT for details. 76cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// 86cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier//===----------------------------------------------------------------------===// 96cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier 106cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// UNSUPPORTED: libcpp-no-exceptions 116cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// MODULES_DEFINES: _LIBCPP_DEBUG=1 126cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// MODULES_DEFINES: _LIBCPP_DEBUG_USE_EXCEPTIONS 136cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier 146cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// Can't test the system lib because this test enables debug mode 156cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// UNSUPPORTED: with_system_cxx_lib 166cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier 176cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier// test array<T, 0>::front() throws a debug exception. 186cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier 196cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier#define _LIBCPP_DEBUG 1 206cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier#define _LIBCPP_DEBUG_USE_EXCEPTIONS 216cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier#include <array> 226cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier 236cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiseliertemplate <class Array> 246cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselierinline bool CheckDebugThrows(Array& Arr) { 256cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier try { 266cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier Arr.front(); 276cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier } catch (std::__libcpp_debug_exception const&) { 286cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier return true; 296cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier } 306cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier return false; 316cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier} 326cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier 336cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselierint main() 346cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier{ 356cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier { 366cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier typedef std::array<int, 0> C; 376cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier C c = {}; 386cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier C const& cc = c; 396cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier assert(CheckDebugThrows(c)); 406cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier assert(CheckDebugThrows(cc)); 416cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier } 426cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier { 436cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier typedef std::array<const int, 0> C; 446cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier C c = {{}}; 456cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier C const& cc = c; 466cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier assert(CheckDebugThrows(c)); 476cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier assert(CheckDebugThrows(cc)); 486cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier } 496cb35ede819b18376cc2e08d7bd83e86d4874755Eric Fiselier} 50