52 lines · c
1//===--- SanitizerMetadata.h - Metadata for sanitizers ----------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Class which emits metadata consumed by sanitizer instrumentation passes.10//11//===----------------------------------------------------------------------===//12#ifndef LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H13#define LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H14 15#include "clang/AST/Type.h"16#include "clang/Basic/LLVM.h"17#include "clang/Basic/Sanitizers.h"18#include "clang/Basic/SourceLocation.h"19 20namespace llvm {21class GlobalVariable;22class Instruction;23} // namespace llvm24 25namespace clang {26class VarDecl;27 28namespace CodeGen {29 30class CodeGenModule;31 32class SanitizerMetadata {33 SanitizerMetadata(const SanitizerMetadata &) = delete;34 void operator=(const SanitizerMetadata &) = delete;35 36 CodeGenModule &CGM;37 38public:39 SanitizerMetadata(CodeGenModule &CGM);40 void reportGlobal(llvm::GlobalVariable *GV, const VarDecl &D,41 bool IsDynInit = false);42 void reportGlobal(llvm::GlobalVariable *GV, SourceLocation Loc,43 StringRef Name, QualType Ty = {},44 SanitizerMask NoSanitizeAttrMask = {},45 bool IsDynInit = false);46 void disableSanitizerForGlobal(llvm::GlobalVariable *GV);47};48} // end namespace CodeGen49} // end namespace clang50 51#endif52