mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
These changes fix minor issues that cause compilation errors with our C++ toolchain's stricter default settings: * `Exception.cpp`: The return type of `__cxa_begin_catch` should be `void *`, not `void` (see https://libcxxabi.llvm.org/spec.html). * `Leaks.mm`: `''` is not a valid C char literal; use `'\0'` instead.
59 lines
1.9 KiB
C++
59 lines
1.9 KiB
C++
//===--- Exception.cpp - Exception support --------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Swift doesn't support exception handlers, but might call code that uses
|
|
// exceptions, and when they leak out into Swift code, we want to trap them.
|
|
//
|
|
// To that end, we have our own exception personality routine, which we use
|
|
// to trap exceptions and terminate.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#if defined(__ELF__) || defined(__APPLE__)
|
|
|
|
#include <exception>
|
|
|
|
#include <cstdio>
|
|
|
|
#include <unwind.h>
|
|
|
|
#include "swift/Runtime/Debug.h"
|
|
#include "swift/Runtime/Exception.h"
|
|
|
|
using namespace swift;
|
|
|
|
extern "C" void *__cxa_begin_catch(void *);
|
|
|
|
SWIFT_RUNTIME_STDLIB_API _Unwind_Reason_Code
|
|
_swift_exceptionPersonality(int version,
|
|
_Unwind_Action actions,
|
|
uint64_t exceptionClass,
|
|
struct _Unwind_Exception *exceptionObject,
|
|
struct _Unwind_Context *context)
|
|
{
|
|
#if __cpp_exceptions
|
|
// Handle exceptions by catching them and calling std::terminate().
|
|
// This, in turn, will trigger the unhandled exception routine in the
|
|
// C++ runtime.
|
|
__cxa_begin_catch(exceptionObject);
|
|
std::terminate();
|
|
#else
|
|
fatalError(0,
|
|
"C++ exception handling detected but the Swift runtime was "
|
|
"compiled with exceptions disabled\n");
|
|
#endif
|
|
|
|
return _URC_FATAL_PHASE1_ERROR;
|
|
}
|
|
|
|
#endif /* defined(__ELF__) || defined(__APPLE__) */
|