Use an array of strings instead of pointer smuggling

Signed-off-by: Bence Szépkúti <bence.szepkuti@arm.com>
diff --git a/tests/suites/test_suite_debug.data b/tests/suites/test_suite_debug.data
index 69e2c8b..46b6be4 100644
--- a/tests/suites/test_suite_debug.data
+++ b/tests/suites/test_suite_debug.data
@@ -1,12 +1,11 @@
-# printf_int_expr expects a smuggled string expression as its first parameter
 printf "%" MBEDTLS_PRINTF_SIZET, 0
-printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_SIZET:sizeof(size_t):0:"0"
+printf_int_expr:PRINTF_SIZET:sizeof(size_t):0:"0"
 
 printf "%" MBEDTLS_PRINTF_LONGLONG, 0
-printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_LONGLONG:sizeof(long long):0:"0"
+printf_int_expr:PRINTF_LONGLONG:sizeof(long long):0:"0"
 
 printf "%" MBEDTLS_PRINTF_MS_TIME, 0
-printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_MS_TIME:sizeof(mbedtls_ms_time_t):0:"0"
+printf_int_expr:PRINTF_MS_TIME:sizeof(mbedtls_ms_time_t):0:"0"
 
 Debug print msg (threshold 1, level 0)
 debug_print_msg_threshold:1:0:"MyFile":999:"MyFile(0999)\: Text message, 2 == 2\n"
diff --git a/tests/suites/test_suite_debug.function b/tests/suites/test_suite_debug.function
index b99e27d..9e53107 100644
--- a/tests/suites/test_suite_debug.function
+++ b/tests/suites/test_suite_debug.function
@@ -14,6 +14,18 @@
 typedef int64_t mbedtls_ms_time_t;
 #endif
 
+typedef enum {
+    PRINTF_SIZET,
+    PRINTF_LONGLONG,
+    PRINTF_MS_TIME,
+} printf_format_indicator_t;
+
+const char *const printf_formats[] = {
+    [PRINTF_SIZET]    = "%" MBEDTLS_PRINTF_SIZET,
+    [PRINTF_LONGLONG] = "%" MBEDTLS_PRINTF_LONGLONG,
+    [PRINTF_MS_TIME]  = "%" MBEDTLS_PRINTF_MS_TIME,
+};
+
 struct buffer_data {
     char buf[2000];
     char *ptr;
@@ -81,8 +93,7 @@
  */
 
 /* BEGIN_CASE */
-void printf_int_expr(intmax_t smuggle_format_expr, /* TODO: teach test framework about string expressions */
-                     intmax_t sizeof_x, intmax_t x, char *result)
+void printf_int_expr(int format_indicator, intmax_t sizeof_x, intmax_t x, char *result)
 {
 #if defined(_WIN32)
     /* Windows treats any invalid format specifiers passsed to the CRT as fatal assertion failures.
@@ -95,7 +106,7 @@
     _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
 #endif
 
-    const char *format = (char *) ((uintptr_t) smuggle_format_expr);
+    const char *format = printf_formats[format_indicator];
     char *output = NULL;
     const size_t n = strlen(result);