From b138d0c89babc81f24c769f67bc2c7b22d90a501 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 26 Jan 2023 08:31:44 +0100 Subject: [PATCH] use alloca for compatibility with MSVC --- src/runtime/c/pgf/data.h | 6 ++++++ src/runtime/c/pgf/reader.cxx | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/runtime/c/pgf/data.h b/src/runtime/c/pgf/data.h index 86fa2baf0..eb87552aa 100644 --- a/src/runtime/c/pgf/data.h +++ b/src/runtime/c/pgf/data.h @@ -21,6 +21,12 @@ #include #endif +#ifdef _MSC_VER +#include +#define alloca _alloca +#endif + + class PGF_INTERNAL_DECL pgf_error : public std::runtime_error { public: pgf_error(const char *msg) : std::runtime_error(msg) diff --git a/src/runtime/c/pgf/reader.cxx b/src/runtime/c/pgf/reader.cxx index 183d3a179..44196bda6 100644 --- a/src/runtime/c/pgf/reader.cxx +++ b/src/runtime/c/pgf/reader.cxx @@ -728,7 +728,8 @@ static void add_to_index(ref concrete, ref lin, size_t se throw pgf_error("Found a lin which uses a category without a lincat"); size_t max_values = 1; - size_t ranges[sym_cat->r.n_terms]; + size_t *ranges = (size_t *) + alloca(sym_cat->r.n_terms*sizeof(size_t)); for (size_t i = 0; i < sym_cat->r.n_terms; i++) { for (size_t j = 0; j < result->vars->len; j++) { auto var_range = vector_elem(result->vars, j);