rjmccall added inline comments.
================ Comment at: clang/lib/Sema/SemaOverload.cpp:8978 + } } } ---------------- Can we do this in a way that's a little more general if we want to include other qualifiers in this combinatoric explosion in the future? I think you just need to make a recursive helper function that takes a set of qualifiers to break down (treating the atomic flag as a "qualifier" for this purpose) and then calls a callback for all combinations of those qualifiers. Like: ``` struct QualifiersAndAtomic { Qualifiers Quals; bool HasAtomic; QualifiersAndAtomic() : HasAtomic(false) {} QualifiersAndAtomic(Qualifiers quals, bool hasAtomic) : Quals(quals), HasAtomic(hasAtomic) {} QualifiersAndAtomic withVolatile() { return {Quals.withVolatile(), HasAtomic}; } QualifiersAndAtomic withAtomic() { return {Quals, true}; } }; static void forAllQualifierCombinations(QualifiersAndAtomic available, QualifiersAndAtomic applied, llvm::function_ref<void(QualifiersAndAtomic)> callback) { // _Atomic if (available.HasAtomic) { available.HasAtomic = false; forAllQualifierCombinations(available, applied.withAtomic()); forAllQualifierCombinations(available, applied); return; } // volatile if (available.Quals.hasVolatile()) { available.Quals.removeVolatile(); assert(!applied.Quals.hasVolatile()); forAllQualifierCombinations(available, applied.withVolatile()); forAllQualifierCombinations(available, applied); return; } callback(applied); } ``` The `QualifiersAndAtomic` structure is probably useful enough to go in `Type.h`. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D125349/new/ https://reviews.llvm.org/D125349 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits