{
        AllocSet        set;
 
+       /*
+        * First, validate allocation parameters.  (If we're going to throw an
+        * error, we should do so before the context is created, not after.)  We
+        * somewhat arbitrarily enforce a minimum 1K block size.
+        */
+       if (initBlockSize != MAXALIGN(initBlockSize) ||
+               initBlockSize < 1024)
+               elog(ERROR, "invalid initBlockSize for memory context: %zu",
+                        initBlockSize);
+       if (maxBlockSize != MAXALIGN(maxBlockSize) ||
+               maxBlockSize < initBlockSize ||
+               !AllocHugeSizeIsValid(maxBlockSize))    /* must be safe to double */
+               elog(ERROR, "invalid maxBlockSize for memory context: %zu",
+                        maxBlockSize);
+       if (minContextSize != 0 &&
+               (minContextSize != MAXALIGN(minContextSize) ||
+                minContextSize <= ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ))
+               elog(ERROR, "invalid minContextSize for memory context: %zu",
+                        minContextSize);
+
        /* Do the type-independent part of context creation */
        set = (AllocSet) MemoryContextCreate(T_AllocSetContext,
                                                                                 sizeof(AllocSetContext),
                                                                                 parent,
                                                                                 name);
 
-       /*
-        * Make sure alloc parameters are reasonable, and save them.
-        *
-        * We somewhat arbitrarily enforce a minimum 1K block size.
-        */
-       initBlockSize = MAXALIGN(initBlockSize);
-       if (initBlockSize < 1024)
-               initBlockSize = 1024;
-       maxBlockSize = MAXALIGN(maxBlockSize);
-       if (maxBlockSize < initBlockSize)
-               maxBlockSize = initBlockSize;
-       Assert(AllocHugeSizeIsValid(maxBlockSize)); /* must be safe to double */
+       /* Save allocation parameters */
        set->initBlockSize = initBlockSize;
        set->maxBlockSize = maxBlockSize;
        set->nextBlockSize = initBlockSize;
        /*
         * Grab always-allocated space, if requested
         */
-       if (minContextSize > ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ)
+       if (minContextSize > 0)
        {
-               Size            blksize = MAXALIGN(minContextSize);
+               Size            blksize = minContextSize;
                AllocBlock      block;
 
                block = (AllocBlock) malloc(blksize);