https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119763

            Bug ID: 119763
           Summary: [modules] Declarations in extern "C++" incorrectly
                    treated as attached to named module
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nshead at gcc dot gnu.org
  Target Milestone: ---

Consider:

  // main.cpp
  export module M;
  extern "C++" {
    static int internal() { return 123; }
    export struct S {
      int foo() { return internal(); }
    };
  }

$ g++ -fmodules -S main.cpp
main.cpp:5:9: error: 'int S::foo()' exposes TU-local entity 'int internal()'
    5 |     int foo() { return internal(); }
      |         ^~~
main.cpp:3:14: note: 'int internal()' declared with internal linkage
    3 |   static int internal() { return 123; }
      |              ^~~~~~~~

But this is wrong: by https://eel.is/c++draft/module.unit#7.2.2, 'S' is
attached to the global module, and so by https://eel.is/c++draft/class.mfct#1
it should be declared 'inline', which means that this is not an exposure.

Reply via email to