Introduce stubs for long-vector support (#638)

* Ensure DeclVisitor and IsSupportedType fully recurse

Add test cases covering errors on long-vector types.

Ensure all the children of clang::Decl are visited by implementing more
specific methods of RecursiveASTVisitor.

Update IsSupportedType to cover additional cases and to abort on type
not explicitly covered.

* Add stubs for lowering long-vector types

Add a new, experimental command line option, --long-vector, to turn on
support for lowering long-vector types which is implemented by
LongVectorLoweringPass. For now, this pass does nothing; subsequent
commits will gradually bring in new features.

When this option is provided, accept long-vector types except when used
as kernel parameters. This feature is intentionally left unsupported for
now and should be revisited when there is definite proof that kernel
parameters can be safely lowered as well.

Add tests covering the frontend changes.

Introduce CustomDiagnosticUnsupportedKernelArgs. Remove explicit
diagnostic ID and rely on C++ to generate appropriate values for the
CustomDiagnosticType enumeration.

Update options.ll test to ensure it can be used with clspv-opt.

Signed-off-by: Marco Antognini <marco.antognini@arm.com>
diff --git a/lib/Passes.cpp b/lib/Passes.cpp
index 649ee7e..d3a0d76 100644
--- a/lib/Passes.cpp
+++ b/lib/Passes.cpp
@@ -33,6 +33,7 @@
   initializeInlineFuncWithPointerBitCastArgPassPass(r);
   initializeInlineFuncWithPointerToFunctionArgPassPass(r);
   initializeInlineFuncWithSingleCallSitePassPass(r);
+  initializeLongVectorLoweringPassPass(r);
   initializeMultiVersionUBOFunctionsPassPass(r);
   initializeOpenCLInlinerPassPass(r);
   initializeRemoveUnusedArgumentsPass(r);