Summary:
The -fxray-always-instrument= and -fxray-never-instrument= flags take
filenames that are used to imbue the XRay instrumentation attributes
using a whitelist mechanism (similar to the sanitizer special cases
list). We use the same syntax and semantics as the sanitizer blacklists
files in the implementation.
As implemented, we respect the attributes that are already defined in
the source file (i.e. those that have the
[[clang::xray_{always,never}_instrument]] attributes) before applying
the always/never instrument lists.
Reviewers: rsmith, chandlerc
Subscribers: jfb, mgorny, cfe-commits
Differential Revision: https://reviews.llvm.org/D30388
llvm-svn: 299041
49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
//===--- LangOptions.cpp - C Language Family Language Options ---*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the LangOptions class.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#include "clang/Basic/LangOptions.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
|
|
using namespace clang;
|
|
|
|
LangOptions::LangOptions()
|
|
: IsHeaderFile(false) {
|
|
#define LANGOPT(Name, Bits, Default, Description) Name = Default;
|
|
#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) set##Name(Default);
|
|
#include "clang/Basic/LangOptions.def"
|
|
}
|
|
|
|
void LangOptions::resetNonModularOptions() {
|
|
#define LANGOPT(Name, Bits, Default, Description)
|
|
#define BENIGN_LANGOPT(Name, Bits, Default, Description) Name = Default;
|
|
#define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
|
|
Name = Default;
|
|
#include "clang/Basic/LangOptions.def"
|
|
|
|
// FIXME: This should not be reset; modules can be different with different
|
|
// sanitizer options (this affects __has_feature(address_sanitizer) etc).
|
|
Sanitize.clear();
|
|
SanitizerBlacklistFiles.clear();
|
|
XRayAlwaysInstrumentFiles.clear();
|
|
XRayNeverInstrumentFiles.clear();
|
|
|
|
CurrentModule.clear();
|
|
IsHeaderFile = false;
|
|
}
|
|
|
|
bool LangOptions::isNoBuiltinFunc(StringRef FuncName) const {
|
|
for (unsigned i = 0, e = NoBuiltinFuncs.size(); i != e; ++i)
|
|
if (FuncName.equals(NoBuiltinFuncs[i]))
|
|
return true;
|
|
return false;
|
|
}
|