aaron.ballman added a comment.

In D132136#3766140 <https://reviews.llvm.org/D132136#3766140>, @tbaeder wrote:

> @aaron.ballman Can you comment on my last question? I'd like to land this 
> patch since the others depend on it.

Sorry for the delay!

In D132136#3760738 <https://reviews.llvm.org/D132136#3760738>, @tbaeder wrote:

> In D132136#3755724 <https://reviews.llvm.org/D132136#3755724>, @aaron.ballman 
> wrote:
>
>> The existing test coverage being wrong seems like all the more reason to add 
>> correct test coverage. LValue to RValue conversions are important to get 
>> right (lol here's a wonderful demonstration of where we didn't bother to see 
>> if we got it right that I accidentally stumbled into when trying to give you 
>> a constexpr test case: https://godbolt.org/z/bdxbers3M), especially because 
>> they're going to impact which overload gets called when picking between an 
>> `&&` and `&` overload.
>
> To be clear, can I land this patch without the unittest? I tried adding this 
> to `EvaluateAsRValueTest.cpp` but I just run into other problems in the new 
> interpreter :) So more unittests would definitely be good.

On the one hand, I'm not comfortable landing this without adequate testing, 
especially because you want to build more stuff on top of it. I think we need 
to make sure the foundational bits of evaluation are rock solid before building 
things on top of them. However, on the other hand, this is foundational enough 
that it's hard to test this bit without other parts of the interpreter being 
ready. So my preference is to try to add test coverage even if it's failing 
currently because other parts of the interpreter aren't ready yet. e.g., 
(imaginary test case, feel free to use better ones)

  template <typename Ty, typename Uy>
  struct is_same { static constexpr bool value = false; };
  
  template <typename Ty>
  struct is_same<Ty, Ty> { static constexpr bool value = true; };
  
  const volatile int i = 0;
  // Test that lvalue to rvalue conversion ends up stripping top-level 
qualifiers.
  // FIXME: this isn't correct yet because we don't have support for qualifier 
conversions yet.
  static_assert(is_same<decltype(+i), int>::value, "oh no!"); // expected-error 
{{static assertion failed: oh no!}}

This way, we can start getting extensive test cases written while thinking 
about the situations specific to lvalue to rvalue conversion (or whatever else 
is being implemented at the moment) instead of trying to come back and remember 
to write them later.

Is that reasonable, or is the interpreter in such a state where even this kind 
of testing is basically impossible to come up with?


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

https://reviews.llvm.org/D132136

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

Reply via email to