diff options
Diffstat (limited to 'include/clang/CodeGen/CodeGenABITypes.h')
-rw-r--r-- | include/clang/CodeGen/CodeGenABITypes.h | 64 |
1 files changed, 58 insertions, 6 deletions
diff --git a/include/clang/CodeGen/CodeGenABITypes.h b/include/clang/CodeGen/CodeGenABITypes.h index 53619fa8ef..31f0cea572 100644 --- a/include/clang/CodeGen/CodeGenABITypes.h +++ b/include/clang/CodeGen/CodeGenABITypes.h @@ -1,9 +1,8 @@ //==---- CodeGenABITypes.h - Convert Clang types to LLVM types for ABI -----==// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // @@ -31,6 +30,7 @@ namespace llvm { class DataLayout; class Module; + class Function; class FunctionType; class Type; } @@ -55,8 +55,7 @@ const CGFunctionInfo &arrangeObjCMessageSendSignature(CodeGenModule &CGM, QualType receiverType); const CGFunctionInfo &arrangeFreeFunctionType(CodeGenModule &CGM, - CanQual<FunctionProtoType> Ty, - const FunctionDecl *FD); + CanQual<FunctionProtoType> Ty); const CGFunctionInfo &arrangeFreeFunctionType(CodeGenModule &CGM, CanQual<FunctionNoProtoType> Ty); @@ -85,6 +84,59 @@ llvm::Type *convertTypeForMemory(CodeGenModule &CGM, QualType T); unsigned getLLVMFieldNumber(CodeGenModule &CGM, const RecordDecl *RD, const FieldDecl *FD); +/// Returns the default constructor for a C struct with non-trivially copyable +/// fields, generating it if necessary. The returned function uses the `cdecl` +/// calling convention, returns void, and takes a single argument that is a +/// pointer to the address of the struct. +llvm::Function *getNonTrivialCStructDefaultConstructor(CodeGenModule &GCM, + CharUnits DstAlignment, + bool IsVolatile, + QualType QT); + +/// Returns the copy constructor for a C struct with non-trivially copyable +/// fields, generating it if necessary. The returned function uses the `cdecl` +/// calling convention, returns void, and takes two arguments: pointers to the +/// addresses of the destination and source structs, respectively. +llvm::Function *getNonTrivialCStructCopyConstructor(CodeGenModule &CGM, + CharUnits DstAlignment, + CharUnits SrcAlignment, + bool IsVolatile, + QualType QT); + +/// Returns the move constructor for a C struct with non-trivially copyable +/// fields, generating it if necessary. The returned function uses the `cdecl` +/// calling convention, returns void, and takes two arguments: pointers to the +/// addresses of the destination and source structs, respectively. +llvm::Function *getNonTrivialCStructMoveConstructor(CodeGenModule &CGM, + CharUnits DstAlignment, + CharUnits SrcAlignment, + bool IsVolatile, + QualType QT); + +/// Returns the copy assignment operator for a C struct with non-trivially +/// copyable fields, generating it if necessary. The returned function uses the +/// `cdecl` calling convention, returns void, and takes two arguments: pointers +/// to the addresses of the destination and source structs, respectively. +llvm::Function *getNonTrivialCStructCopyAssignmentOperator( + CodeGenModule &CGM, CharUnits DstAlignment, CharUnits SrcAlignment, + bool IsVolatile, QualType QT); + +/// Return the move assignment operator for a C struct with non-trivially +/// copyable fields, generating it if necessary. The returned function uses the +/// `cdecl` calling convention, returns void, and takes two arguments: pointers +/// to the addresses of the destination and source structs, respectively. +llvm::Function *getNonTrivialCStructMoveAssignmentOperator( + CodeGenModule &CGM, CharUnits DstAlignment, CharUnits SrcAlignment, + bool IsVolatile, QualType QT); + +/// Returns the destructor for a C struct with non-trivially copyable fields, +/// generating it if necessary. The returned function uses the `cdecl` calling +/// convention, returns void, and takes a single argument that is a pointer to +/// the address of the struct. +llvm::Function *getNonTrivialCStructDestructor(CodeGenModule &CGM, + CharUnits DstAlignment, + bool IsVolatile, QualType QT); + } // end namespace CodeGen } // end namespace clang |