111394Sswallace//===--- SanitizerMetadata.h - Metadata for sanitizers ----------*- C++ -*-===//
2139799Simp//
311394Sswallace//                     The LLVM Compiler Infrastructure
4139799Simp//
511394Sswallace// This file is distributed under the University of Illinois Open Source
611394Sswallace// License. See LICENSE.TXT for details.
711394Sswallace//
811394Sswallace//===----------------------------------------------------------------------===//
911394Sswallace//
1011394Sswallace// Class which emits metadata consumed by sanitizer instrumentation passes.
1111394Sswallace//
1211394Sswallace//===----------------------------------------------------------------------===//
1311394Sswallace#ifndef LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H
1411394Sswallace#define LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H
1511394Sswallace
1611394Sswallace#include "clang/AST/Type.h"
1711394Sswallace#include "clang/Basic/LLVM.h"
1811394Sswallace#include "clang/Basic/SourceLocation.h"
1911394Sswallace
2011394Sswallacenamespace llvm {
2111394Sswallaceclass GlobalVariable;
2211394Sswallaceclass Instruction;
2311394Sswallaceclass MDNode;
2411394Sswallace}
2511394Sswallace
2611394Sswallacenamespace clang {
2711394Sswallaceclass VarDecl;
2811394Sswallace
2911394Sswallacenamespace CodeGen {
3011394Sswallace
3111394Sswallaceclass CodeGenModule;
3211394Sswallace
3311394Sswallaceclass SanitizerMetadata {
3411394Sswallace  SanitizerMetadata(const SanitizerMetadata &) = delete;
3511394Sswallace  void operator=(const SanitizerMetadata &) = delete;
3611394Sswallace
3711394Sswallace  CodeGenModule &CGM;
3811394Sswallacepublic:
3911394Sswallace  SanitizerMetadata(CodeGenModule &CGM);
4011394Sswallace  void reportGlobalToASan(llvm::GlobalVariable *GV, const VarDecl &D,
4111394Sswallace                          bool IsDynInit = false);
4211394Sswallace  void reportGlobalToASan(llvm::GlobalVariable *GV, SourceLocation Loc,
43                          StringRef Name, QualType Ty, bool IsDynInit = false,
44                          bool IsBlacklisted = false);
45  void disableSanitizerForGlobal(llvm::GlobalVariable *GV);
46  void disableSanitizerForInstruction(llvm::Instruction *I);
47private:
48  llvm::MDNode *getLocationMetadata(SourceLocation Loc);
49};
50}  // end namespace CodeGen
51}  // end namespace clang
52
53#endif
54