================
@@ -146,9 +148,24 @@ class ASTWalker : public RecursiveASTVisitor<ASTWalker> {
     //
     // If it's an enum constant, it must be due to prior decl. Report 
references
     // to it when qualifier isn't a type.
-    if (llvm::isa<EnumConstantDecl>(FD)) {
-      if (!DRE->getQualifier() || DRE->getQualifier()->getAsNamespace())
-        report(DRE->getLocation(), FD);
+    auto QualifierIsNamepsaceOrNone = [&DRE]() {
+      const auto *Qual = DRE->getQualifier();
+      if (!Qual)
+        return true;
+      switch (Qual->getKind()) {
+      case NestedNameSpecifier::Namespace:
+      case NestedNameSpecifier::NamespaceAlias:
+      case NestedNameSpecifier::Global:
+        return true;
+      case NestedNameSpecifier::TypeSpec:
+      case NestedNameSpecifier::TypeSpecWithTemplate:
+      case NestedNameSpecifier::Super:
+      case NestedNameSpecifier::Identifier:
+        return false;
+      }
----------------
ilya-biryukov wrote:
Yeah, we don't use `-Werror`, though, and don't use the same compiler.
So missing the error during development is not unheard of, and I don't think 
our precommit CI catches that either.

This is why `llvm_unreachable` still makes sense from my perspective, I always 
put it as an extra layer of defense.

As for `default: ... `, we have an explicit [rule in LLVM Style 
Guide](https://llvm.org/docs/CodingStandards.html#don-t-use-default-labels-in-fully-covered-switches-over-enumerations)
 that asks not to do that for fully-covered switches.

https://github.com/llvm/llvm-project/pull/106706
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to