higher-performance wrote:
> it would be great to get something that "magically" works with a single
> attribute and does not need complicated compile-time computations. If we
> cannot get that, the approach with `clang::lifetimebound_like` seems like the
> second-best alternative.
The closest universal solution I can think of is something like the following,
assuming we do proper bikeshedding for the name:
```
template<class... Args>
reference emplace_back(Args&&... args)
[[clang::diagnosis_body(EXPRESSION_REPRESENTING_A_FAKE_BODY)]];
```
The faux body could then be used for diagnosis purposes -- and the contract
would be that it would never affect codegen.
This would also leave the door open to further extensions in the future. e.g.,
`[[clang::diagnosis_body(..., "lifetime_body_key_1")]]
[[clang::lifetime_diagnosis_like("lifetime_body_key_1")]]`, to allow different
analyses to share the same bodies.
> > I think even [[clang::diagnose_if(...)]] can cause template instantiations
> > that change program behavior.
>
> Unrelated, but I'd be curious to see those if you have any examples. I
> thought that maybe SFINAE could cause this, but at least [in simple
> examples](https://gcc.godbolt.org/z/5EeMhr4nW) `diagnose_if` does not affect
> overloading.
https://godbolt.org/z/xozfs18Ta (but looks like the
`[[clang::diagnose_if(...)]]` syntax doesn't actually work for that attribute,
only `__attribute__` syntax works)
Note that _any_ attribute that can result in template instantiations could
cause this. (Not sure if that's a necessary condition, but it's sufficient.)
https://github.com/llvm/llvm-project/pull/125520
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits