llvm-upgrade can cause redefinition errors #1442
Labels
bugzilla
Issues migrated from bugzilla
compile-fail
Use [accepts-invalid] and [rejects-valid] instead
duplicate
Resolved as duplicate
llvm-tools
All llvm tools that do not have corresponding tag
Extended Description
Current, llvm-upgrade is not handling redefinition of named values properly.
This invariably is the result of the collapsed type planes. For example, code
that previously defined a value in both the UInt and Int type planes will now
not work because those type planes have merged to just i32. The two values will
appear as redefinitions in the i32 type plane for the same symbol.
One quick thing to help with this is to drop useless bitcasts, like:
%tmp = bitcast i32 %tmp to i32
These result from old signedness conversions where the bitcast used to be:
%tmp = bitcast uint %tmp to int
Such bitcasts can now just be dropped by llvm-upgrade. However, this isn't
sufficient, its still quite possible that code like this:
%tmp = load uint* %uptr
%tmp = load int* %sptr
won't work because it now looks like:
%tmp = load i32* %uptr
%tmp = load i32* %sptr
and a redefinition error occurs. The solution involves tracking the symbol table
in llvm-upgrade and making sure that no re-definitions occur. If they do, a
simple name uniqueness algorithm should be sufficient.
The text was updated successfully, but these errors were encountered: