build/clang-plugin/CustomAttributes.h
author Nathan Froyd <froydnj@mozilla.com>
Wed, 03 Apr 2019 00:06:04 +0000
changeset 467750 1b9e5f4b0589a636233affb84666a469a4cc4ef5
parent 437168 e3118f787e336e908dd7a8f42d71211cb8738bfe
permissions -rw-r--r--
Bug 1537643 - update cc crate; r=glandium This update from the official sources brings in the changes that we were using glandium's fork for, as well as changes enabling us to tweak more settings on Windows. Differential Revision: https://phabricator.services.mozilla.com/D25888

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef CustomAttributes_h__
#define CustomAttributes_h__

#include "clang/AST/DeclBase.h"
#include "llvm/ADT/StringRef.h"

enum CustomAttributes {
#define ATTR(a) a,
#include "CustomAttributes.inc"
#undef ATTR
};

struct CustomAttributesSet {
#define ATTR(a) bool has_ ## a: 1;
#include "CustomAttributes.inc"
#undef ATTR
};

template<CustomAttributes A>
bool hasCustomAttribute(const clang::Decl* D) {
  return false;
}

extern CustomAttributesSet GetAttributes(const clang::Decl* D);

#define ATTR(name) \
  template<> \
  inline bool hasCustomAttribute<name>(const clang::Decl* D) { \
    return GetAttributes(D).has_ ## name; \
  }
#include "CustomAttributes.inc"
#undef ATTR

extern bool hasCustomAttribute(const clang::Decl* D, CustomAttributes A);

#endif /* CustomAttributes_h__ */