[llvm-bugs] [Bug 37980] New: modules reject-valid on an implicit non-trivial function that references a type in another module

via llvm-bugs llvm-bugs at lists.llvm.org
Thu Jun 28 14:56:47 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=37980

            Bug ID: 37980
           Summary: modules reject-valid on an implicit non-trivial
                    function that references a type in another module
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Modules
          Assignee: unassignedclangbugs at nondot.org
          Reporter: dblaikie at gmail.com
                CC: dgregor at apple.com, llvm-bugs at lists.llvm.org,
                    richard-llvm at metafoo.co.uk

a.cppm:
  export module a;
  export struct a {
    a();
  };

b.cppm:
  export module b;
  import a;
  export struct b {
    a m; // make b's default ctor implicitly non-trivial & reference a's
default ctor (importantly, in another module)
  };

use.cpp
  import b; // importing 'a' here is a workaround
  void f() {
    b x; // anything that requires b's default ctor
  };

$ clang++ -fmodules-ts -c -std=c++17 --precompile a.cppm
$ clang++ -fmodules-ts -c -std=c++17 --precompile b.cppm -fmodule-file=a.pcm
$ clang++ -fmodules-ts -c -std=c++17 x.cpp -fmodule-file=a.pcm
-fmodule-file=b.pcm


In file included from use.cpp:1:
b.cppm:3:15: error: definition of 'a' must be imported from module 'a'
      before it is required
export struct b {
              ^
x.cpp:4:14: note: in implicit default constructor for 'b' first required here
void f() { b x; }
             ^
a.cppm:2:15: note: previous definition is here
export struct a {
              ^
1 error generated.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180628/6334d799/attachment.html>


More information about the llvm-bugs mailing list