Closed yujincheng08 closed 3 months ago
All tests are on LLVM-18.
Reproduce example:
class string_view { public: string_view(const char* s): d(s), s(0) {} private: const char* d; unsigned long s; }; struct Test { [[gnu::weak]] Test(string_view); }; [[gnu::visibility("default")]] void Try() { Test b("hello world"); }
Compile with optimization:
$ clang++ -mllvm -enable-strcry -shared -target aarch64-none-linux-gnu -O1 -nostdinc++ -nodefaultlibs x.cc Running Hikari On x.cc Running StringEncryption On _Z3Tryv Doing Post-Run Cleanup Hikari Out Running Hikari On x.cc Running StringEncryption On _Z3Tryv Doing Post-Run Cleanup Hikari Out $ strings a.out | grep hello hello world
Compile without optimization:
$ clang++ -mllvm -enable-strcry -shared -target aarch64-none-linux-gnu -O0 -nostdinc++ -nodefaultlibs x.cc Running Hikari On x.cc Running StringEncryption On _Z3Tryv Running StringEncryption On _ZN11string_viewC2EPKc Doing Post-Run Cleanup Hikari Out $ strings a.out | grep hello
In case of lto:
$ clang++ -flto -fuse-ld=lld -Wl,-mllvm,-enable-strcry -shared -target aarch64-none-linux-gnu -O1 -nostdinc++ -nodefaultlibs x.cc Running Hikari On x.cc Doing Post-Run Cleanup Hikari Out Running Hikari On ld-temp.o Running StringEncryption On _Z3Tryv Doing Post-Run Cleanup Hikari Out $ strings a.out | grep hello hello world
$ clang++ -flto -fuse-ld=lld -Wl,-mllvm,-enable-strcry -shared -target aarch64-none-linux-gnu -O0 -nostdinc++ -nodefaultlibs x.cc Running Hikari On x.cc Running StringEncryption On _Z3Tryv Running StringEncryption On _ZN11string_viewC2EPKc Doing Post-Run Cleanup Hikari Out $ strings a.out | grep hello
On x86 and x86-64 it works.
All tests are on LLVM-18.
Reproduce example:
Compile with optimization:
Compile without optimization:
In case of lto:
Compile with optimization:
Compile without optimization:
On x86 and x86-64 it works.