diff --git a/doc/zstd_manual.html b/doc/zstd_manual.html
index 6bf731dd9..bd792008b 100644
--- a/doc/zstd_manual.html
+++ b/doc/zstd_manual.html
@@ -872,6 +872,28 @@ size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long
ZSTD_p_forceMaxWindow=1100, /* Force back-reference distances to remain < windowSize,
* even when referencing into Dictionary content (default:0) */
+ ZSTD_p_forceAttachDict, /* ZSTD supports usage of a CDict in-place
+ * (avoiding having to copy the compression tables
+ * from the CDict into the working context). Using
+ * a CDict in this way saves an initial setup step,
+ * but comes at the cost of more work per byte of
+ * input. ZSTD has a simple internal heuristic that
+ * guesses which strategy will be faster. You can
+ * use this flag to override that guess.
+ *
+ * Note that the by-reference, in-place strategy is
+ * only used when reusing a compression context
+ * with compatible compression parameters. (If
+ * incompatible / uninitialized, the working
+ * context needs to be cleared anyways, which is
+ * about as expensive as overwriting it with the
+ * dictionary context, so there's no savings in
+ * using the CDict by-ref.)
+ *
+ * Values greater than 0 force attaching the dict.
+ * Values less than 0 force copying the dict.
+ * 0 selects the default heuristic-guided behavior.
+ */
} ZSTD_cParameter;
diff --git a/lib/common/debug.h b/lib/common/debug.h
index 95a3fcabe..9b5878cfc 100644
--- a/lib/common/debug.h
+++ b/lib/common/debug.h
@@ -35,9 +35,10 @@
/*
* The purpose of this header is to enable debug functions.
- * They regroup assert(), DEBUGLOG() and RAWLOG().
+ * They regroup assert(), DEBUGLOG() and RAWLOG() for run-time,
+ * and DEBUG_STATIC_ASSERT() for compile-time.
*
- * By default, DEBUGLEVEL==0, which means debug is disabled.
+ * By default, DEBUGLEVEL==0, which means run-time debug is disabled.
*
* Level 1 enables assert() only.
* Starting level 2, traces can be generated and pushed to stderr.
@@ -58,7 +59,7 @@ extern "C" {
/* static assert is triggered at compile time, leaving no runtime artefact,
* but can only work with compile-time constants */
-#define DEBUG_STATIC_ASSERT(c) { enum { DEBUG_static_assert = 1/(int)(!!(c)) }; }
+#define DEBUG_STATIC_ASSERT(c) { extern char DEBUG_static_assert[(c) ? 1 : -1]; }
/* DEBUGLEVEL is expected to be defined externally,
@@ -69,7 +70,7 @@ extern "C" {
#endif
/* recommended values for DEBUGLEVEL :
- * 0 : no debug, all functions disabled (except DEBUG_STATIC_ASSERT)
+ * 0 : no debug, all run-time functions disabled
* 1 : no display, enables assert() only
* 2 : reserved, for currently active debug path
* 3 : events once per object lifetime (CCtx, CDict, etc.)