Changing overload rules to match C++ behavior: Emit a warning when the best overload match has some number of no-best matching parameters.

This commit is contained in:
Ilia Filippov
2014-03-24 16:20:23 +04:00
parent 6f44d5b55f
commit ecdc695b22
14 changed files with 59 additions and 27 deletions

View File

@@ -16,7 +16,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
else
x[a][b-1] = 1;
a = min(a, 46);
a = min(a, 46.f);
RET[programIndex] = x[3][a];
}

View File

@@ -10,7 +10,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
for (uniform int j = 0; j < 47; ++j)
x[i][j] = 2+b-5;
a = min(a,46);
a = min(a,46.f);
x[a][b-1] = 0;
RET[programIndex] = x[2][a];
}

View File

@@ -11,7 +11,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
uniform int index[4] = { 0, 1, 2, 4 };
float v = index[programIndex & 0x3];
x[min(a,39)][v] = 0;
x[min(a,39.f)][v] = 0;
RET[programIndex] = x[v+1][v];
}

View File

@@ -4,7 +4,7 @@ export uniform int width() { return programCount; }
export void f_f(uniform float RET[], uniform float aFOO[]) {
float a = 1. / aFOO[programIndex];
RET[programIndex] = max(0, a);
RET[programIndex] = max(0.f, a);
}
export void result(uniform float RET[]) {

View File

@@ -16,7 +16,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform FuncType func[] = { bar, foo };
float a = aFOO[programIndex];
float b = aFOO[0]-1; // == 0
func[min(a, 0)] = foo;
func[min(a, 0.f)] = foo;
RET[programIndex] = func[0](a, b);
}

View File

@@ -9,7 +9,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
encore:
++RET[programIndex];
if (any(a != 0)) {
a = max(a-1, 0);
a = max(a-1, 0.f);
goto encore;
}
}

View File

@@ -6,7 +6,7 @@ export uniform int width() { return programCount; }
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
float a = aFOO[programIndex];
RET[programIndex] = max(3 * a, 10.f);
RET[width()-1] = max(b, 100);
RET[width()-1] = max(b, 100.f);
}

View File

@@ -6,7 +6,7 @@ export uniform int width() { return programCount; }
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
float a = aFOO[programIndex];
RET[programIndex] = max(-10 * (a-3), .1f);
RET[width() - 1] = max(-10 * b, 2);
RET[width() - 1] = max(-10 * b, 2.f);
}
export void result(uniform float RET[]) {

View File

@@ -6,7 +6,7 @@ export uniform int width() { return programCount; }
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
float a = aFOO[programIndex];
RET[programIndex] = min(3 * a, 10.f);
RET[width()-1] = min(b, 100);
RET[width()-1] = min(b, 100.f);
}

View File

@@ -6,7 +6,7 @@ export uniform int width() { return programCount; }
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
float a = aFOO[programIndex];
RET[programIndex] = min(-10 * (a-3), .1f);
RET[width() - 1] = min(-10 * b, 2);
RET[width() - 1] = min(-10 * b, 2.f);
}
export void result(uniform float RET[]) {

View File

@@ -19,7 +19,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
for (uniform int i = 0; i < 16; ++i)
for (uniform int j = 0; j < 16; ++j)
bar.foo[i].x[j] = b;
RET[programIndex] = bar.foo[min(15, a-1)].x[min(15, a-1)];
RET[programIndex] = bar.foo[min(15.f, a-1)].x[min(15.f, a-1)];
}
export void result(uniform float RET[]) { RET[programIndex] = 5; }