aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/call.cc3
-rw-r--r--gcc/cp/init.cc2
-rw-r--r--gcc/testsuite/g++.dg/modules/pr114856.h12
-rw-r--r--gcc/testsuite/g++.dg/modules/pr114856_a.H5
-rw-r--r--gcc/testsuite/g++.dg/modules/pr114856_b.C5
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";