dblaikie added a comment.

Hey - thanks for this! Does look like it reproduces in modules:

foo.h:

  #pragma once
  
  template <typename T>
  struct outer {
  static void func() {
  }
  };
  
  template<typename T>
  void func() {
  }
  
  extern template struct outer<int>;
  extern template void func<int>();
  
  inline void caller() {
    outer<int>::func();
    func<int>();
  }

foo.modulemap:

  module foo { header "foo.h" }

use.cpp:

  #include "foo.h"
  template struct outer<int>;
  template void func<int>();
  int main() {
  }

Commands:

  clang-tot -cc1 -fmodules-codegen -fmodules -emit-module -fmodule-name=foo 
foo.modulemap  -x c++ -o foo.pcm
  clang-tot -cc1 -fmodules -fmodule-file=foo.pcm use.cpp -emit-obj
  clang-tot -c foo.pcm
  clang-tot foo.o use.o

This test case exercises both a member function of a class template, and a 
standalone function template. I'd like to better understand why this shows up 
for function templates but not member functions of class templates - perhaps 
there's somewhere the solution to both cases can be unified.

Ah, if I mark the standalone function template 'inline' (the implicit linkage 
of member functions) then I get the same failure for both. Haven't tested 
whether the fix is the same fix for both yet.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69779/new/

https://reviews.llvm.org/D69779



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to