mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02:00
glsl: Clean-up spurious error message on bad structure definitions
Previously a shader like
int X;
struct X { int i; };
void main() { gl_Position = vec4(0.0); }
would generate two error message:
0:2(19): error: struct `X' previously defined
0:2(20): error: incomplete declaration
The first one is the real error, and the second is spurious.
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
a04211ecb8
commit
f5ba4d055e
1 changed files with 24 additions and 6 deletions
|
|
@ -2455,14 +2455,32 @@ ast_declarator_list::hir(exec_list *instructions,
|
||||||
|
|
||||||
decl_type = this->type->specifier->glsl_type(& type_name, state);
|
decl_type = this->type->specifier->glsl_type(& type_name, state);
|
||||||
if (this->declarations.is_empty()) {
|
if (this->declarations.is_empty()) {
|
||||||
if (decl_type != NULL) {
|
/* If there is no structure involved in the program text, there are two
|
||||||
/* Warn if this empty declaration is not for declaring a structure.
|
* possible scenarios:
|
||||||
*/
|
*
|
||||||
if (this->type->specifier->structure == NULL) {
|
* - The program text contained something like 'vec4;'. This is an
|
||||||
|
* empty declaration. It is valid but weird. Emit a warning.
|
||||||
|
*
|
||||||
|
* - The program text contained something like 'S;' and 'S' is not the
|
||||||
|
* name of a known structure type. This is both invalid and weird.
|
||||||
|
* Emit an error.
|
||||||
|
*
|
||||||
|
* Note that if decl_type is NULL and there is a structure involved,
|
||||||
|
* there must have been some sort of error with the structure. In this
|
||||||
|
* case we assume that an error was already generated on this line of
|
||||||
|
* code for the structure. There is no need to generate an additional,
|
||||||
|
* confusing error.
|
||||||
|
*/
|
||||||
|
assert(this->type->specifier->structure == NULL || decl_type != NULL
|
||||||
|
|| state->error);
|
||||||
|
if (this->type->specifier->structure == NULL) {
|
||||||
|
if (decl_type != NULL) {
|
||||||
_mesa_glsl_warning(&loc, state, "empty declaration");
|
_mesa_glsl_warning(&loc, state, "empty declaration");
|
||||||
|
} else {
|
||||||
|
_mesa_glsl_error(&loc, state,
|
||||||
|
"invalid type `%s' in empty declaration",
|
||||||
|
type_name);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
_mesa_glsl_error(& loc, state, "incomplete declaration");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue