Sanity check for duplicate lookup entries.
Improve debugging look and feel.
Revert UsingShadowDecls.
Workaround to advance... A decl meant to be added in the lookup already exists in the lookup table. My assumption is that the DeclReverted adds it here. This needs to be investigated mode. For now std::find gets promoted from assert to condition
Parameters and dependent variables don't end up mangled in the llvm::Module
We need the full redecl chain when reverting the function parameters.
The NamespaceDecl is a redeclarable. Don't do extra lookup fixes
Bring back macro removal (Sorry Cristina).
Remove redundant const.
The dump comes from a map, i.e it is unordered which is a killer for diff

Alphabetically sort the macro dumps and them print them out and compare them.
Add missing enum kind for the dump.
Assert immediately after failure.
Add support for typedefs, because they are redeclarables.
RecordDecls are special. They have implicitly injected class names.

struct C {
   // C is implicitly declared here as a synonym for the class name.
};

C::C c; // same as "C c;"

In this example clang will inject another declaration to provide the name C
within the record decl. For unknown reason it is added to the redecl chain.
When we revert a class decl we must make sure that the implicitly injected name
in the chain is gone.
Docs.
Tags are redeclarables.
It appears that injected class names can be before or after the definition in the chain.

Handle both cases.
Clarification.
Handle the specializations before anything else.
Handle the specializations before anything else. 'Typo' &= instead =.