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

Reply via email to