Reid, thanks for the review!

================
Comment at: lib/Sema/SemaDecl.cpp:139-142
@@ +138,6 @@
+  FoundNotSpecifiedKind,
+  /// \brief There are no members is found, but class has a base of class
+  /// TemplateTypeParmType and we are allowed to suppose that the specified
+  /// identifier may be a member of this base.
+  SupposeFoundSpecifiedKind,
+  /// \brief Found a member of the expected type.
----------------
rnk wrote:
> OK, this is sort of the case being described:
>   template <typename T> struct Foo : T { void f(int a) { IdFromBase(a); } };
> 
> I think we need better terminology to talk about how this case differs from 
> this case:
>   template <typename T> struct Foo : Bar<T> { ... };
> 
> Both of these are classes with dependent bases, but in the second case, we 
> can go searching through the template pattern for Bar to try to see if it has 
> type or non-type members. I think if we can come up with a name for one of 
> these two cases, we can make this code a lot clearer.
> 
> We should get Richard's input on this, but here are some ideas:
> - Fully dependent / partially dependent
> - Dependent base with known pattern / unknown dependent base
> 
> So far, I like using the "known / unknown pattern" terminology best, so I 
> might rename this enumerator to NotFoundWithUnknownBase. This indicates that 
> after doing extended lookup into dependent bases with known patterns, no 
> members with this name were found, but we hit an unknown base that we 
> couldn't look through.
Yep, you're right. I also prefer "known / unknown pattern". I'll rename the 
enumerator.

================
Comment at: lib/Sema/SemaDecl.cpp:170
@@ +169,3 @@
+  }
+  if (FoundDecl == IdNameLookupResult::NotFound) {
+    for (const auto &Base : RD->bases()) {
----------------
rnk wrote:
> This can be an early return:
>   if (FoundDecl != IdNameLookupResult::NotFound)
>     return FoundDecl;
Ok, fixed

================
Comment at: lib/Sema/SemaDecl.cpp:195
@@ +194,3 @@
+      }
+      if (BaseRD) {
+        switch (lookupIdNameInDependentClass(
----------------
rnk wrote:
> This can also continue early:
>   if (!BaseRD)
>     continue;
Fixed

================
Comment at: lib/Sema/SemaDecl.cpp:220
@@ -196,1 +219,3 @@
+                       const IdentifierInfo &II, bool SupposeExistInBaseParm,
+                       const std::function<bool(NamedDecl *)> &CheckKind) {
   // Lookup in the parent class template context, if any.
----------------
rnk wrote:
> This is still `std::function`
Fixed

http://reviews.llvm.org/D8100

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to