From a25b9c4948b58c19068473ab875eb487b40d7456 Mon Sep 17 00:00:00 2001 From: Stuart Brady Date: Tue, 13 Dec 2022 17:48:35 +0000 Subject: [PATCH] Partial clean up of test_compiler_defines_for_extensions (#1577) Replace repetitions of extensions_supported[num_of_supported_extensions] with a single pointer variable. Replace character-by-character comparisons with a new string_has_prefix function. Signed-off-by: Stuart Brady Signed-off-by: Stuart Brady --- .../test_compiler_defines_for_extensions.cpp | 51 +++++++++---------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/test_conformance/compiler/test_compiler_defines_for_extensions.cpp b/test_conformance/compiler/test_compiler_defines_for_extensions.cpp index 59d620ff..624eb24e 100644 --- a/test_conformance/compiler/test_compiler_defines_for_extensions.cpp +++ b/test_conformance/compiler/test_compiler_defines_for_extensions.cpp @@ -117,6 +117,11 @@ const char *kernel_strings[] = { "}\n" }; +bool string_has_prefix(const char *str, const char *prefix) +{ + return strncmp(str, prefix, strlen(prefix)) == 0; +} + int test_compiler_defines_for_extensions(cl_device_id device, cl_context context, cl_command_queue queue, int n_elems ) { @@ -200,53 +205,47 @@ int test_compiler_defines_for_extensions(cl_device_id device, cl_context context // record the extension name uintptr_t extension_length = (uintptr_t) currentP - (uintptr_t) start; - extensions_supported[ num_of_supported_extensions ] = (char*) malloc( (extension_length + 1) * sizeof( char ) ); - if( NULL == extensions_supported[ num_of_supported_extensions ] ) + char *extension = (char *)malloc((extension_length + 1) * sizeof(char)); + if (extension == NULL) { log_error( "Error: unable to allocate memory to hold extension name: %ld chars\n", extension_length ); return -1; } - memcpy( extensions_supported[ num_of_supported_extensions ], start, extension_length * sizeof( char ) ); - extensions_supported[ num_of_supported_extensions ][extension_length] = '\0'; + extensions_supported[num_of_supported_extensions] = extension; + memcpy(extension, start, extension_length * sizeof(char)); + extension[extension_length] = '\0'; // If the extension is a cl_khr extension, make sure it is an approved cl_khr extension -- looking for misspellings here - if( extensions_supported[ num_of_supported_extensions ][0] == 'c' && - extensions_supported[ num_of_supported_extensions ][1] == 'l' && - extensions_supported[ num_of_supported_extensions ][2] == '_' && - extensions_supported[ num_of_supported_extensions ][3] == 'k' && - extensions_supported[ num_of_supported_extensions ][4] == 'h' && - extensions_supported[ num_of_supported_extensions ][5] == 'r' && - extensions_supported[ num_of_supported_extensions ][6] == '_' ) + if (string_has_prefix(extension, "cl_khr_")) { size_t ii; for( ii = 0; ii < num_known_extensions; ii++ ) { - if( 0 == strcmp( known_extensions[ii], extensions_supported[ num_of_supported_extensions ] ) ) - break; + if (strcmp(known_extensions[ii], extension) == 0) break; } if( ii == num_known_extensions ) { log_error("FAIL: Extension %s is not in the list of approved " "Khronos extensions!\n", - extensions_supported[num_of_supported_extensions]); + extension); failed = true; } } // Is it an embedded extension? - else if( memcmp( extensions_supported[ num_of_supported_extensions ], "cles_khr_", 9 ) == 0 ) + else if (string_has_prefix(extension, "cles_khr_")) { // Yes, but is it a known one? size_t ii; for( ii = 0; known_embedded_extensions[ ii ] != NULL; ii++ ) { - if( strcmp( known_embedded_extensions[ ii ], extensions_supported[ num_of_supported_extensions ] ) == 0 ) + if (strcmp(known_embedded_extensions[ii], extension) == 0) break; } if( known_embedded_extensions[ ii ] == NULL ) { log_error("FAIL: Extension %s is not in the list of approved " "Khronos embedded extensions!\n", - extensions_supported[num_of_supported_extensions]); + extension); failed = true; } else @@ -264,40 +263,36 @@ int test_compiler_defines_for_extensions(cl_device_id device, cl_context context log_error( "FAIL: Extension %s is an approved embedded extension, " "but on a non-embedded profile!\n", - extensions_supported[num_of_supported_extensions]); + extension); failed = true; } } } else { // All other extensions must be of the form cl__ - if( extensions_supported[ num_of_supported_extensions ][0] != 'c' || - extensions_supported[ num_of_supported_extensions ][1] != 'l' || - extensions_supported[ num_of_supported_extensions ][2] != '_' ) + if (!string_has_prefix(extension, "cl_")) { log_error("FAIL: Extension %s doesn't start with \"cl_\"!\n", - extensions_supported[num_of_supported_extensions]); + extension); failed = true; } - else if (extensions_supported[num_of_supported_extensions][3] == '_' - || extensions_supported[num_of_supported_extensions][3] - == '\0') + else if (extension[3] == '_' || extension[3] == '\0') { log_error("FAIL: Vendor name is missing in extension %s!\n", - extensions_supported[num_of_supported_extensions]); + extension); failed = true; } else { // look for the second underscore for name - char *p = extensions_supported[num_of_supported_extensions] + 4; + char *p = extension + 4; while (*p != '\0' && *p != '_') p++; if (*p != '_' || p[1] == '\0') { log_error( "FAIL: extension name is missing in extension %s!\n", - extensions_supported[num_of_supported_extensions]); + extension); failed = true; } }