int main(int argc, char **argv) { vary("*cheez: %d+%d*", 0, 24); // Also tests that '0' is not special as an array ender vary("*albeit*"); // Should not fail with no var args in vararg function vary2('Q', "%d*", 85); int maxxi = getMaxi(6, 2, 5, 21, 4, -10, 19); printf("maxxi:%d*\n", maxxi); double maxxD = getMaxD(6, (double)2.1, (double)5.1, (double)22.1, (double)4.1, (double)-10.1, (double)19.1, (double)2); printf("maxxD:%.2f*\n", (float)maxxD); // And, as a function pointer void (*vfp)(const char * s, ...) = argc == 1211 ? NULL : vary; vfp("*vfp:%d,%d*", 22, 199); // ensure lists work properly when copied, reinited etc. varargs_listoffsets_main(); return 0; }
bool SpirValidation::runOnModule(Module& M) { // Holder for initialized data in the module DataHolder Data; // Initialize instruction verifiers. InstructionExecutorList iel; // Bitcast instruction verifier. VerifyBitcast vb(&ErrHolder); iel.push_back(&vb); // Call instruction verifier. VerifyCall vc(&ErrHolder); iel.push_back(&vc); // Instruction type verifier. VerifyInstructionType vit(&ErrHolder, &Data); iel.push_back(&vit); // Initialize function verifiers. FunctionExecutorList fel; // Function prototype verifier. VerifyFunctionPrototype vfp(&ErrHolder, &Data); fel.push_back(&vfp); // Initialize module verifiers. ModuleExecutorList mel; // Module triple and target data layout verifier. VerifyTripleAndDataLayout vtdl(&ErrHolder, &Data); mel.push_back(&vtdl); // Module metadata kernels verifier. VerifyMetadataKernels vkmd(&ErrHolder, &Data); mel.push_back(&vkmd); // Module OCL version verifier. VerifyMetadataVersions voclv( &ErrHolder, VerifyMetadataVersions::VERSION_OCL); mel.push_back(&voclv); // Module SPIR version verifier. VerifyMetadataVersions vspirv( &ErrHolder, VerifyMetadataVersions::VERSION_SPIR); mel.push_back(&vspirv); // Module metadata optional core features verifier. VerifyMetadataCoreFeatures vmdcf(&ErrHolder, &Data); mel.push_back(&vmdcf); // Module metadata KHR extensions verifier. VerifyMetadataKHRExtensions vmdext(&ErrHolder, &Data); mel.push_back(&vmdext); // Module metadata compiler options verifier. VerifyMetadataCompilerOptions vmdco(&ErrHolder, &Data); mel.push_back(&vmdco); // Initialize basic block iterator. BasicBlockIterator BBI(iel); // Initialize function iterator. FunctionIterator FI(fel, &BBI); // Initialize module iterator. ModuleIterator MI(mel, &FI); // Run validation. MI.execute(M); return false; }