<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 18, 2015 at 10:43 AM, Robinson, Paul <span dir="ltr"><<a href="mailto:Paul_Robinson@playstation.sony.com" target="_blank">Paul_Robinson@playstation.sony.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">The as-if suggests that an explicit artificial import is an entirely appropriate, natural and good way to handle it, because it models the language behavior
 exactly without *requiring* additional smarts on the debugger side.</span></p></div></div></blockquote><div><br>I agree it is a way to handle it - but I don't understand why "without requiring* additional smarts on the debugger side" is a goal. <br><br>natural/good - I just don't agree with. The stated goal in many cases has been that the DWARF model the source as written. This is a case where that's easy and obvious to do.<br><br>* it's not requiring - it's just a degraded experience (as you say, quality of implementation - as with many places where, if the debugger doesn't understand C++, it gets a less-than-ideal user experience)<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Not all as-if statements have to be modeled directly in the DWARF, because they aren't relevant to DWARF or DWARF has other ways of achieving the same effect. 
 For example, [namespace.udir]/2 says a using-directive means "the names appear <b>
as if<i> </i></b>they were declared in the nearest enclosing namespace…" but there's no reason to generate piles of declarations in the outer namespace because, we have DW_TAG_imported_module which means exactly that.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">I don't see any good reason for artificial namespaces to be treated specially just because the namespace is anonymous and the 'using' directive isn't explicit
 in the source.</span></p></div></div></blockquote><div><br></div><div>From my perspective it seems like you're asking the producer to special case anonymous namespaces so the debugger doesn't have to. I'd simply argue the opposite - I'd like to not special case them in the producer, instead producing source-accurate debug info as much as possible, and leave it to the debugger to implement appropriate behavior.</div><div><br></div><div>The Cobol example seems perfect: We rely on consumers modeling languages correctly to import outer namespaces into inner ones in languages that support that. In the languages that don't, we rely on the consumer to know that and model it differently. If a consumer does not do this, the user gets a degraded experience (their cobol name lookup is wrong (or perhaps their non-cobol name lookup is wrong, if the debugger decided to only model the cobol side and assume all other languages work that way too)).<br><br>This seems directly analogous to anonymous namespaces - we describe the source and let the consumer model it appropriately. </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">--paulr<u></u><u></u></span></p>
<p class="MsoNormal"><a name="14f41e8b9dcb9c20__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></a></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> David Blaikie [mailto:<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>]
<br>
<b>Sent:</b> Tuesday, August 18, 2015 10:27 AM<span class=""><br>
<b>To:</b> Robinson, Paul<br>
<b>Cc:</b> <a href="mailto:reviews%2BD7895%2Bpublic%2B7827be49c0b04087@reviews.llvm.org" target="_blank">reviews+D7895+public+7827be49c0b04087@reviews.llvm.org</a>; Romanova, Katya; Eric Christopher; Frédéric Riss; Duncan P. N. Exon Smith; llvm-commits<br>
<b>Subject:</b> Re: [PATCH] D7895: Anonymous namespaces are missing import DW_TAG_imported_module.<u></u><u></u></span></span></p>
</div>
</div><span class="">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Tue, Aug 18, 2015 at 10:23 AM, Robinson, Paul <<a href="mailto:Paul_Robinson@playstation.sony.com" target="_blank">Paul_Robinson@playstation.sony.com</a>> wrote:<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">| suggests that DW_TAG_imported_module could be used for C++ using directives (of which there are none in the source code in question).<u></u><u></u></p>
<p class="MsoNormal"><a name="14f41e8b9dcb9c20_14f41d6744d7520b__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span></a><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">[namespace.unnamed]/1 says there is an implicit (as-if) using directive.</span><u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Lots of things are as-if, doesn't mean we model them in the DWARF that way, it's just an easy way of defining the behavior in terms of other stuff that's already defined in the standard. Generally we try to model things like the actual
 source where possible, it seems/usually sounds like/etc.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">--paulr</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> David Blaikie [mailto:<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>]
<br>
<b>Sent:</b> Tuesday, August 18, 2015 10:15 AM</span><u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><br>
<b>To:</b> Robinson, Paul<br>
<b>Cc:</b> <a href="mailto:reviews%2BD7895%2Bpublic%2B7827be49c0b04087@reviews.llvm.org" target="_blank">
reviews+D7895+public+7827be49c0b04087@reviews.llvm.org</a>; Romanova, Katya; Eric Christopher; Frédéric Riss; Duncan P. N. Exon Smith; llvm-commits<br>
<b>Subject:</b> Re: [PATCH] D7895: Anonymous namespaces are missing import DW_TAG_imported_module.<u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">All I'm saying is that I think this is a fine thing to have as a debugger-specific tuning for your debugger.<br>
<br>
DWARF-the-standard is language neutral, yes, so it provides features that can be used to describe many different languages. It describes (non-normatively) possible uses of DWARF features for language features, and suggests that DW_TAG_imported_module could
 be used for C++ using directives (of which there are none in the source code in question). It doesn't suggest anywhere that it should, let alone must, be used to explicitly describe name lookup rules (or we'd need those using directives in nested scopes for
 all outer scopes, for example).<span style="color:#1f497d"><u></u><u></u></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</span></div>
</div>
</div>

</blockquote></div><br></div></div>