[cfe-dev] __PRETTY_FUNCTION__ in clang

Keane, Erich via cfe-dev cfe-dev at lists.llvm.org
Thu Feb 1 09:56:48 PST 2018


This is actually something I’ve talked about quite a bit lately internally.  If this were a few years ago before we implemented __PRETTY_FUNCTION__, I definitely would have been in the camp of matching GCC’s behavior.

However, my current opinion (which is only my own), is that we shouldn’t mess with it.  There are a couple of libraries that depend on the format to be as it is.  There is a boost library that slips my mind at the moment that does a ton of template magic based on the format of __PRETTY_FUNCTION__ that would be broken and have to be conditionalized.  I would fear breaking them again.

From: cfe-dev [mailto:cfe-dev-bounces at lists.llvm.org] On Behalf Of Mikhail Ramalho via cfe-dev
Sent: Thursday, February 1, 2018 9:50 AM
To: Mikhail Ramalho via cfe-dev <cfe-dev at lists.llvm.org>
Subject: [cfe-dev] __PRETTY_FUNCTION__ in clang

Hi all,

I recently noticed that clang and gcc print __PRETTY_FUNCTION__ in different formats, e.g.:

template <typename T> struct X
{
  X() { std::cout << __PRETTY_FUNCTION__ << '\n';}
};
X<void> x;

In gcc:
X<T>::X() [with T = void]

In clang:
X<void>::X() [T = void]

I only found a discussion about it from 2011, that added the template args to the output:

http://clang-developers.42468.n3.nabble.com/clang-and-gcc-implement-PRETTY-FUNCTION-differently-td3550386.html

I also created a patch that implements the gcc format, but broke all the diagnostic tests, because it needs the instantiated name to report  warning/errors (which is correct in my opinion).

One solution would be adding a new attribute in PrintingPolicy to handle the case where we want to print these predefined expressions, then enabling it in PredefinedExpr::ComputeName.

Is there any interest in the community to match gcc's output? There are some valid points in the previous thread.

Thank you,

--

Mikhail Ramalho.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180201/e47ab184/attachment.html>


More information about the cfe-dev mailing list