[clang] [clang] Fix the local parameter of void type inside the `Requires` expression. (PR #109831)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Sep 28 02:52:56 PDT 2024
c8ef wrote:
After spending the entire afternoon attempting to streamline the parameter check process, I still haven't found an elegant solution to consolidate it into a single location. I explored how GCC approaches this issue and discovered that while GCC does utilize a single parameter check function (specifically in the `grokparm` function in `gcc/c/c-decl.cc`), it doesn't differentiate between the two contexts. As a result, it permits a `requires` clause to include a parameter with a default argument: [godbolt](https://gcc.godbolt.org/z/azcrKKf7T).
Upon examining the actual parameter checking process, it seems that the most crucial check related to require-expressions is for void types. Other checks are mainly for OpenCL, Objective-C, etc. Merging these checks for just a single void check might be overkill.
https://github.com/llvm/llvm-project/blob/75e08a527b716a11b3085a9ea4f5bed80c386323/clang/lib/Sema/SemaType.cpp#L5143-L5236
Therefore, I recommend adding the void parameter check directly into `SemaExprCXX` for an immediate fix. If there's a future need to consolidate the checks, we can consider refactoring later.
Additionally, there appears to be some overlap between the parameter checks in `Sema::BuildFunctionType` and `GetFullTypeForDeclarator`. It might be worth cleaning up this redundancy.
https://github.com/llvm/llvm-project/blob/75e08a527b716a11b3085a9ea4f5bed80c386323/clang/lib/Sema/SemaType.cpp#L2637-L2660
CC @mizvekov @zyn0217 @erichkeane
https://github.com/llvm/llvm-project/pull/109831
More information about the cfe-commits
mailing list