sammccall accepted this revision.
sammccall added inline comments.
This revision is now accepted and ready to land.


================
Comment at: clang/include/clang/AST/DependenceFlags.h:22
+    //     cause instantiation to fail
+    //   - or an error (usually in a non-template context)
+    //
----------------
nit: I'd weaken usually->often


================
Comment at: clang/include/clang/AST/DependenceFlags.h:25
+    // Note that C++ standard doesn't define the instantiation-dependent term,
+    // we follow the formal definition coming from the Itanium C++ ABI.
     Instantiation = 2,
----------------
Maybe add ", and extend it to errors"


================
Comment at: clang/include/clang/AST/DependenceFlags.h:55
+    /// Whether this type somehow involves
+    ///   - a template parameter, evenif the resolution of the type does not
+    ///     depend on a template parameter.
----------------
evenif > even if


================
Comment at: clang/include/clang/AST/DependenceFlags.h:62
+    ///   - or it somehow involves an error, e.g. denoted by
+    ///     decltype(recovery-expr) where recovery-expr is contains-errors
     Dependent = 4,
----------------
nit: i'd just say "e.g. decltype(expr-with-errors)"


================
Comment at: clang/include/clang/AST/DependenceFlags.h:112
     UnexpandedPack = 1,
     // Uses a template parameter, even if it doesn't affect the result.
+    // Validity depends on the template parameter, or an error.
----------------
I'd rephrase as "Depends on a template parameter or error in some way. Validity 
depends on how the template is instantiated or the error is resolved."


================
Comment at: clang/include/clang/AST/Expr.h:162
+  ///   - a template parameter (C++ [temp.dep.constexpr])
+  ///   - or an error
+  ///
----------------
maybe "or an error, whose resolution is unknown"

This hints at the connection between template and error dependency, and also is 
more accurate for type-dependence (where sometimes we're not type dependent 
because the type depends on an error but we've guessed at what the resolution 
is)


================
Comment at: clang/include/clang/AST/Expr.h:6233
+/// unlike other dependent expressions, RecoveryExpr can be produced in
+/// non-template contexts. In addition, we will preserve the type in
+/// RecoveryExpr when the type is known, e.g. preserving the return type for a
----------------
I'm not sure why this "in addition" is part of the same paragraph, it seems 
unrelated.

I'd move to a separate paragraph and drop "in addition".


================
Comment at: clang/include/clang/AST/Expr.h:6236
+/// broken non-overloaded function call, a overloaded call where all candidates
+/// have the same return type.
 ///
----------------
maybe "In this case, the expression is not type-dependent (unless the known 
type is itself dependent)"


================
Comment at: clang/lib/AST/ComputeDependence.cpp:499
+  // RecoveryExpr is
+  //   - always value-dependent, instantiation-dependent and contains-errors
+  //   - type-dependent if we don't know the type (fallback to an opequa
----------------
nit: I'd say "always value-dependent, and therefore instantiation dependent"
and make "contains-errors" a separate bullet at the end like "- contains errors 
(ExprDependence::Error), by definition"


================
Comment at: clang/lib/AST/ComputeDependence.cpp:500
+  //   - always value-dependent, instantiation-dependent and contains-errors
+  //   - type-dependent if we don't know the type (fallback to an opequa
+  //     dependent type), or the type is known and dependent, or it has
----------------
opaque


================
Comment at: clang/lib/AST/ComputeDependence.cpp:502
+  //     dependent type), or the type is known and dependent, or it has
+  //     type-dependent subexpressions
   auto D = toExprDependence(E->getType()->getDependence()) |
----------------
hmm, I'd missed the type-dependent subexpressions question.
If there are type-dependent subexpressions, but a non-dependent type was 
specified for the RecoveryExpr, is the expr type-dependent?

This is the part that I think we have discretion over.
The definition of type-dependent does say "any type-dependent subexpression" 
but then lays out a list of exceptions such as casts, which are not 
type-dependent even if their argument is. What these have in common is that the 
type is known.

So I think this comes down to whether it's the caller's job to work this out, 
or we want to conservatively call these expressions dependent.

I think the former is probably better - marking the expression as 
type-dependent but not having its actual type be dependent doesn't serve any 
purpose I'm aware of. It's also inconsistent with the informal definition of 
type-dependence described earlier in this patch.

So the comment should describe the current state, but maybe a FIXME to remove 
the type-dependent subexpressions clause?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D83213



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

Reply via email to