It seems that the FILE macro does not get set properly if compiling a shader from multiple sources. The following Fragment
const char* sources[] = {
"#define _NOT_EMPTY_\n",
"#if(__FILE__ == 0)\n"
"#error __FILE__ not set\n"
"#endif\n",
"#if(__LINE__!=1)\n"
"#error __LINE__ not set\n"
"#endif\n",
"void main() {}\n"
};
char errorLog[1024];
GLuint shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(shader, 4, sources, 0);
glCompileShader(shader);
glGetShaderInfoLog(shader, 1024, 0, errorLog);
printf("%s\n", errorLog);
glDeleteShader(shader);
reproduces the problem: The FILE-macro seems to evaluate to zero no matter in what source string it appears and the LINE-macro evaluates to the line-number in the concatenation of all source-strings. I mean to remember that this worked ok in older Driver-Version (Prior to 310 I guess).