Author: Marcel Hlopko
Date: 2020-03-12T11:08:33+01:00
New Revision: b720543926c7cda94662ae99182ba63bc23a8ff1

URL: 
https://github.com/llvm/llvm-project/commit/b720543926c7cda94662ae99182ba63bc23a8ff1
DIFF: 
https://github.com/llvm/llvm-project/commit/b720543926c7cda94662ae99182ba63bc23a8ff1.diff

LOG: [AST] Respect shouldTraversePostOrder when traversing type locs

Summary: Copy of https://reviews.llvm.org/D72072, submitting with 
ilya-biryukov's permission.

Reviewers: gribozavr2

Reviewed By: gribozavr2

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D76001

Added: 
    

Modified: 
    clang/include/clang/AST/RecursiveASTVisitor.h

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/AST/RecursiveASTVisitor.h 
b/clang/include/clang/AST/RecursiveASTVisitor.h
index 3dc9af4b8042..ce66eeef7a82 100644
--- a/clang/include/clang/AST/RecursiveASTVisitor.h
+++ b/clang/include/clang/AST/RecursiveASTVisitor.h
@@ -1127,10 +1127,17 @@ DEF_TRAVERSE_TYPE(PipeType, { 
TRY_TO(TraverseType(T->getElementType())); })
 #define DEF_TRAVERSE_TYPELOC(TYPE, CODE)                                       
\
   template <typename Derived>                                                  
\
   bool RecursiveASTVisitor<Derived>::Traverse##TYPE##Loc(TYPE##Loc TL) {       
\
-    if (getDerived().shouldWalkTypesOfTypeLocs())                              
\
-      TRY_TO(WalkUpFrom##TYPE(const_cast<TYPE *>(TL.getTypePtr())));           
\
-    TRY_TO(WalkUpFrom##TYPE##Loc(TL));                                         
\
+    if (!getDerived().shouldTraversePostOrder()) {                             
\
+      TRY_TO(WalkUpFrom##TYPE##Loc(TL));                                       
\
+      if (getDerived().shouldWalkTypesOfTypeLocs())                            
\
+        TRY_TO(WalkUpFrom##TYPE(const_cast<TYPE *>(TL.getTypePtr())));         
\
+    }                                                                          
\
     { CODE; }                                                                  
\
+    if (getDerived().shouldTraversePostOrder()) {                              
\
+      TRY_TO(WalkUpFrom##TYPE##Loc(TL));                                       
\
+      if (getDerived().shouldWalkTypesOfTypeLocs())                            
\
+        TRY_TO(WalkUpFrom##TYPE(const_cast<TYPE *>(TL.getTypePtr())));         
\
+    }                                                                          
\
     return true;                                                               
\
   }
 
@@ -1199,22 +1206,22 @@ bool 
RecursiveASTVisitor<Derived>::TraverseArrayTypeLocHelper(ArrayTypeLoc TL) {
 
 DEF_TRAVERSE_TYPELOC(ConstantArrayType, {
   TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
-  return TraverseArrayTypeLocHelper(TL);
+  TRY_TO(TraverseArrayTypeLocHelper(TL));
 })
 
 DEF_TRAVERSE_TYPELOC(IncompleteArrayType, {
   TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
-  return TraverseArrayTypeLocHelper(TL);
+  TRY_TO(TraverseArrayTypeLocHelper(TL));
 })
 
 DEF_TRAVERSE_TYPELOC(VariableArrayType, {
   TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
-  return TraverseArrayTypeLocHelper(TL);
+  TRY_TO(TraverseArrayTypeLocHelper(TL));
 })
 
 DEF_TRAVERSE_TYPELOC(DependentSizedArrayType, {
   TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
-  return TraverseArrayTypeLocHelper(TL);
+  TRY_TO(TraverseArrayTypeLocHelper(TL));
 })
 
 DEF_TRAVERSE_TYPELOC(DependentAddressSpaceType, {


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

Reply via email to