public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Ken Werner <ken@linux.vnet.ibm.com>
To: gdb-patches@sourceware.org
Subject: [patch] const array types
Date: Wed, 15 Sep 2010 19:32:00 -0000	[thread overview]
Message-ID: <201009151920.37105.ken@linux.vnet.ibm.com> (raw)

[-- Attachment #1: Type: Text/Plain, Size: 220 bytes --]

Hi,

The attached patch changes the dwarf parsing of const types. In case the const 
qualifier is applied to an array type, the element type is so qualified, not the 
array type. Comments are welcome.

Thanks
Ken Werner

[-- Attachment #2: const_array.patch --]
[-- Type: text/x-patch, Size: 4685 bytes --]

ChangeLog:

2010-09-15  Ken Werner  <ken.werner@de.ibm.com>

	* gdb/dwarf2read.c (read_tag_const_type): Handle const arrays.

testsuite/ChangeLog:

2010-09-15  Ken Werner  <ken.werner@de.ibm.com>

	* gdb.base/constvars.c (logical, lugged, luck, lunar, lumen, lurk,
	lush, lynx) New constant.
	* gdb.base/constvars.exp: Test const array types.
	* gdb.dwarf2/dw2-strp.exp: Add const qualifier for ptype tests.

Index: gdb/dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.457
diff -p -u -r1.457 dwarf2read.c
--- gdb/dwarf2read.c	14 Sep 2010 21:28:53 -0000	1.457
+++ gdb/dwarf2read.c	15 Sep 2010 16:26:41 -0000
@@ -7617,6 +7617,29 @@ read_tag_const_type (struct die_info *di
   if (cv_type)
     return cv_type;
 
+  /* In case the const qualifier is applied to an array type, the element type
+     is so qualified, not the array type (section 6.7.3 of C99).  */
+  if (TYPE_CODE (base_type) == TYPE_CODE_ARRAY)
+    {
+      struct type *el_type, *inner_array;
+
+      base_type = copy_type (base_type);
+      inner_array = base_type;
+
+      while (TYPE_CODE (TYPE_TARGET_TYPE (inner_array)) == TYPE_CODE_ARRAY)
+	{
+	  TYPE_TARGET_TYPE (inner_array) =
+	    copy_type (TYPE_TARGET_TYPE (inner_array));
+	  inner_array = TYPE_TARGET_TYPE (inner_array);
+	}
+
+      el_type = TYPE_TARGET_TYPE (inner_array);
+      TYPE_TARGET_TYPE (inner_array) =
+	make_cv_type (1, TYPE_VOLATILE (el_type), el_type, 0);
+
+      return set_die_type (die, base_type, cu);;
+    }
+
   cv_type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0);
   return set_die_type (die, cv_type, cu);
 }
Index: gdb/testsuite/gdb.base/constvars.c
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/constvars.c,v
retrieving revision 1.4
diff -p -u -r1.4 constvars.c
--- gdb/testsuite/gdb.base/constvars.c	12 Nov 2009 19:35:26 -0000	1.4
+++ gdb/testsuite/gdb.base/constvars.c	15 Sep 2010 16:26:41 -0000
@@ -84,6 +84,16 @@ main (void)
   float          *const   lissome   = &leeway;
   double         *const   locust    = &legacy;
 
+  /* constant arrays */
+  const char logical[2] = {laconic, laconic};
+  const unsigned char lugged[2] = {laggard, laggard};
+  const short luck[2] = {lagoon, lagoon};
+  const unsigned short lunar[2] = {laity, laity};
+  const long lumen[2] = {lambent, lambent};
+  const unsigned long lurk[2] = {laminated, laminated};
+  const float lush[2] = {lampoon, lampoon};
+  const double lynx[2] = {languid, languid};
+
   /* volatile variables */
 
   volatile char vox = 'X';
Index: gdb/testsuite/gdb.base/constvars.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/constvars.exp,v
retrieving revision 1.23
diff -p -u -r1.23 constvars.exp
--- gdb/testsuite/gdb.base/constvars.exp	24 May 2010 22:03:59 -0000	1.23
+++ gdb/testsuite/gdb.base/constvars.exp	15 Sep 2010 16:26:41 -0000
@@ -253,6 +253,16 @@ proc do_constvar_tests {} {
     gdb_test "ptype locust" "type = double \\* const"
 
     local_compiler_xfail_check
+    gdb_test "ptype logical" "type = const char \\\[2\\\]"
+    gdb_test "ptype lugged" "type = const unsigned char \\\[2\\\]"
+    gdb_test "ptype luck" "type = const short( int)? \\\[2\\\]"
+    gdb_test "ptype lunar" "type = const (unsigned short|short unsigned)( int)? \\\[2\\\]"
+    gdb_test "ptype lumen" "type = const long( int)? \\\[2\\\]"
+    gdb_test "ptype lurk" "type = const (unsigned long|long unsigned)( int)? \\\[2\\\]"
+    gdb_test "ptype lush" "type = const float \\\[2\\\]"
+    gdb_test "ptype lynx" "type = const double \\\[2\\\]"
+
+    local_compiler_xfail_check
     local_compiler_xfail_check_2
     gdb_test "ptype crass" "type = struct crass \{\[\r\n\]+\[\ \t\]+char \\* const ptr;\[\r\n\]+\}"
     local_compiler_xfail_check
Index: gdb/testsuite/gdb.dwarf2/dw2-strp.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.dwarf2/dw2-strp.exp,v
retrieving revision 1.4
diff -p -u -r1.4 dw2-strp.exp
--- gdb/testsuite/gdb.dwarf2/dw2-strp.exp	1 Jan 2010 07:32:02 -0000	1.4
+++ gdb/testsuite/gdb.dwarf2/dw2-strp.exp	15 Sep 2010 17:14:32 -0000
@@ -49,7 +49,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
 gdb_test "p a_string" " = \"hello world!\\\\n\""
-gdb_test "ptype a_string" "type = char \\\[14\\\]"
+gdb_test "ptype a_string" "type = const char \\\[14\\\]"
 
 gdb_test "p a_string2" " = \"hello world2\\\\n\""
-gdb_test "ptype a_string2" "type = char \\\[14\\\]"
+gdb_test "ptype a_string2" "type = const char \\\[14\\\]"

             reply	other threads:[~2010-09-15 17:20 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-15 19:32 Ken Werner [this message]
2010-09-24  4:50 ` Jan Kratochvil
2010-09-24 15:38   ` Jan Kratochvil
2010-09-24 16:27   ` Joel Brobecker
2010-09-24 16:40     ` Pedro Alves
2010-09-24 23:00       ` Joel Brobecker
2010-09-24 18:36   ` Ken Werner
2010-10-05 18:25     ` Ulrich Weigand
2010-10-05 18:43       ` Joel Brobecker
2010-10-06 15:38       ` Ken Werner
2010-10-06 15:55         ` Ulrich Weigand
2010-10-06 16:18           ` Ken Werner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201009151920.37105.ken@linux.vnet.ibm.com \
    --to=ken@linux.vnet.ibm.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).