AaronBallman wrote:

> Something being unspecified in the standard doesn't mean we're unconstrained. 
> In this case, it is unspecified because it is allowed to vary between 
> platforms, but platforms are required to specify what type `size_t` is, and 
> it is well-defined to write code based on that assumption on that platform. 
> Unportable code is not invalid code. Almost all C and C++ code makes some 
> non-portable assumptions, and this one in particular is very common.
> 
> Moreover, C++ encodes the underlying type of typedefs into the ABI. `size_t` 
> appears in a lot of type signatures, and it is mangled as its underlying 
> type. (This is actually very annoying for writing portable compiler tests 
> because e.g. `operator new(size_t)` has a different mangled name on different 
> targets, but we just have to deal with it.) The type produced by `sizeof` 
> expressions can similarly easily propagate into the ABI through template 
> argument deduction and `auto`. None of this can be changed without massively 
> breaking the ABI. It is off the table.
> 
> Now, C might be different because of how loose the compatible-types rule is. 
> If you want to pursue this just for C, we can talk about it; I don't know 
> that it's a good idea, but we can at least talk about it.

Okay, I see where the disconnect is now. I was using standards terms like 
"compatible" when what I was really meaning was "alias". e.g., I wasn't 
suggesting we introduce a distinct, new type. I was suggesting we take the 
existing types and give them a spelling of `__size_t`. Same for how we already 
handle things like `_int32` and `int`; they're the same type, just with 
different ways of spelling it.

But I'm more and more thinking Richard is correct, this is just a fancy form of 
sugar.

https://github.com/llvm/llvm-project/pull/136542
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to