glEnableVertexAttribArray takes am attribute location value which you get with glGetAttribLocation. however, glGetAttribLocation returns a SIGNED integer, and
glEnableVertexAttribArray takes an UNsigned integer, as shown by ths following links (and this is how it is implemented in glew):
GLint glGetAttribLocation(GLuint program, const GLchar * name); void glEnableVertexAttribArray(GLuint index);
am I overlooking something important?