commit | 2708a5fa5cfafaa08d7a038abbfa0b809a581829 | [log] [tgz] |
---|---|---|
author | Rosica Dejanovska <rosica@google.com> | Wed Jun 22 06:54:59 2022 -0700 |
committer | Copybara-Service <copybara-worker@google.com> | Wed Jun 22 06:55:26 2022 -0700 |
tree | 31d72991e2f432733701006a89f725553bb67fc0 | |
parent | bdfb4d9245e4a25556c2d1f7e6c65ba4195ce76d [diff] |
Make the order of items coming from implicit template specializations deterministic Currently we sort items in IR according to 1. Source location, and then 2. `Importer::GetDeclOrder()` <- this one ensures that implicit constructors/destructors come in a certain order Implicit class template specialization decls and their methods have the same source location, which makes the following code snippet problematic: ``` template <typename T> struct MyStruct { void Method(T t); }; using Alias1 = MyStruct<int>; using Alias2 = MyStruct<bool>; ``` The generated bindings will contain two structs for the implicit template specializations: ``` pub struct __CcTemplateInst8MyStructIiE {...} pub struct __CcTemplateInst8MyStructIbE {...} ``` But the order in which they appear is nondeterministic. Same goes for the assertions we generate for these structs, as well as the respective functions in `rs_api_impl.cc`. This cl addresses the issue by taking into account the mangled name of the class template specialization or function decls when determining the item order. PiperOrigin-RevId: 456502619
Extremely experimental interop tooling for C++ and Rust.
Please don‘t use, this is an experiment and we don’t yet know where will it take us. There will be breaking changes without warning. Unfortunately, we can't take contributions at this point.
$ apt install clang lld bazel $ git clone git@github.com:google/crubit.git $ cd crubit $ bazel build --linkopt=-fuse-ld=/usr/bin/ld.lld //rs_bindings_from_cc:rs_bindings_from_cc_impl
$ git clone https://github.com/llvm/llvm-project $ cd llvm-project $ CC=clang CXX=clang++ cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS='clang' -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install $ cmake --build build -j $ # wait... $ cmake --install build $ cd ../crubit $ LLVM_INSTALL_PATH=../llvm-project/install bazel build //rs_bindings_from_cc:rs_bindings_from_cc_impl