The GLES Shading Language spec has this to say about the issue (section 3.4 "Preprocessor"):
#line must have, after macro substitution, one of the following two forms:
#line line #line line source-string-number
where line and source-string-number are constant integer expressions. After processing this directive (including its new-line), the implementation will behave as if the following line has line number line and starts with source string number source-string-number. Subsequent source strings will be numbered sequentially, until another #line directive overrides that numbering.
That would not rule out 0 (or even negative values). However there is also
__LINE__
will substitute a decimal integer constant that is one more than the number of preceding newlines in the current source string.
One could argue that that means that the line number can never be below 1, since that implies a negative number of newlines. YMMV.