+2021-02-09  Tom Tromey  <tromey@adacore.com>
+
+       * ada-lang.c (coerce_unspec_val_to_type): Avoid making lazy
+       not_lval value.
+       * value.c (value_contents_copy_raw): Now static.
+       * value.h (value_contents_copy_raw): Don't declare.
+
 2021-02-09  Tom Tromey  <tromey@adacore.com>
 
        * gdbtypes.c (resolve_dynamic_struct): Handle structure with no
 
         trying to allocate some memory for it.  */
       ada_ensure_varsize_limit (type);
 
-      if (value_lazy (val)
-         || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
+      if (value_optimized_out (val))
+       result = allocate_optimized_out_value (type);
+      else if (value_lazy (val)
+              /* Be careful not to make a lazy not_lval value.  */
+              || (VALUE_LVAL (val) != not_lval
+                  && TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))))
        result = allocate_value_lazy (type);
       else
        {
          result = allocate_value (type);
-         value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
+         value_contents_copy (result, 0, val, 0, TYPE_LENGTH (type));
        }
       set_value_component_location (result, val);
       set_value_bitsize (result, value_bitsize (val));
 
    It is assumed the contents of DST in the [DST_OFFSET,
    DST_OFFSET+LENGTH) range are wholly available.  */
 
-void
+static void
 value_contents_copy_raw (struct value *dst, LONGEST dst_offset,
                         struct value *src, LONGEST src_offset, LONGEST length)
 {
 
 extern void value_contents_copy (struct value *dst, LONGEST dst_offset,
                                 struct value *src, LONGEST src_offset,
                                 LONGEST length);
-extern void value_contents_copy_raw (struct value *dst, LONGEST dst_offset,
-                                    struct value *src, LONGEST src_offset,
-                                    LONGEST length);
 
 extern struct value *allocate_repeat_value (struct type *type, int count);