[llvm-bugs] [Bug 44566] New: AST creates CXXDependentScopeMemberExpr when Expr isnt dependent
via llvm-bugs
llvm-bugs at lists.llvm.org
Thu Jan 16 03:26:28 PST 2020
https://bugs.llvm.org/show_bug.cgi?id=44566
Bug ID: 44566
Summary: AST creates CXXDependentScopeMemberExpr when Expr isnt
dependent
Product: clang
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Frontend
Assignee: unassignedclangbugs at nondot.org
Reporter: N.James93 at hotmail.co.uk
CC: llvm-bugs at lists.llvm.org, neeilans at live.com,
richard-llvm at metafoo.co.uk
Take this class
>#include <utility>
>
>template <class T>
>class C {
> int _A;
>
> public:
> C& operator=(const C& Other){
> this->_A = Other._A;
> return *this;
> }
> C& operator==(C&& Other){
> _A = std::move(Other._A);
> return *this;
> }
>};
The AST for the copy assignment '=' line is
BinaryOperator <line:8:7, col:24> '<dependent type>' '='
|-CXXDependentScopeMemberExpr <col:7, col:13> '<dependent type>' lvalue ->_A
| -CXXThisExpr <col:7> 'C<T> *' this
|-CXXDependentScopeMemberExpr <col:18, col:24> '<dependent type>' lvalue ._A
| -DeclRefExpr <col:18> 'const C<T>' lvalue ParmVar 0x555e4f6cc108 'Other'
'const C<T> &'
Likewise the move assignment '=' line is
BinaryOperator <line:12:7, col:30> '<dependent type>' '='
|-MemberExpr <col:7> 'int' lvalue ->_A 0x555e4f6cc058
| -CXXThisExpr <col:7> 'C<T> *' implicit this
|-CallExpr <col:12, col:30> '<dependent type>'
| -UnresolvedLookupExpr <col:12, col:17> '<overloaded function type>' lvalue
(no ADL) = 'move' 0x555e4f65b538
| -CXXDependentScopeMemberExpr <col:22, col:28> '<dependent type>' lvalue ._A
| -DeclRefExpr <col:22> 'C<T>' lvalue ParmVar 0x555e4f6cc308 'Other' 'C<T>
&&'
The AST only prints out a MemberExpr for the implicit this (in the move
asignment).
The explicit this (in the copy assignment) should never be a
CXXDependentScopeMemberExpr.
Likewise in this example as the Other param is templated on the class, that
could be made into MemberExpr.
This shortfall makes creating source code analysis and refactoring tools harder
to implement as its harder to find where members are referenced.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200116/c6ea0472/attachment.html>
More information about the llvm-bugs
mailing list