ilya-biryukov added a comment.

In D146426#4207118 <https://reviews.llvm.org/D146426#4207118>, @aaron.ballman 
wrote:

> This feels like it's heading in the wrong direction -- the AST should not 
> have holes in it. An invalid type should be replaced by a valid type (after 
> diagnosing the invalid type, of course) so that we can keep as much of the 
> AST around as possible (for example, we typically stub in `int` and continue 
> compilation, as in: https://godbolt.org/z/MvxjGovGh), which should then 
> result in a non-null `ParmVarDecl`. This way, we don't need to sprinkle 
> nullptr checks all over the compiler when inspecting a function's parameters.

I actually prototyped doing this and it caused extra errors with no locations 
and diagnostic errors.
Moreover, this happens not only with `__fp16`, but for all cases when 
`Declarator::setInvalidType` is called (and that's quite a lot of cases).
We also have checks for `nullptr` inside parameter lists in many places of the 
codebase, e.g. see a usage in SemaTemplateInstantiateDecl.cpp 
<https://github.com/llvm/llvm-project/blob/f67b481098cc30567d0f50a2b21f8f57b92052bd/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp#L4425>.

I fully agree that the direction taken is not very good, but it has not been 
chosen by this patch.
A more involved refactoring that would ensure parameter lists never have nulls 
is definitely very welcome, this change intends to quickly fix a crash we're 
experiencing.

In D146426#4207146 <https://reviews.llvm.org/D146426#4207146>, @erichkeane 
wrote:

> In D146426#4207118 <https://reviews.llvm.org/D146426#4207118>, @aaron.ballman 
> wrote:
>
>> This feels like it's heading in the wrong direction -- the AST should not 
>> have holes in it. An invalid type should be replaced by a valid type (after 
>> diagnosing the invalid type, of course) so that we can keep as much of the 
>> AST around as possible (for example, we typically stub in `int` and continue 
>> compilation, as in: https://godbolt.org/z/MvxjGovGh), which should then 
>> result in a non-null `ParmVarDecl`. This way, we don't need to sprinkle 
>> nullptr checks all over the compiler when inspecting a function's parameters.
>
> Frankly, I would like to see us just insert the `__fp16` type instead.  We've 
> already diagnosed, so we won't go to codegen, which is where the parameter 
> issue is going to cause a problem.  I can't imagine we have ANY code that 
> depends on `__fp16` and would break if it is a parameter.

+1 to that, `__fp16` is a better choice here, e.g. that's something I would 
expect to see in AST dumps.
We just need a fix that avoids `nulls` inside parameter lists.
Note that the types are already handled properly, but for some reason that I 
didn't dig out we choose to defer setting the parameter decls until a call to 
`GetTypeSourceInfoForDeclarator`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D146426

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

Reply via email to