mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-31 21:30:58 +00:00
The compiler-generated copy constructor and copy assignment operator
already do the right thing (which is to simply copy the underlying
pointer).
The [Itanium C++ ABI][1] treats any class with non-trivial copy/move
constructors and destructors as non-trivial for the purposes of calls --
even if they are functionally identical to the compiler-generated ones.
If a class is non-trivial, it cannot be passed or returned in registers,
only via an invisible reference, which is worse for codegen. This commit
makes `{Nonnull,}GCPtr` trivial.
As the compiler can be sure that capturing a `GCPtr` by value has no
side effects, a few `-Wunused-lambda-capture` warnings had to be
addressed in LibWeb.
GCC seems to have a bug that prevents `ExceptionOr<Variant<GCPtr<T>>>`
from being implicitly constructed from `GCPtr<T>` after this change. A
non-invasive workaround is to explicitly construct the inner Variant
type.
[1]: https://itanium-cxx-abi.github.io/cxx-abi/abi.html#non-trivial
|
||
|---|---|---|
| .. | ||
| ClassicScript.cpp | ||
| ClassicScript.h | ||
| Environments.cpp | ||
| Environments.h | ||
| ExceptionReporter.cpp | ||
| ExceptionReporter.h | ||
| Fetching.cpp | ||
| Fetching.h | ||
| ImportMap.h | ||
| ModuleMap.cpp | ||
| ModuleMap.h | ||
| ModuleScript.cpp | ||
| ModuleScript.h | ||
| Script.cpp | ||
| Script.h | ||
| TemporaryExecutionContext.cpp | ||
| TemporaryExecutionContext.h | ||
| WindowEnvironmentSettingsObject.cpp | ||
| WindowEnvironmentSettingsObject.h | ||
| WorkerEnvironmentSettingsObject.h | ||