Coincidentally, I looked at this code the other day. IMO running the mangler twice for __FUNCDNAME__ is silly. Is there a problem with computing the string in Sema and storing it on the PredefinedExpr? It looks like we always have to do this just to build the type. http://reviews.llvm.org/D5365