在Clang Checker中使用字符串作为Map键

时间:2019-04-25 20:03:04

标签: clang abstract-syntax-tree clang-static-analyzer

我正在编写一个Clang Checker,其中ProgramMap State的键必须是std :: string。

到目前为止,我看到的大多数示例都使用SymbolRef作为键。

这是我在做什么。

REGISTER_MAP_WITH_PROGRAMSTATE(TrackVar, std::string, RefState)

我的RefState在哪里

struct RefState {
  private:
    enum Kind { Synchronized, Unsynchronized } K;
    RefState(Kind InK) : K(InK) { }

  public:
    bool isSynchronized() const { return K == Synchronized; }
    bool isUnSynchronized() const { return K == Unsynchronized; }

    static RefState getSynchronized() { return RefState(Synchronized); }
    static RefState getUnsynchronized() { return RefState(Unsynchronized); }

    bool operator==(const RefState &X) const {
      return K == X.K;
    }
    void Profile(llvm::FoldingSetNodeID &ID) const {
      ID.Add(K);
    }
};

但是在构建期间出现错误。

llvm/ADT/FoldingSet.h:223:5: error: 'const class std::basic_string<char>' has no member named 'Profile'.

所以我想知道字符串是否支持作为键?如果没有,我应该使用普通的std :: map吗?

感谢任何帮助。

0 个答案:

没有答案