mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
c++/modules: import confict with builtin
27_io/headers/iostream/synopsis.cc was failing with modules because pushdecl called update_binding for a redeclared import while passing the built-in clog as "old". This could also be fixed by discarding the builtin in e.g. import_module_binding, but this seems straightforward. gcc/cp/ChangeLog: * name-lookup.cc (pushdecl): Discard built-in sooner. gcc/testsuite/ChangeLog: * g++.dg/modules/builtin-9_a.C: New test. * g++.dg/modules/builtin-9_b.C: New test.
This commit is contained in:
@@ -4063,6 +4063,11 @@ pushdecl (tree decl, bool hiding)
|
||||
}
|
||||
}
|
||||
|
||||
/* Skip a hidden builtin we failed to match already. There can
|
||||
only be one. */
|
||||
if (old && anticipated_builtin_p (old))
|
||||
old = OVL_CHAIN (old);
|
||||
|
||||
/* Check for redeclaring an import. */
|
||||
if (slot && *slot && TREE_CODE (*slot) == BINDING_VECTOR)
|
||||
if (tree match
|
||||
@@ -4081,11 +4086,6 @@ pushdecl (tree decl, bool hiding)
|
||||
|
||||
/* We are pushing a new decl. */
|
||||
|
||||
/* Skip a hidden builtin we failed to match already. There can
|
||||
only be one. */
|
||||
if (old && anticipated_builtin_p (old))
|
||||
old = OVL_CHAIN (old);
|
||||
|
||||
if (hiding)
|
||||
; /* Hidden bindings don't shadow anything. */
|
||||
else
|
||||
|
||||
16
gcc/testsuite/g++.dg/modules/builtin-9_a.C
Normal file
16
gcc/testsuite/g++.dg/modules/builtin-9_a.C
Normal file
@@ -0,0 +1,16 @@
|
||||
// Test that the built-in clog doesn't interfere with redeclaring the import.
|
||||
|
||||
// { dg-additional-options "-fmodules -Wno-global-module" }
|
||||
|
||||
module;
|
||||
|
||||
namespace std {
|
||||
class ostream;
|
||||
extern ostream clog;
|
||||
}
|
||||
|
||||
export module M;
|
||||
|
||||
namespace std {
|
||||
export using std::clog;
|
||||
}
|
||||
8
gcc/testsuite/g++.dg/modules/builtin-9_b.C
Normal file
8
gcc/testsuite/g++.dg/modules/builtin-9_b.C
Normal file
@@ -0,0 +1,8 @@
|
||||
// { dg-additional-options -fmodules }
|
||||
|
||||
import M;
|
||||
|
||||
namespace std {
|
||||
class ostream;
|
||||
extern ostream clog;
|
||||
}
|
||||
Reference in New Issue
Block a user