<div dir="ltr">Looks like we're doing ... something ... wrong when computing visibility for a default template argument. Perhaps we're not correctly taking into account that the lexical parent of the default template argument might have been merged with definitions from other modules (and if so, the default template argument should be considered available whenever any of the merged copies of the enclosing lexical context are visible).<div><br></div><div>I think the bug is somewhere here: <a href="https://github.com/llvm-mirror/clang/blob/master/lib/Sema/SemaLookup.cpp#L1550">https://github.com/llvm-mirror/clang/blob/master/lib/Sema/SemaLookup.cpp#L1550</a> (I think that comment is just wrong, and we should always be checking for any visible definition of the enclosing lexical context. But I suspect if we make that change we'll find a test case that shows why we need something more subtle here.)</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 26 March 2018 at 09:36, David Blaikie via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">ping</div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Wed, Mar 21, 2018 at 9:50 AM David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hey Richard (or anyone else who wants to weigh in on this), I'm seeing something I can't quite explain - figured I'd check if I was missing something obvious, or whether this is worth/requires more investigation.</div><div><br></div><div>Trying to test the modules enabled LLVM build (LLVM_ENABLE_MODULES=ON) I came across an error:<br><br><div><font face="monospace">In module 'LLVM_Utils' imported from lib/DebugInfo/PDB/Native/<wbr>ModuleDebugStream.cpp:11:</font></div><div><font face="monospace">/usr/lib/gcc/x86_64-linux-gnu/<wbr>7.3.0/../../../../include/c++/<wbr>7.3.0/bits/shared_ptr.h:278:4: error: no matching constructor for initialization</font></div><div><font face="monospace"> of '__shared_ptr<llvm::msf::<wbr>MappedBlockStream>'</font></div><div><font face="monospace">        : __shared_ptr<_Tp>(std::move(__<wbr>r)) { }  </font></div><div><font face="monospace">          ^                 ~~~~~~~~~~~~~~<br><br>...<br><br></font><div><font face="monospace">/usr/lib/gcc/x86_64-linux-gnu/<wbr>7.3.0/../../../../include/c++/<wbr>7.3.0/bits/shared_ptr_base.h:<wbr>1157:2: note: candidate template ignored: substitution failure [with _Yp = llvm::msf::MappedBlockStream, _Del = std::default_delete<llvm::msf:<wbr>:MappedBlockStream>]: default argument of '_UniqCompatible' must be imported from module 'LLVM_DebugInfo_PDB.<wbr>IPDBEnumChildren' before it is required</font></div><div><font face="monospace">        __shared_ptr(unique_ptr<_Yp, _Del>&& __r)</font></div><div><font face="monospace">        ^<br><br>I guess I should be using libcxx if I want to use modules, rather than using my system libstdc++? But even then, this seems like a rather strange error that may be indicative of a bug?<br><br>Including IPDBEnumChildren.h does fix the error - but it seems like a wholely unrelated header to have to include here... <br><br>- Dave</font></div></div></div></div></blockquote></div>
</div></div><br>______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>