The OMP standard gives an algorithm for determining the number of threads in a parallel region (page 36, algorithm 2.1 here: http://www.openmp.org/mp-documents/OpenMP3.1.pdf). The last two lines of the algorithm are reproduced here:
else if (dyn-var = false) and (ThreadsRequested > ThreadsAvailable)
then behavior is implementation defined;
Do we know what the Intel implementation is for the last line ?
The number of threads is only guaranteed to be uncertain. What you observe today may be different tomorrow. What you see in one entry may be different in different entry. Therefore if your code is written (for the affected section) to assume (require) the number of threads requested is the number of threads provided, then you have a coding error or at lease with unreasonable expectations. Note, the affected code would not run with compilation without -openmp as well as with stubs.
In this circumstance, to grant the number of threads requested would require either: a) increase the thread-limit-var, or b) have reduced team members perform missing thread team member's work by proxy (uses other team members thread number to do work). Note, b) would muck up thread local storage. a) could cause over subscription and in highly recursive situation could consume all resources.