shafik added inline comments.

================
Comment at: clang/lib/Sema/SemaTemplateInstantiate.cpp:2339
+            Req->getConstraintExpr()->getSourceRange(), Satisfaction))
+      TransConstraint = Result[0];
+    assert(!Trap.hasErrorOccurred() && "Substitution failures must be handled "
----------------
usaxena95 wrote:
> rtrieu wrote:
> > I have found a crash here when it access vector `Result` without checking 
> > the size first, leading to out of bounds memory access.  CReduce gave the 
> > following testcase:
> > 
> > ```
> > template <class a, a> struct b;
> > template <bool c> using d = b<bool, c>;
> > template <class a, class e> using f = d<__is_same(a, e)>;
> > template <class a, class e>
> > concept g = f<a, e>::h;
> > template <class a, class e>
> > concept i = g<e, a>;
> > template <typename> class j {
> >   template <typename k>
> >   requires requires { requires i<j, k>; }
> >   j();
> > };
> > template <> j();
> > ```
> > 
> > `clang reduce.ii --std=c++20`
> > 
> > ```
> > assertion failed at llvm/include/llvm/ADT/SmallVector.h:294 in reference 
> > llvm::SmallVectorTemplateCommon<clang::Expr *>::operator[](size_type) [T = 
> > clang::Expr *]: idx < size()
> > ...
> > ...
> > (anonymous 
> > namespace)::TemplateInstantiator::TransformNestedRequirement(clang::concepts::NestedRequirement*)
> >  clang/lib/Sema/SemaTemplateInstantiate.cpp:2339:25
> > ...
> > ...
> > ```
> Thanks for noticing and sorry for the trouble. I have fixed this forward in 
> https://github.com/llvm/llvm-project/commit/8c0aa53b07caa604d58a0d83dc571d8fcb004972.
Can you add a test case as well so if we regress we will catch it, thank you!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D138914

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

Reply via email to