Dejan Mircevski via llvm-dev
2016-Oct-13 19:59 UTC
[llvm-dev] Possible bug in TypePrinter::printElaboratedBefore?
My apologies if this topic is inappropriate; this is my first posting to
the list. I've been playing around with the printers, and I noticed
that TypePrinter::printElaboratedBefore sets the printing policy to
suppress scope before proceeding to print the type name:
http://clang.llvm.org/doxygen/TypePrinter_8cpp_source.html#l01102
I presume this is so that the qualifier wouldn't get printed twice, but the
problem is when the ElaboratedType is a TemplateSpecialization: in that
case, the scope suppression policy applies not just to the type name but
also to all the template parameters. I don't think this is correct, since
the template parameters aren't affected by the ElaboratedType qualifier, so
they do need to print their own scope if the original policy so requires.
I'm facing a problem trying to print this code outside of its original
namespace:
namespace NS {
struct A {};
class B {
public:
virtual void foo(std::vector<A> &) = 0;
};
}
When I try to print foo in a different context, I get
"std::vector<A>" for
the result, which is invalid outside NS. But if I just use
"foo(vector<A>&)" as the input (of course, with the
appropriate using
directive above it), then printing foo yields, correctly,
"vector<NS::A>".
(The upstream problem manifestation can be seen, eg, here:
https://github.com/dekimir/RamFuzz/issues/1)
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20161013/2b212cbe/attachment.html>