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).