rjmccall added a comment.

In D125919#3554078 <https://reviews.llvm.org/D125919#3554078>, @delcypher wrote:

> @aaron.ballman Hey I just saw this change and had questions about it. For 
> others looking I think the resolution to DR423 is in 
> https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1863.pdf, I found 
> https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2148.htm#dr_423 hard to 
> parse.
>
> 1. It looks like we're completely dropping qualifiers on the return types of 
> function in C. If that's the case, what's even the point of having qualifiers 
> on return types of functions?

I think that's the point: qualifiers don't mean anything on return types, so 
they shouldn't be represented in the type.  If the user writes a qualifier 
directly on the return type, like `const int twice(int x);`, we should warn 
about that; otherwise they should be silently dropped.

> 2. Reading DR423 I see the problem but I don't understand why the desire to 
> make `_Generic` work better in the presence of qualifiers means that 
> qualifiers on function return types have to be dropped in all contexts. 
> Couldn't this just be a thing that is done inside `_Generic` and no where 
> else?
>
> Sorry if these are silly questions and if I've misunderstood something, I saw 
> n1863 say "functions return unqualified types" and I was very surprised.

Just to be clear, you understand that this is only about top-level qualifiers 
on the return type, right?  `const void *foo();` is still meaningful, it's just 
that `const void * const foo();` isn't.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D125919

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

Reply via email to