Commit ec893d9a authored by Brad King's avatar Brad King
Browse files

Merge branch 'fix_link-line-dedup_regression' into release

parents 41b4fb99 4db31095
......@@ -263,21 +263,26 @@ cmComputeLinkDepends::Compute()
this->OrderLinkEntires();
// Compute the final set of link entries.
// Iterate in reverse order so we can keep only the last occurrence
// of a shared library.
std::set<int> emmitted;
for(std::vector<int>::const_iterator li = this->FinalLinkOrder.begin();
li != this->FinalLinkOrder.end(); ++li)
for(std::vector<int>::const_reverse_iterator
li = this->FinalLinkOrder.rbegin(),
le = this->FinalLinkOrder.rend();
li != le; ++li)
{
int i = *li;
LinkEntry const& e = this->EntryList[i];
cmTarget const* t = e.Target;
// Entries that we know the linker will re-use for symbols
// needed by later entries do not need to be repeated.
// Entries that we know the linker will re-use do not need to be repeated.
bool uniquify = t && t->GetType() == cmTarget::SHARED_LIBRARY;
if(!uniquify || emmitted.insert(i).second)
{
this->FinalLinkEntries.push_back(e);
}
}
// Reverse the resulting order since we iterated in reverse.
std::reverse(this->FinalLinkEntries.begin(), this->FinalLinkEntries.end());
// Display the final set.
if(this->DebugMode)
......
......@@ -51,3 +51,4 @@ add_subdirectory(Case1)
add_subdirectory(Case2)
add_subdirectory(Case3)
add_subdirectory(Case4)
add_subdirectory(Case5)
project(CASE5 C)
add_library(case5Foo SHARED foo.c)
add_library(case5Bar STATIC bar.c)
target_link_libraries(case5Bar case5Foo)
add_executable(case5 main.c)
target_link_libraries(case5 case5Foo case5Bar)
#ifdef _WIN32
__declspec(dllimport)
#endif
void foo(void);
#include <stdio.h>
void bar(void)
{
foo();
printf("bar()\n");
}
#include <stdio.h>
#ifdef _WIN32
__declspec(dllexport)
#endif
void foo(void)
{
printf("foo()\n");
}
void bar(void);
int main(int argc, char *argv[])
{
bar();
return 0;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment