eduucaldas added a reviewer: gribozavr2. eduucaldas marked an inline comment as done. eduucaldas added a comment.
Code that reproduces the crash <https://godbolt.org/z/CWVEJ2> Notice that when using a postfix unary operator ++ one argument is introduced to differ it from its prefix counterpart, but that argument is not used. This phantom argument shows up in the ClangAST in the form of an `IntegerLiteral` with `invalid sloc`. This invalid sloc in a valid AST node was causing the SyntaxTree generation to crash. We can address this problems at two different levels: 1. At the `TraverseCXXOperatorCallExpr`, by overriding it and replacing the children iteration to not iterate over this phantom argument. 2. At the `WalkUpFromIntegerLiteral`, by skipping the visitation of the phantom node. We preferred the latter. 1. Cons: We would have to duplicate the implementation of RecursiveASTVisitor in BuildTree, to handle this subtle change in traversal. That would add code complexity. 2. Cons: We are handling a problem of `CXXOperatorCallExpr` in `IntegerLiteral`. We chose the latter as, anyways, if an AST node has an invalid sloc, it was either a problem with parsing or the node is supposed to be ignored ================ Comment at: clang/include/clang/AST/ExprCXX.h:143-148 + bool isPostfixUnaryOp() const; + + bool isPrefixUnaryOp() const; + + bool isUnaryOp() const; + ---------------- Should new additions to CXXOperatorCallExpr go on a different patch? I'll also add unit tests for those. I'm waiting for review on https://reviews.llvm.org/D82937, to do that. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82954/new/ https://reviews.llvm.org/D82954 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits