zhouyizhou added a comment.

In D137263#3909722 <https://reviews.llvm.org/D137263#3909722>, @MaskRay wrote:

> I find that if I comment out ` 
> cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);` in 
> `Sema::HideUsingShadowDecl`, no test fails... So we have a missing coverage 
> issue.

Hi 
I found a counterexample for above case, excited! !  and I could not hesitate 
to report you that good news ;-)

  struct A
  {
          struct Nested {};
          operator Nested*() {return 0;};
  };
  
  struct B : A
  {
          using A::operator typename A::Nested*;
          operator typename A::Nested *() {
                  struct A * thi = this;
                  return *thi;
          };
  };
  
  int
  main()
  {
  
          struct B b;
          auto s = *b;
  
  }

After  comment out ` 
cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);`
clang++ report following:

  using.C:21:11: error: use of overloaded operator '*' is ambiguous (operand 
type 'struct B')
          auto s = *b;
                   ^~
  using.C:21:11: note: because of ambiguity in conversion of 'struct B' to 
'A::Nested *'
  using.C:4:9: note: candidate function
          operator Nested*() {return 0;};
          ^
  using.C:10:9: note: candidate function
          operator typename A::Nested *() {
          ^
  using.C:21:11: note: built-in candidate operator*(struct A::Nested *)
          auto s = *b;
                   ^
  using.C:21:11: note: built-in candidate operator*(const struct A::Nested *)
  1 error generated.

So I think we could add above to the test case.
What's your opinion?

I learned a lot under your guidance!

Thank you both
Sincerely 
Zhouyi


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

https://reviews.llvm.org/D137263

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

Reply via email to