aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/dwarf2/read.c2
-rw-r--r--gdb/maint.c2
-rw-r--r--gdb/unittests/array-view-selftests.c25
3 files changed, 25 insertions, 4 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 00856b8..ed10123 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -14936,7 +14936,7 @@ add_variant_property (struct field_info *fip, struct type *type,
offset_map[fip->fields[i].offset] = i;
struct objfile *objfile = cu->per_objfile->objfile;
- gdb::array_view<variant_part> parts
+ gdb::array_view<const variant_part> parts
= create_variant_parts (&objfile->objfile_obstack, offset_map, fip,
fip->variant_parts);
diff --git a/gdb/maint.c b/gdb/maint.c
index bcc71aa..e03abfa 100644
--- a/gdb/maint.c
+++ b/gdb/maint.c
@@ -1158,7 +1158,7 @@ maintenance_selftest (const char *args, int from_tty)
auto grp = make_maintenance_selftest_option_group (&opts);
gdb::option::process_options
(&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
- gdb_argv argv (args);
+ const gdb_argv argv (args);
selftests::run_tests (argv.as_array_view (), opts.verbose);
#else
printf_filtered (_("\
diff --git a/gdb/unittests/array-view-selftests.c b/gdb/unittests/array-view-selftests.c
index b62369b..43b7434 100644
--- a/gdb/unittests/array-view-selftests.c
+++ b/gdb/unittests/array-view-selftests.c
@@ -21,6 +21,7 @@
#include "gdbsupport/selftest.h"
#include "gdbsupport/array-view.h"
#include <array>
+#include <vector>
namespace selftests {
namespace array_view_tests {
@@ -86,8 +87,8 @@ struct A { int i; };
struct B : A { int j; };
struct C : A { int l; };
-/* Check that there's no array->view conversion for arrays of derived
- types or subclasses. */
+/* Check that there's no array->view conversion for arrays of derived types or
+ subclasses. */
static constexpr bool
check ()
{
@@ -116,9 +117,29 @@ check ()
&& !is_convertible <C, array_view<B>> ());
}
+/* Check that there's no container->view conversion for containers of derived
+ types or subclasses. */
+
+template<template<typename ...> typename Container>
+static constexpr bool
+check_ctor_from_container ()
+{
+ using gdb::array_view;
+
+ return ( is_convertible <Container<A>, array_view<A>> ()
+ && !is_convertible <Container<B>, array_view<A>> ()
+ && !is_convertible <Container<C>, array_view<A>> ()
+
+ && !is_convertible <Container<A>, array_view<B>> ()
+ && is_convertible <Container<B>, array_view<B>> ()
+ && !is_convertible <Container<C>, array_view<B>> ());
+}
+
} /* namespace no_slicing */
static_assert (no_slicing::check (), "");
+static_assert (no_slicing::check_ctor_from_container<std::vector> (), "");
+static_assert (no_slicing::check_ctor_from_container<gdb::array_view> (), "");
/* Check that array_view implicitly converts from std::vector. */