This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix for PR c++/15203 and PR c++/15210


On Wednesday, March 13 2013, Tom Tromey wrote:

> Sergio> +      else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK | BSF_GNU_UNIQUE))
>
> I think this line is too long.
>
> Sergio> +# Regression test for PR c++/15203 and PR c++/15210
> Sergio> +gdb_test "print 'gnu_obj_1::method()::sintvar'" "\\$\[0-9\]+ = 4" \
> Sergio> +	   "simple object, static const int, accessing via 'class::method::variable"
>
> I think the second line should only be indented 4 spaces.
>
> Ok with those changes.

Thanks, the patch below is what I have actually committed.

        http://sourceware.org/ml/gdb-cvs/2013-03/msg00130.html

-- 
Sergio

Index: gdb/ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/ChangeLog,v
retrieving revision 1.15271
diff -u -r1.15271 ChangeLog
--- gdb/ChangeLog	14 Mar 2013 09:08:55 -0000	1.15271
+++ gdb/ChangeLog	14 Mar 2013 11:09:26 -0000
@@ -1,3 +1,13 @@
+2013-03-14  Keith Seitz  <keiths@redhat.com>
+	    Alan Matsuoka  <alanm@redhat.com>
+
+	PR c++/15203
+	PR c++/15210
+	* cp-namespace.c (cp_lookup_nested_symbol): Handle TYPE_CODE_FUNC and
+	TYPE_CODE_METHOD.
+	* elfread.c (elf_symtab_read): Handle BSF_GNU_UNIQUE for certain
+	symbols.
+
 2013-03-14  Yao Qi  <yao@codesourcery.com>
 
 	* tracepoint.c (tfile_write_status): Write 'stop_desc' of trace
Index: gdb/cp-namespace.c
===================================================================
RCS file: /cvs/src/src/gdb/cp-namespace.c,v
retrieving revision 1.65
diff -u -r1.65 cp-namespace.c
--- gdb/cp-namespace.c	31 Jan 2013 18:37:37 -0000	1.65
+++ gdb/cp-namespace.c	14 Mar 2013 11:09:26 -0000
@@ -812,6 +812,11 @@
 	   base classes.  */
 	return find_symbol_in_baseclass (parent_type, nested_name, block);
       }
+
+    case TYPE_CODE_FUNC:
+    case TYPE_CODE_METHOD:
+      return NULL;
+
     default:
       internal_error (__FILE__, __LINE__,
 		      _("cp_lookup_nested_symbol called "
Index: gdb/elfread.c
===================================================================
RCS file: /cvs/src/src/gdb/elfread.c,v
retrieving revision 1.148
diff -u -r1.148 elfread.c
--- gdb/elfread.c	6 Mar 2013 21:20:02 -0000	1.148
+++ gdb/elfread.c	14 Mar 2013 11:09:27 -0000
@@ -357,7 +357,8 @@
 	}
       else if (sym->flags & BSF_SECTION_SYM)
 	continue;
-      else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK))
+      else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK
+			     | BSF_GNU_UNIQUE))
 	{
 	  struct minimal_symbol *msym;
 
@@ -413,7 +414,7 @@
 	    }
 	  else if (sym->section->flags & SEC_CODE)
 	    {
-	      if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
+	      if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
 		{
 		  if (sym->flags & BSF_GNU_INDIRECT_FUNCTION)
 		    ms_type = mst_text_gnu_ifunc;
@@ -443,7 +444,7 @@
 	    }
 	  else if (sym->section->flags & SEC_ALLOC)
 	    {
-	      if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
+	      if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
 		{
 		  if (sym->section->flags & SEC_LOAD)
 		    {
Index: gdb/testsuite/ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/ChangeLog,v
retrieving revision 1.3583
diff -u -r1.3583 ChangeLog
--- gdb/testsuite/ChangeLog	14 Mar 2013 09:12:20 -0000	1.3583
+++ gdb/testsuite/ChangeLog	14 Mar 2013 11:09:29 -0000
@@ -1,3 +1,11 @@
+2013-03-14  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR c++/15203
+	PR c++/15210
+	* gdb.cp/m-static.cc (keepalive_int): New function.
+	(gnu_obj_1::method): New variable `sintvar', call `keepalive_int'.
+	* gdb.cp/m-static.exp: New test for `sintvar'.
+
 2013-03-14  Yao Qi  <yao@codesourcery.com>
 
 	* gdb.trace/tstatus.exp (run_trace_experiment): Save the output
Index: gdb/testsuite/gdb.cp/m-static.cc
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.cp/m-static.cc,v
retrieving revision 1.6
diff -u -r1.6 m-static.cc
--- gdb/testsuite/gdb.cp/m-static.cc	12 Feb 2013 20:27:36 -0000	1.6
+++ gdb/testsuite/gdb.cp/m-static.cc	14 Mar 2013 11:09:29 -0000
@@ -3,6 +3,7 @@
 enum region { oriental, egyptian, greek, etruscan, roman };
 
 void keepalive(bool *var) { }
+void keepalive_int (int *var) { }
 
 // Test one.
 class gnu_obj_1
@@ -21,8 +22,11 @@
 
   long method ()
   {
+    static int sintvar = 4;
     static bool svar = true;
+
     keepalive (&svar);
+    keepalive_int (&sintvar);
     return key2;
   }
 };
Index: gdb/testsuite/gdb.cp/m-static.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.cp/m-static.exp,v
retrieving revision 1.21
diff -u -r1.21 m-static.exp
--- gdb/testsuite/gdb.cp/m-static.exp	12 Feb 2013 20:27:36 -0000	1.21
+++ gdb/testsuite/gdb.cp/m-static.exp	14 Mar 2013 11:09:29 -0000
@@ -52,6 +52,11 @@
 
 # One.
 
+# simple object, static const int, accessing via 'class::method::variable'
+# Regression test for PR c++/15203 and PR c++/15210
+gdb_test "print 'gnu_obj_1::method()::sintvar'" "\\$\[0-9\]+ = 4" \
+    "simple object, static const int, accessing via 'class::method::variable"
+
 # simple object, static const bool
 gdb_test "print test1.test" "\\$\[0-9\]* = true" "simple object, static const bool"
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]