diff --git a/src/macro/Directives.cc b/src/macro/Directives.cc
index 9e8ccd99da13fa0fcf89d560b9cacc7a90315a32..9d9f94c684b822b6f53140f2e0528dda81f1f4d0 100644
--- a/src/macro/Directives.cc
+++ b/src/macro/Directives.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019-2021 Dynare Team
+ * Copyright © 2019-2022 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -98,7 +98,20 @@ IncludePath::interpret(ostream &output, Environment &env, vector<filesystem::pat
       StringPtr msp = dynamic_pointer_cast<String>(expr->eval(env));
       if (!msp)
         throw StackTrace("File name does not evaluate to a string");
+#ifdef _WIN32
+      /* Trim trailing slashes and backslashes in the path. This is a
+         workaround for a GCC/MinGW bug present in version 10.2
+         https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88881, that affects
+         gcc-mingw-w64 in Debian “Bullseye” 11. It is fixed in GCC 10.3, and
+         thus should be fixed in Debian “Bookworm” 12.
+         See Madysson/estimation-codes#11. */
+      string ipstr = static_cast<string>(*msp);
+      while (ipstr.size() > 1 && (ipstr.back() == '/' || ipstr.back() == '\\'))
+        ipstr.pop_back();
+      path ip{ipstr};
+#else
       path ip = static_cast<string>(*msp);
+#endif
       if (!is_directory(ip))
         throw StackTrace(ip.string() + " does not evaluate to a valid directory");
       if (!exists(ip))