balazske added a comment.

In the last case the the RecordDecl's `a` and `b` can be matched (not internal 
statements in a function) and this is similar to the existing test cases. The 
`struct a` and `struct b` already fails to match because different name.



================
Comment at: clang/lib/AST/ASTStructuralEquivalence.cpp:1360-1364
+    // Special case: We allow a struct defined in a function to be equivalent
+    // with a similar struct defined outside of a function.
+    if ((DC1->isFunctionOrMethod() && DC2->isTranslationUnit()) ||
+        (DC2->isFunctionOrMethod() && DC1->isTranslationUnit()))
+      return true;
----------------
steakhal wrote:
> Shouldn't you also check the name as well?
Here `DC1` or `DC2` is already a function or translation unit, the name of it 
is not relevant.


================
Comment at: clang/lib/AST/ASTStructuralEquivalence.cpp:1379
+
+    DC1 = DC1->getParent()->getNonTransparentContext();
+    DC2 = DC2->getParent()->getNonTransparentContext();
----------------
steakhal wrote:
> So, the previous `DC1->isTranslationUnit()` guards the `DC1->getParent()` to 
> never be `NULL`; same for `DC2`.
> Pretty neat.
Change to `!DC1->getParent()` (from `DC1->isTranslationUnit()`)? (The line can 
be moved to here to increase readability, so the break statement is at end of 
the loop.)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D113118

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

Reply via email to