New issue
Advanced search Search tips

Issue 772461 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Oct 2017
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 3
Type: Bug

Blocking:
issue 769761



Sign in to add a comment

tot win component bots no longer compile

Project Member Reported by thakis@chromium.org, Oct 6 2017

Issue description

Started here: https://build.chromium.org/p/chromium.fyi/builders/ClangToTWin64%28dbg%29/builds/8964

That build is some transient pdb writing error, but the next build has:

FAILED: base.dll base.dll.lib base.dll.pdb 
C:/b/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x64 False link.exe /nologo /IMPLIB:./base.dll.lib /DLL /OUT:./base.dll /PDB:./base.dll.pdb @./base.dll.rsp
base.dll.exp : error LNK2001: unresolved external symbol "private: class std::unique_ptr<class base::internal::`anonymous namespace'::SchedulerWorkerDelegate,struct std::default_delete<class base::internal::`anonymous namespace'::SchedulerWorkerDelegate> > __cdecl base::internal::SchedulerSingleThreadTaskRunnerManager::CreateSchedulerWorkerDelegate<class base::internal::`anonymous namespace'::SchedulerWorkerCOMDelegate>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (??$CreateSchedulerWorkerDelegate@VSchedulerWorkerCOMDelegate@?A@internal@base@@@SchedulerSingleThreadTaskRunnerManager@internal@base@@AEAA?AV?$unique_ptr@VSchedulerWorkerDelegate@?A@internal@base@@U?$default_delete@VSchedulerWorkerDelegate@?A@internal@base@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@4@H@Z)
base.dll.exp : error LNK2001: unresolved external symbol "private: class std::unique_ptr<class base::internal::`anonymous namespace'::SchedulerWorkerDelegate,struct std::default_delete<class base::internal::`anonymous namespace'::SchedulerWorkerDelegate> > __cdecl base::internal::SchedulerSingleThreadTaskRunnerManager::CreateSchedulerWorkerDelegate<class base::internal::`anonymous namespace'::SchedulerWorkerDelegate>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (??$CreateSchedulerWorkerDelegate@VSchedulerWorkerDelegate@?A@internal@base@@@SchedulerSingleThreadTaskRunnerManager@internal@base@@AEAA?AV?$unique_ptr@VSchedulerWorkerDelegate@?A@internal@base@@U?$default_delete@VSchedulerWorkerDelegate@?A@internal@base@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@4@H@Z)
base.dll.exp : error LNK2001: unresolved external symbol "private: class base::internal::SchedulerWorker * & __cdecl base::internal::SchedulerSingleThreadTaskRunnerManager::GetSharedSchedulerWorkerForTraits<class base::internal::`anonymous namespace'::SchedulerWorkerCOMDelegate>(class base::TaskTraits const &)" (??$GetSharedSchedulerWorkerForTraits@VSchedulerWorkerCOMDelegate@?A@internal@base@@@SchedulerSingleThreadTaskRunnerManager@internal@base@@AEAAAEAPEAVSchedulerWorker@12@AEBVTaskTraits@2@@Z)
base.dll.exp : error LNK2001: unresolved external symbol "private: class base::internal::SchedulerWorker * & __cdecl base::internal::SchedulerSingleThreadTaskRunnerManager::GetSharedSchedulerWorkerForTraits<class base::internal::`anonymous namespace'::SchedulerWorkerDelegate>(class base::TaskTraits const &)" (??$GetSharedSchedulerWorkerForTraits@VSchedulerWorkerDelegate@?A@internal@base@@@SchedulerSingleThreadTaskRunnerManager@internal@base@@AEAAAEAPEAVSchedulerWorker@12@AEBVTaskTraits@2@@Z)
./base.dll : fatal error LNK1120: 4 unresolved externals


This is at clang 315040. Last green was at clang 314975. So almost certainly due to r315025 :-(
 

Comment 1 by r...@chromium.org, Oct 6 2017

Reverted in r315111. I suspect this will uncover the issue that it was meant to fix.

Comment 2 by h...@chromium.org, Oct 9 2017

Status: Assigned (was: Untriaged)
Thanks for reverting; I'll take a look today.

Comment 3 by h...@chromium.org, Oct 9 2017

Status: Started (was: Assigned)
Specializations of class member function templates don't get exported, but specializations of class template member functions to. Fun times :-)

template <typename> struct __declspec(dllexport) S { void foo(); };
template<> void S<int>::foo() {}  // Exported.

struct __declspec(dllexport) T { template <typename> void bar(); };
template<> void T::bar<int>() {}  // Not exported


I suppose that makes sense because class templates can have explicit instantiation declarations, but function templates can't (I think?).

Comment 4 by h...@chromium.org, Oct 9 2017

template <typename> struct __declspec(dllexport) U { template <typename> void baz(); };
template<> template<> void U<int>::baz<int>() {}  // Not exported either.

Comment 5 by h...@chromium.org, Oct 10 2017

I believe I have a fix, but I'll wait until tomorrow when the bots calm down.

Comment 6 by h...@chromium.org, Oct 10 2017

Status: Fixed (was: Started)
Committed r315330

Sign in to add a comment