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.
clang-format: please reformat the code