mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-29 02:56:06 +00:00

In D148197, we have made `defvar` statement able to refer to class template arguments. However, the priority of class/multiclass template argument is higher than variables defined by `defvar`, which is a little counterintuitive. In this patch, we unify the priority of variables. Each pair of braces introduces a new scope, which may contain some additional variables like template arguments, loop iterators, etc. We can define local variables inside this scope via `defvar` and these variables are of higher priority than additional variables. This means that `defvar` will shadow additional variables with the same name. The scope can be nested, and we use the innermost variable. This make variables defined by `defvar` prior to class/multiclass template arguments, loop iterators, etc. The shadow rules now are: * `V` in a record body shadows a global `V`. * `V` in a record body shadows template argument `V`. * `V` in template arguments shadows a global `V`. * `V` in a `foreach` statement list shadows any `V` in surrounding record or global scopes. Reviewed By: tra Differential Revision: https://reviews.llvm.org/D149016