Skip to content

llvm-upgrade can cause redefinition errors #1442

@llvmbot

Description

@llvmbot
Bugzilla Link 1070
Resolution DUPLICATE
Resolved on Mar 06, 2010 14:00
Version trunk
OS All
Reporter LLVM Bugzilla Contributor

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzillacompile-failUse [accepts-invalid] and [rejects-valid] insteadduplicateResolved as duplicatellvm-toolsAll llvm tools that do not have corresponding tag

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions