gdb
authorTom Tromey <tromey@redhat.com>
Thu, 30 Oct 2008 21:44:15 +0000 (21:44 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 30 Oct 2008 21:44:15 +0000 (21:44 +0000)
* value.c (coerce_array): Use check_typedef.
gdb/testsuite
* gdb.base/pointers.exp: Add test.
* gdb.base/pointers.c (k, S): New typedefs.
(instance): New global.

gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/pointers.c
gdb/testsuite/gdb.base/pointers.exp
gdb/value.c

index 6bb1c9b288a50782379c6a0c7e29d75b2fa18859..00c4fb7d66ce8eb0a2de97413a6e56bc99742b73 100644 (file)
@@ -1,3 +1,7 @@
+2008-10-02  Tom Tromey  <tromey@redhat.com>
+
+       * value.c (coerce_array): Use check_typedef.
+
 2008-10-28  Tom Tromey  <tromey@redhat.com>
 
        * cli/cli-logging.c (handle_redirections): Make a cleanup.
index 9ad4f2d68db5935dfc944f54876a4f4cc7ecf2d2..65966acefd58eeb8f8ab94c9f89d6a3e859245ee 100644 (file)
@@ -1,3 +1,9 @@
+2008-10-30  Tom Tromey  <tromey@redhat.com>
+
+       * gdb.base/pointers.exp: Add test.
+       * gdb.base/pointers.c (k, S): New typedefs.
+       (instance): New global.
+
 2008-10-30  Andreas Schwab  <schwab@suse.de>
 
        * gdb.base/args.exp: Add tests for newlines.
index 85bfdc98917d071632e2a83e0db366a1caf18620..4ee5e78a04a3f29ae7fc6c2f39aff210a6c53680 100644 (file)
@@ -71,6 +71,15 @@ float ** ptr_to_ptr_to_float;
 
 int y;
 
+
+typedef long k[5];
+
+typedef struct {
+  k array_variable;
+} S;
+
+S instance;
+
 /* Do nothing function used for forcing some of the above variables to
    be referenced by the program source.  If the variables are not
    referenced, some linkers will remove the symbol from the symbol
index 55321404cf247a5d7fd53b1db86a2915268eef55..d7d17e777cd6f99fb5e709a201855469b2dbb57e 100644 (file)
@@ -596,3 +596,7 @@ gdb_expect {
     timeout             { fail "(timeout) ptype ppppppC" }
 }
 
+# Regression test for a crash.
+
+gdb_test "p instance.array_variable + 0" \
+  " = \\(long int \\*\\) 0x\[0-9a-f\]*"
index 1fa376d65558dcdb76bd480052ff6f197de7b25a..695aa334390c572f52de323c31b75da974ba1fc7 100644 (file)
@@ -1728,12 +1728,21 @@ coerce_ref (struct value *arg)
 struct value *
 coerce_array (struct value *arg)
 {
+  struct type *type;
+
   arg = coerce_ref (arg);
-  if (current_language->c_style_arrays
-      && TYPE_CODE (value_type (arg)) == TYPE_CODE_ARRAY)
-    arg = value_coerce_array (arg);
-  if (TYPE_CODE (value_type (arg)) == TYPE_CODE_FUNC)
-    arg = value_coerce_function (arg);
+  type = check_typedef (value_type (arg));
+
+  switch (TYPE_CODE (type))
+    {
+    case TYPE_CODE_ARRAY:
+      if (current_language->c_style_arrays)
+       arg = value_coerce_array (arg);
+      break;
+    case TYPE_CODE_FUNC:
+      arg = value_coerce_function (arg);
+      break;
+    }
   return arg;
 }
 \f