[PATCH] D90719: [DebugInfo] Modify ctor homing as workaround for unconstructed libcxx types
David Blaikie via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 5 10:46:08 PST 2020
dblaikie added a comment.
In D90719#2376388 <https://reviews.llvm.org/D90719#2376388>, @rnk wrote:
> In D90719#2372656 <https://reviews.llvm.org/D90719#2372656>, @dblaikie wrote:
>
>> My understanding is that such code is UB, is that right?
>
> I guess I'm not convinced it's UB, and need some language lawyering help to decide.
Fair enough. The code we're talking about essentially boils down to this, right:
struct non_trivially_constructible {
non_trivially_constructible();
int i;
};
struct implicitly_non_trivially_constructible : non_trivially_constructible {
};
void f1() {
using T = implicitly_non_trivially_constructible;
alignas(T) unsigned char data[sizeof(T)];
T* t = static_cast<T*>(&data);
t->i = 3;
...
}
Yeah? My understanding is that the lifetime of the T object hasn't started, because its ctor hasn't been run. For trivial types that's a bit fuzzier (eg: `int *i = (int*)malloc(sizeof(int)); *i = 3;` - we don't usually bother to call the pseudodestructor on this type) but for a non-trivially constructible thing, I'd think that was pretty well required/guaranteed by the language? (sort of by definition of non-trivially constructible)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90719/new/
https://reviews.llvm.org/D90719
More information about the cfe-commits
mailing list