Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.  
  20. namespace clang {
  21.  
  22. class IdentifierInfo;
  23.  
  24. /// Captures information about a \#pragma weak directive.
  25. class WeakInfo {
  26.   const IdentifierInfo *alias = nullptr; // alias (optional)
  27.   SourceLocation loc;                    // for diagnostics
  28. public:
  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.