about summary refs log tree commit diff
path: root/src/test/codegen/stack-alloc-string-slice.rs
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2013-08-29 22:29:26 -0700
committerAlex Crichton <alex@alexcrichton.com>2013-09-02 23:12:20 -0700
commit4600212a385b41f0c718b6b07dbb6c2c4531314a (patch)
tree128dd8716bcadf95470181b374d1ebed9d1b6e38 /src/test/codegen/stack-alloc-string-slice.rs
parent4f151b388bc55731aa7493ae712e13740aff2380 (diff)
downloadrust-4600212a385b41f0c718b6b07dbb6c2c4531314a.tar.gz
rust-4600212a385b41f0c718b6b07dbb6c2c4531314a.zip
Fix inner statics having the same symbol name
Before, the path name for all items defined in methods of traits and impls never
took into account the name of the method. This meant that if you had two statics
of the same name in two different methods the statics would end up having the
same symbol named (even after mangling) because the path components leading to
the symbol were exactly the same (just __extensions__ and the static name).

It turns out that if you add the symbol "A" twice to LLVM, it automatically
makes the second one "A1" instead of "A". What this meant is that in local crate
compilations we never found this bug. Even across crates, this was never a
problem. The problem arises when you have generic methods that don't get
generated at compile-time of a library. If the statics were re-added to LLVM by
a client crate of a library in a different order, you would reference different
constants (the integer suffixes wouldn't be guaranteed to be the same).

This fixes the problem by adding the method name to symbol path when building
the ast_map. In doing so, two symbols in two different methods are disambiguated
against.
Diffstat (limited to 'src/test/codegen/stack-alloc-string-slice.rs')
0 files changed, 0 insertions, 0 deletions