public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/100617] New: [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace @ 2021-05-15 19:42 amorvincitomnia.iw at gmail dot com 2021-05-16 8:53 ` [Bug c++/100617] " amorvincitomnia.iw at gmail dot com ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: amorvincitomnia.iw at gmail dot com @ 2021-05-15 19:42 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100617 Bug ID: 100617 Summary: [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace Product: gcc Version: 11.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: amorvincitomnia.iw at gmail dot com Target Milestone: --- See it live: https://wandbox.org/permlink/1Tgk83eCk7VYm3a3 Minimum code to reproduce the error: //test2.cc export module test2; export namespace A{} //test1.cc export module test1; import test2; export namespace A{ int a = 3; } //prog.cc import test1; void g(){ A::a; } Compile it with: $ g++ "-std=c++20" "-fmodules-ts" "test2.cc" "test1.cc" "prog.cc" Results in error: prog.cc: In function 'void g()': prog.cc:5:5: error: 'A' has not been declared 5 | A::a; | ^ Reproduces in both g++ 11.1.0 and g++ 12.0.0 20210510. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/100617] [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace 2021-05-15 19:42 [Bug c++/100617] New: [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace amorvincitomnia.iw at gmail dot com @ 2021-05-16 8:53 ` amorvincitomnia.iw at gmail dot com 2022-02-11 12:47 ` asynts+bugs at gmail dot com ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: amorvincitomnia.iw at gmail dot com @ 2021-05-16 8:53 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100617 --- Comment #1 from wang ivor <amorvincitomnia.iw at gmail dot com> --- A workaround is to create a module that exports only the namespace A and 'export import' it in the module 'test1'. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/100617] [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace 2021-05-15 19:42 [Bug c++/100617] New: [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace amorvincitomnia.iw at gmail dot com 2021-05-16 8:53 ` [Bug c++/100617] " amorvincitomnia.iw at gmail dot com @ 2022-02-11 12:47 ` asynts+bugs at gmail dot com 2022-02-11 13:02 ` johelegp at gmail dot com 2024-02-11 14:15 ` nshead at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: asynts+bugs at gmail dot com @ 2022-02-11 12:47 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100617 Paul Scharnofske <asynts+bugs at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |asynts+bugs at gmail dot com --- Comment #2 from Paul Scharnofske <asynts+bugs at gmail dot com> --- I ran into the same issue and produced a slightly different example: ```c++ // foo.cpp export module foo; import bar; namespace foo { export void foo() { } } ``` ```c++ // bar.cpp export module bar; namespace foo { } ``` ```c++ // baz.cpp export module baz; import foo; import bar; int main() { foo::foo(); } ``` ```none $ ~/.local/lib/gcc-trunk/bin/g++ --version g++ (GCC) 12.0.1 20220211 (experimental) Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ ~/.local/lib/gcc-trunk/bin/g++ -Wall -Wextra -std=c++20 -fmodules-ts bar.cpp foo.cpp baz.cpp baz.cpp: In function 'int main()': baz.cpp:8:5: error: 'foo' has not been declared 8 | foo::foo(); | ^~~ baz.cpp: At global scope: baz.cpp:2:8: warning: not writing module 'baz' due to errors 2 | export module baz; | ^~~~~~ ``` https://godbolt.org/z/8zMaq6eqr - In other words, the 'export' specifier doesn't even have to be mentioned. It is enough if the same namespace is mentioned even if it is completely empty and not exported. - The issue disappears if the 'import bar' is removed from 'foo.cpp', in other words, this only happens if that module is actually imported. It doesn't matter that it's still imported in 'baz.cpp'. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/100617] [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace 2021-05-15 19:42 [Bug c++/100617] New: [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace amorvincitomnia.iw at gmail dot com 2021-05-16 8:53 ` [Bug c++/100617] " amorvincitomnia.iw at gmail dot com 2022-02-11 12:47 ` asynts+bugs at gmail dot com @ 2022-02-11 13:02 ` johelegp at gmail dot com 2024-02-11 14:15 ` nshead at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: johelegp at gmail dot com @ 2022-02-11 13:02 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100617 --- Comment #3 from Johel Ernesto Guerrero Peña <johelegp at gmail dot com> --- (In reply to wang ivor from comment #1) > A workaround is to create a module that exports only the namespace A and > 'export import' it in the module 'test1'. I did that, but it's not enough. See Bug 102524. I export a `detail` namespace like this to workaround the issue in its parent namespace: ```C++ export module waarudo.details.workaround_gcc_bug_100617; export namespace waarudo::detail { void workaround_gcc_bug_100617() { } } // namespace waarudo::detail ``` ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/100617] [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace 2021-05-15 19:42 [Bug c++/100617] New: [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace amorvincitomnia.iw at gmail dot com ` (2 preceding siblings ...) 2022-02-11 13:02 ` johelegp at gmail dot com @ 2024-02-11 14:15 ` nshead at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: nshead at gcc dot gnu.org @ 2024-02-11 14:15 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100617 Nathaniel Shead <nshead at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=100707 Assignee|unassigned at gcc dot gnu.org |nshead at gcc dot gnu.org Target Milestone|--- |14.0 Resolution|--- |FIXED CC| |nshead at gcc dot gnu.org Status|UNCONFIRMED |RESOLVED --- Comment #4 from Nathaniel Shead <nshead at gcc dot gnu.org> --- Fixed with r14-8407-gb433a6f5a0617d. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-02-11 14:15 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-05-15 19:42 [Bug c++/100617] New: [modules] Exported namespace not visible from outside when the module imports another module that declares the same namespace amorvincitomnia.iw at gmail dot com 2021-05-16 8:53 ` [Bug c++/100617] " amorvincitomnia.iw at gmail dot com 2022-02-11 12:47 ` asynts+bugs at gmail dot com 2022-02-11 13:02 ` johelegp at gmail dot com 2024-02-11 14:15 ` nshead at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).