1//===-- UnresolvedSet.h - Unresolved sets of declarations ------*- 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-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file defines the WeakInfo class, which is used to store 10// information about the target of a #pragma weak directive. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_CLANG_SEMA_WEAK_H 15#define LLVM_CLANG_SEMA_WEAK_H 16 17#include "clang/Basic/SourceLocation.h" 18#include "llvm/ADT/DenseMapInfo.h" 19 20namespace clang { 21 22class IdentifierInfo; 23 24/// Captures information about a \#pragma weak directive. 25class WeakInfo { 26 const IdentifierInfo *alias = nullptr; // alias (optional) 27 SourceLocation loc; // for diagnostics 28public: 29 WeakInfo() = default; 30 WeakInfo(const IdentifierInfo *Alias, SourceLocation Loc) 31 : alias(Alias), loc(Loc) {} 32 inline const IdentifierInfo *getAlias() const { return alias; } 33 inline SourceLocation getLocation() const { return loc; } 34 bool operator==(WeakInfo RHS) const = delete; 35 bool operator!=(WeakInfo RHS) const = delete; 36 37 struct DenseMapInfoByAliasOnly 38 : private llvm::DenseMapInfo<const IdentifierInfo *> { 39 static inline WeakInfo getEmptyKey() { 40 return WeakInfo(DenseMapInfo::getEmptyKey(), SourceLocation()); 41 } 42 static inline WeakInfo getTombstoneKey() { 43 return WeakInfo(DenseMapInfo::getTombstoneKey(), SourceLocation()); 44 } 45 static unsigned getHashValue(const WeakInfo &W) { 46 return DenseMapInfo::getHashValue(W.getAlias()); 47 } 48 static bool isEqual(const WeakInfo &LHS, const WeakInfo &RHS) { 49 return DenseMapInfo::isEqual(LHS.getAlias(), RHS.getAlias()); 50 } 51 }; 52}; 53 54} // end namespace clang 55 56#endif // LLVM_CLANG_SEMA_WEAK_H 57