Clang’s own diagnostics propaganda contains this exerpt:
Since Clang has range highlighting, it never needs to pretty print your code back out to you. This is particularly bad in G++ (which often emits errors containing lowered vtable references), but even GCC can produce inscrutible error messages in some cases when it tries to do this.
Googling this phrase doesn’t give anything very helpful, and the subsequent example is completely unrelated.
Can someone please post an example of what it’s talking about?
Thanks.
Here is an example:
Clang produces:
GCC 4.2 produces:
GCC does this because its C++ frontend is bolted on top of the C frontend in many cases. Instead of building C++-specific Abstract Syntax Trees (ASTs) for various C++ operations, the parser just lowers them immediately to their C equivalent. In this case, GCC synthesizes an struct to contain the vtable, and the pointer dereference to bar is then lowered into a series of C pointer dereferences, casts, pointer arithmetic etc.
Clang does not have this problem, because it has a very clean AST that directly represents the source code. If you change the example to:
.. so that the code is valid, then ask clang to dump its ast with “clang -cc1 -ast-dump t.cc”, you get:
-Chris