diff --git a/gcc/testsuite/g++.dg/cpp/embed-18.C b/gcc/testsuite/g++.dg/cpp/embed-18.C
new file mode 100644
index 0000000000000000000000000000000000000000..c7ab8dc5757a340df40f2120235f07cf8bc15ebc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp/embed-18.C
@@ -0,0 +1,15 @@
+// PR c++/118275
+// { dg-do compile }
+// { dg-options "" }
+
+struct A { int a; char b[]; };
+void bar (A *);
+
+void
+foo ()
+{
+  static struct A a = { .a = 1, .b = {
+#embed __FILE__
+				     } };
+  bar (&a);
+}
diff --git a/gcc/testsuite/g++.dg/ext/flexary41.C b/gcc/testsuite/g++.dg/ext/flexary41.C
new file mode 100644
index 0000000000000000000000000000000000000000..da80ba391b0f5aa8bd15cd4243839d867e800a29
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/flexary41.C
@@ -0,0 +1,24 @@
+// PR c++/118275
+// { dg-do compile }
+// { dg-options "" }
+
+struct A { int a; char b[]; };
+void bar (A *);
+
+void
+foo ()
+{
+  static struct A a = { .a = 1, .b = {
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+				     } };
+  bar (&a);
+}
diff --git a/gcc/varasm.cc b/gcc/varasm.cc
index 3538e2971fc556097fe8ea4dde7430d6858d9120..6d93fe97d7bf67b75dc41ef0b994332e5392f587 100644
--- a/gcc/varasm.cc
+++ b/gcc/varasm.cc
@@ -5648,7 +5648,8 @@ array_size_for_constructor (tree val)
 	index = TREE_OPERAND (index, 1);
       if (value && TREE_CODE (value) == RAW_DATA_CST)
 	index = size_binop (PLUS_EXPR, index,
-			    bitsize_int (RAW_DATA_LENGTH (value) - 1));
+			    build_int_cst (TREE_TYPE (index),
+					   RAW_DATA_LENGTH (value) - 1));
       if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
 	max_index = index;
     }