diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/call.cc | 3 | ||||
-rw-r--r-- | gcc/cp/init.cc | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/pr114856.h | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/pr114856_a.H | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/pr114856_b.C | 5 |
5 files changed, 26 insertions, 1 deletions
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 7c4ecf0..e058da7 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -13802,6 +13802,9 @@ make_temporary_var_for_ref_to_temp (tree decl, tree type) tree name = mangle_ref_init_variable (decl); DECL_NAME (var) = name; SET_DECL_ASSEMBLER_NAME (var, name); + + /* Set the context to make the variable mergeable in modules. */ + DECL_CONTEXT (var) = current_scope (); } else /* Create a new cleanup level if necessary. */ diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index c1b5b74..7bb98f4 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -4287,7 +4287,7 @@ create_temporary_var (tree type) TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; DECL_IGNORED_P (decl) = 1; - DECL_CONTEXT (decl) = current_scope (); + DECL_CONTEXT (decl) = current_function_decl; return decl; } diff --git a/gcc/testsuite/g++.dg/modules/pr114856.h b/gcc/testsuite/g++.dg/modules/pr114856.h new file mode 100644 index 0000000..b1a3c2c --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr114856.h @@ -0,0 +1,12 @@ +// PR c++/114856 + +#include <initializer_list> +struct A { + ~A(); +}; +struct V { + V(std::initializer_list<A>); +}; +struct data { + V v{{}}; +}; diff --git a/gcc/testsuite/g++.dg/modules/pr114856_a.H b/gcc/testsuite/g++.dg/modules/pr114856_a.H new file mode 100644 index 0000000..6195277 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr114856_a.H @@ -0,0 +1,5 @@ +// PR c++/114856 +// { dg-additional-options "-fmodule-header" } +// { dg-module-cmi {} } + +#include "pr114856.h" diff --git a/gcc/testsuite/g++.dg/modules/pr114856_b.C b/gcc/testsuite/g++.dg/modules/pr114856_b.C new file mode 100644 index 0000000..f81dc8b --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr114856_b.C @@ -0,0 +1,5 @@ +// PR c++/114856 +// { dg-additional-options "-fmodules-ts" } + +#include "pr114856.h" +import "pr114856_a.H"; |