baloghadamsoftware added a comment.

This patch intends to fix bug 47037 
<https://bugs.llvm.org/show_bug.cgi?id=47037>. It is still work in progress 
with lots of debug printouts.

I described the issue with this patch at the bug report:

//The variadic tests fail because the whole Dyanamic Type library is extremely 
poor design: it stores the pointers and references as they are instead of the 
underlying types. Unfortunately, cast<> functions which can take pointers have 
pointers to SubstTemplateTypeParmType but isa<> functions take everything by 
reference. Thus they have a reference to a SubstTemplateTypeParmType which 
contains the pointer. The two will never match even if I unpack the reference 
for the isa<> functions and get to the pointer itself because I cannot create a 
new pointer type in the cast<> functions where SubstTemplateTypeParmType is 
inside the pointer. I did not found any method to remove 
SubstTemplateTypeParmType from a pointer either.

This results that the test evalNonNullParamNonNullReturnReference() passes only 
by chance in the original version. Even if I fix the parameter which should 
have been pointer instead of reference the early exit blocks which use 
dyn_cast<> store a different "from" type for the casts that we retrieve later 
at the isa<> calls. This way both true and false branches for the isa<> blocks 
remain alive. If I extend the tests for variadic templates we are not lucky 
anymore, the tests fail.//


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D85728

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

Reply via email to