================
@@ -544,6 +544,7 @@ TYPE_TRAIT_2(__is_pointer_interconvertible_base_of, 
IsPointerInterconvertibleBas
 #include "clang/Basic/TransformTypeTraits.def"
 
 // Clang-only C++ Type Traits
+TYPE_TRAIT_1(__has_non_relocatable_fields, HasNonRelocatableFields, KEYCXX)
----------------
ojhunt wrote:

I think you misunderstand my intent (I tried to suggest in one the comments or 
the global comment):

What I'm suggesting is that the qualifier would be implicitly added at the 
point of declaration, the overarching behavior you're after would be achieved 
that way. From your other comment about how you determine "C" strictness (just 
keying off standard layout) that might be challenging as it means you can't 
really finalize the types of fields until the struct definition is completed, 
and I don't know if there's anything else in C++ that behaves that way 
(@cor3ntin might have an idea).

However I'm also not sure how reasonable it is to exclude standard layout types 
from this protection - what exactly is the rationale for that? (if the reason 
is a belief that substituting C++ libraries is fine but C libraries is not, I 
suspect that's not actually very sound, and silently ignoring some structs is 
similarly a hazard - it can result in "trivial" refactoring invisibly reducing 
security guarantees).

Regarding P2786: the exact same issues apply to pointer authentication today - 
trying to solve them separately and outside of the existing triviality queries 
and operations is not the correct approach.

I'm ok with the logic being distinct from pointer auth, though I would regret 
that as I believe the shared semantics warrant a shared implementation, but 
there is no reason for them to be distinct from any of the type queries.

If you want the types to be trivially relocatable - which is not a requirement, 
it's a performance optimization - then ensure the existing queries and 
operations handle that correctly. Otherwise you run the risk of other code in 
clang using the existing trivial behavior queries, and expecting them to be 
correct, when they are not.

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

Reply via email to