From 73cf176cac92b635933dc73a6ebeae88924ffbd6 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Mon, 12 Feb 2024 21:29:34 +0000 Subject: [PATCH] Downgrade purity checks to warning with --relaxed. Issue #848 --- src/sem.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/sem.c b/src/sem.c index 85f324ce..2443cbac 100644 --- a/src/sem.c +++ b/src/sem.c @@ -3201,14 +3201,24 @@ static bool sem_check_pcall(tree_t t, nametab_t *tab) sem_error(t, "function %s cannot call procedure %s which contains " "a wait statement", istr(tree_ident(sub)), istr(tree_ident(decl))); - else if ((flags & TREE_F_IMPURE_FILE) && in_pure_func) - sem_error(t, "pure function %s cannot call procedure %s which " - "references a file object", istr(tree_ident(sub)), - istr(tree_ident(decl))); - else if ((flags & TREE_F_IMPURE_SHARED) && in_pure_func) - sem_error(t, "pure function %s cannot call procedure %s which " - "references a shared variable", istr(tree_ident(sub)), - istr(tree_ident(decl))); + else if ((flags & TREE_F_IMPURE_FILE) && in_pure_func) { + diag_t *d = pedantic_diag(t); + if (d != NULL) { + diag_printf(d, "pure function %s cannot call procedure %s which " + "references a file object", istr(tree_ident(sub)), + istr(tree_ident(decl))); + diag_emit(d); + } + } + else if ((flags & TREE_F_IMPURE_SHARED) && in_pure_func) { + diag_t *d = pedantic_diag(t); + if (d != NULL) { + diag_printf(d, "pure function %s cannot call procedure %s which " + "references a shared variable", istr(tree_ident(sub)), + istr(tree_ident(decl))); + diag_emit(d); + } + } } return true; -- 2.39.2