Использовать строку в качестве ключа карты в Clang Checker - PullRequest
0 голосов
/ 25 апреля 2019

Я пишу Clang Checker, где ключ моего состояния ProgramMap должен быть 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?

Ценю любую помощь.

...