it’s not in the spec
How did you manage to quote the spec and yet not read it? The spec says that the restart settings given by the OP are the exact equivalent to:
glDrawElements(GL_LINES, 4 , GL_UNSIGNED_INT ,(GLvoid *)0);
glDrawElements(GL_LINES, 4 , GL_UNSIGNED_INT ,(GLvoid *)(5 * sizeof(GLuint));
That’s how the spec translates it: the same parameters except starting from the next index and continuing to the end.
The spec’s language with regard to primitive restarting makes no exceptions for primitive types, geometry shaders, or anything at all. If the above two commands are defined behavior, then according to the spec, it should work. Therefore, if it doesn’t, (and everything else is correct), it is a driver bug.
The original NV_primitive_restart specifies behaviour with lines/points/etc.
Really? Where? Search the entire specification, and you will find not a single reference to POINTS, LINES, or TRIANGLES. Oh, you’ll find discussion in the non-normative parts. IE: the Issues and Overview section. But as previously stated, those are non-normative. They don’t actually describe how OpenGL should work under the extension; they’re just plain-text information. A summary. It has no impact on what the true behavior will be.
The language for NV_primitive_restart is functionally identical to the core language. The principle difference is how they’re specified. As old-school GL functionality, NV_primitive_restart is defined around the immediate mode function glPrimitiveRestartNV. This is how it defines the behavior of the function:
It makes no mention of specific primitives or the behavior thereof. It doesn’t need to, because the logic for glEnd and glBegin already covers it. And the array section simply says that reading the restart index functions as if glPrimitiveRestartNV were called (since array rendering is defined in terms of glArrayElement).