Bug 13383 - scope for top-level using statements is wrong
Summary: scope for top-level using statements is wrong
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: c++ (show other bugs)
Version: unknown
: P2 normal
Target Milestone: 14.1
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-11-04 16:58 UTC by Tom Tromey
Modified: 2023-12-17 14:12 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tom Tromey 2011-11-04 16:58:53 UTC
Consider this:

namespace A {
  namespace B {
    namespace C {
      int x = 5;

      int nsfunc () {
	return x;
      }
    }
  }
}

namespace Q = A::B;

int xfun() {
  return Q::C::x;		// Breakpoint xfun
}

using namespace Q::C;

int yfun() {
  return x;			// Breakpoint yfun
}

int main(){
  return xfun() + yfun();
}


If you stop in xfun, then "print x" should fail.
Currently it prints A::B::C::x.

The bug here is that "using" statements aren't properly scoped.
Implementing this would probably require something like the macro
code's scope stuff to be available for using / blocks as well.
Comment 1 Hannes Domani 2023-12-17 14:12:29 UTC
This is working since gdb-14.1, I think it was fixed by this commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=68ce1575fc902958a9b1d197e2c79ea842a7776d

Now you get:
```
Breakpoint 1, xfun () at gdb-13383.cpp:16
16        return Q::C::x;               // Breakpoint xfun
                       ^
(gdb) p x
No symbol "x" in current context.
(gdb) c
Continuing.

Breakpoint 2, yfun () at gdb-13383.cpp:22
22        return x;                     // Breakpoint yfun
                 ^
(gdb) p x
$1 = 5
```