This makes no sense. My shader won't build on the iphone, citing a link error that is wrong. See below:

Code :
**Link failure!!**
Log contents: 
ERROR: No 'main()' function found in linked vertex shaders.
ERROR: No 'main()' function found in linked fragment shaders.
 
Shaders attached: 4
 
--Fragment shader--
precision mediump float;
 
vec4 ShadeFragment();
 
void main()
{
	gl_FragColor = ShadeFragment();
}
 
--Vertex shader--
//precision mediump float;
 
vec4 ShadeVertex();
 
void main()
{
	gl_Position = ShadeVertex();
}
 
 
--Vertex shader--
//#version 120
//#extension GL_EXT_gpu_shader4 : enable
 
precision mediump float;
 
uniform mat4 ModelViewMatrix;
uniform mat4 ModelViewProjMatrix;
uniform mat4 NormalMatrix;
uniform vec4 Color;
 
attribute vec4 Vertex;
attribute vec4 Normal;
 
varying vec4 out_color;
 
/*******************************************************
*  Fixed.vert Fixed Function Equivalent Vertex Shader  *
*   Automatically Generated by 3Dlabs GLSL ShaderGen   *
*             [url]http://developer.3dlabs.com[/url]              *
*******************************************************/
vec4 Ambient;
vec4 Diffuse;
vec4 Specular;
 
 
void pointLight(in int i, in vec3 normal, in vec3 eye, in vec3 ecPosition3)
{
   float nDotVP;       // normal . light direction
   float nDotHV;       // normal . light half vector
   float pf;           // power factor
   float attenuation;  // computed attenuation factor
   float d;            // distance from surface to light source
   vec3  VP;           // direction from surface to light position
   vec3  halfVector;   // direction of maximum highlights
 
   // Compute vector from surface to light position
   VP = vec3 (0,0,1) - ecPosition3;
 
   // Compute distance between surface and light position
   d = length(VP);
 
   // Normalize the vector from surface to light position
   VP = normalize(VP);
 
   // Compute attenuation
   attenuation = 1.0;
 
   halfVector = normalize(VP + eye);
 
   nDotVP = max(0.0, dot(normal, VP));
   nDotHV = max(0.0, dot(normal, halfVector));
 
   if (nDotVP == 0.0)
   {
       pf = 0.0;
   }
   else
   {
       pf = pow(nDotHV, 100.0);
   }
   Ambient  += vec4(0);
   Diffuse  += vec4(1,1,1,1) * nDotVP;
   Specular += vec4(1,1,1,1) * pf;
}
 
vec3 fnormal(void)
{
    //Compute the normal 
    vec3 normal = (NormalMatrix * Normal).xyz;
    normal = normalize(normal);
    return normal;
}
 
void flight(in vec3 normal, in vec4 ecPosition, float alphaFade)
{
    vec4 color;
    vec3 ecPosition3;
    vec3 eye;
 
    ecPosition3 = (vec3 (ecPosition)) / ecPosition.w;
    eye = vec3 (0.0, 0.0, 1.0);
 
    // Clear the light intensity accumulators
    Ambient  = vec4 (0.0);
    Diffuse  = vec4 (0.0);
    Specular = vec4 (0.0);
 
    pointLight(0, normal, eye, ecPosition3);
 
    color = Ambient*vec4(0.2, 0.2, 0.2, 1.0) +
            Diffuse*Color;
    color += Specular;
    color = clamp( color, 0.0, 1.0 );
    out_color = color;
 
    out_color.a *= alphaFade;
}
 
 
vec4 ShadeVertex()
{
    vec3  transformedNormal;
    float alphaFade = 1.0;
 
    // Eye-coordinate position of vertex, needed in various calculations
    vec4 ecPosition = ModelViewMatrix * Vertex;
 
    // Do fixed functionality vertex transform
    transformedNormal = fnormal();
    flight(transformedNormal, ecPosition, alphaFade);
    return ModelViewProjMatrix * Vertex;	
}
 
 
--Fragment shader--
//#version 120
//#extension GL_EXT_gpu_shader4 : enable
 
precision mediump float;
varying vec4 out_color;
 
/*******************************************************
* Fixed.frag Fixed Function Equivalent Fragment Shader *
*   Automatically Generated by 3Dlabs GLSL ShaderGen   *
*             [url]http://developer.3dlabs.com[/url]              *
*******************************************************/
 
vec4 ShadeFragment() 
{
    return out_color;
}

Did apple screw up the OpenGLES 2.0 implementation on the iphone simulator?