ilya-biryukov added a comment.

Thanks! Mostly questions to better understand the spec and clang. Please excuse 
me if they sound too basic.
I have read the modules section of the standard, but I couldn't find where it 
specifies whether these redefinition errors should be present or not. Any 
guidance of where to look at?

Could we add a few examples where legitimate redefinition errors do happen?
(private module fragment?



================
Comment at: clang/lib/Sema/SemaTemplate.cpp:8731
 
-  auto *OldConcept = dyn_cast<ConceptDecl>(Previous.getRepresentativeDecl());
+  NamedDecl *Old = Previous.getRepresentativeDecl();
+  if (auto *USD = dyn_cast<UsingShadowDecl>(Old))
----------------
This follows what `getFoundDecl()` does, but still allows to show errors when 
lookup results contain multiple entities.

A question too: is true that concept is always reachable if it has a reachable 
using decl?
I wonder whether `hasReachableDefinition` should be called on `UsingShadowDecl` 
instead?


================
Comment at: clang/lib/Sema/SemaTemplate.cpp:8755
+      // old one, we should merge them instead of complaining.
+      !(OldConcept->getOwningModule() &&
+        OldConcept->getOwningModule()->isGlobalModule())) {
----------------
Would we allow redefinitions inside the same global module fragment?
```
module;

template<class T> concept ok = true;
template<class T> concept ok = true; // should be an error.
```

could we add a test for that?
or do we only mark declarations coming from actual pcm files as having as 
owning module fragment?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130614/new/

https://reviews.llvm.org/D130614

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to