================ @@ -238,3 +238,55 @@ LLVM_DUMP_METHOD void FPOptionsOverride::dump() { #include "clang/Basic/FPOptions.def" llvm::errs() << "\n"; } + +AtomicOptions +AtomicOptions::defaultWithoutTrailingStorage(const LangOptions &LO) { + AtomicOptions result(LO); + return result; +} + +AtomicOptionsOverride +AtomicOptions::getChangesSlow(const AtomicOptions &Base) const { + AtomicOptions::storage_type OverrideMask = 0; +#define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \ + if (get##NAME() != Base.get##NAME()) \ + OverrideMask |= NAME##Mask; +#include "clang/Basic/AtomicOptions.def" + return AtomicOptionsOverride(*this, OverrideMask); +} + +LLVM_DUMP_METHOD void AtomicOptions::dump() { +#define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \ + llvm::errs() << "\n " #NAME " " << get##NAME(); +#include "clang/Basic/AtomicOptions.def" + llvm::errs() << "\n"; +} + +LLVM_DUMP_METHOD void AtomicOptionsOverride::dump() { +#define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \ + if (has##NAME##Override()) \ + llvm::errs() << "\n " #NAME " Override is " << get##NAME##Override(); +#include "clang/Basic/AtomicOptions.def" + llvm::errs() << "\n"; +} + +AtomicOptionsOverride::AtomicOptionsOverride(const LangOptions &LO) { + for (const auto &Setting : LO.AtomicOptionsAsWritten) { + SmallVector<StringRef, 2> KeyValue; + StringRef(Setting).split(KeyValue, ":"); + // Assuming option string has been checked elsewhere and is valid. + assert(KeyValue.size() == 2 && "Invalid atomic option format"); ---------------- arsenm wrote:
If you just do the split without the SmallVector, the second name would just fail to parse the same way? https://github.com/llvm/llvm-project/pull/102569 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits