tbaeder added inline comments.

================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:1098-1099
+
+    unsigned N = SL->getLength();
+    for (size_t I = 0; I != NumElems; ++I) {
+      uint32_t CodePoint = I < N ? SL->getCodeUnit(I) : 0;
----------------
tbaeder wrote:
> tahonermann wrote:
> > tahonermann wrote:
> > > Aren't `N` and `NumElems` guaranteed to have the same value here? Both 
> > > are derived from `SL`. The code seems to be written with the expectation 
> > > that `NumElems` corresponds to the number of elements to be iniitialized 
> > > in the target array.
> > I see the change to now use the minimum of `SL->getLength()` and 
> > `CAT->getSize().getZExtValue()`. Based on https://godbolt.org/z/5sTWExTac 
> > this looks to be unnecessary. When a string literal is used as an array 
> > initializer, it appears that the type of the string literal is adjusted to 
> > match the size of the array being initialized. I suggest using only 
> > `CAT->getSize().getZExtValue()` and adding a comment that this code depends 
> > on that adjustment.
> That is good to know and  makes sense, thanks!
That actually doesn't work. They type might be adjusted, but `getCodeUnit()` 
still asserts that the index is `< getLength()`. :(


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

https://reviews.llvm.org/D137488

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

Reply via email to