14b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant//===---------------------- catch_function_02.cpp -------------------------===//
24b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant//
34b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant//                     The LLVM Compiler Infrastructure
44b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant//
54b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
64b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
74b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant//
84b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant//===----------------------------------------------------------------------===//
94b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant
104b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant// Can you have a catch clause of array type that catches anything?
114b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant
124b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant#include <cassert>
134b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant
144b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnantvoid f() {}
154b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant
164b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnantint main()
174b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant{
184b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    typedef void Function();
194b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    try
204b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    {
214b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant        throw f;     // converts to void (*)()
224b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant        assert(false);
234b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    }
244b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    catch (Function b)  // equivalent to void (*)()
254b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    {
264b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    }
274b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    catch (...)
284b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    {
294b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant        assert(false);
304b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant    }
314b3cb1cb82c0479bc9c675b79a2250ea4c85aae8Howard Hinnant}
32