mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Empty types (such as structs without stored properties) have a meaningless value for their address. To avoid crashes in the Thread Sanitizer runtime, rather than passing this unspecified value as the address of the inout access, skip emission of the runtime call. The bug allowing unspecified behavior here has been present since we first added TSan support for checking Swift access races -- but codegen changes on arm64 have recently made crashes due to the bug much more likely. rdar://problem/47686212
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
//===--- GenBuiltin.h - IR generation for builtin functions -----*- C++ -*-===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file provides the private interface to the emission of builtin
|
|
// functions in Swift.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_IRGEN_GENBUILTIN_H
|
|
#define SWIFT_IRGEN_GENBUILTIN_H
|
|
|
|
#include "swift/AST/SubstitutionMap.h"
|
|
#include "swift/Basic/LLVM.h"
|
|
|
|
namespace swift {
|
|
class BuiltinInfo;
|
|
class Identifier;
|
|
class SILType;
|
|
|
|
namespace irgen {
|
|
class Explosion;
|
|
class IRGenFunction;
|
|
|
|
/// Emit a call to a builtin function.
|
|
void emitBuiltinCall(IRGenFunction &IGF, const BuiltinInfo &builtin,
|
|
Identifier fnId, SILType resultType,
|
|
ArrayRef<SILType> argTypes,
|
|
Explosion &args, Explosion &result,
|
|
SubstitutionMap substitutions);
|
|
|
|
} // end namespace irgen
|
|
} // end namespace swift
|
|
|
|
#endif
|