There are cases where the same string or select is repeated verbatim in a lot of diagnostics. This can be a pain to maintain and update. Tablegen provides no way stash the common text somewhere and reuse it in the diagnostics, until now!
This patch allows diagnostic texts to contain %sub{<definition-name>}, where <definition-name> names a Tablegen record of type TextSubstitution. These substitutions are done early, before the diagnostic string is otherwise processed. All %sub modifiers will be replaced before the diagnostic definitions are emitted.
The substitution must specify all arguments used by the substitution, and modifier indexes in the substitution are re-numbered accordingly. For example:
def select_ovl_candidate : TextSubstitution<"%select{function|constructor}0%select{| template| %2}1">;
when used as
"candidate `%sub{select_ovl_candidate}3,2,1 not viable"
will act as if we wrote:
"candidate %select{function|constructor}3%select{| template| %1}2 not viable"
Is there a reason this one wasn't changed to use %sub?