Adds basic parsing/sema/serialization support for the #pragma omp interop directive.
Nothing too unusual here. Some points to consider:
- A 'destroy' clause already exists that differs from 'destroy' used on 'interop' that uses a variable. This results in a nullptr for the variable when that type of 'destroy'.
- There wasn't a clearly good way to represent the 'init' clause. It has one Expr for the variable followed by an optional list of int/string Exprs so requires a TrailingExprList. I used an OMPVarListClause since it provides the functionality of trailing Exprs it doesn't really contain a 'varlist'. It didn't seem worth it to roll my own with almost the exact same functionality or rename OMPVarListClause but am open to ideas.
- I didn't do any validation of the preference-list yet. Since implementation-defined values are allowed and different implementations might only support some of the known values we might want to give a) warning for known but unsupported values and/or b) warning for completely unknown values. Or maybe warn anytime an implementation doesn't support a value. Should these value be hardcoded in the compiler at all? Or just determined from the headers?
First patch includes 'init' clause. Separately patches for 'use' and 'destroy' will follow.
Do we really need these params? I assume they are already part of Exprs though in Expr * form.