summaryrefslogtreecommitdiff
path: root/src/compiler/nir/nir_opt_large_constants.c
diff options
context:
space:
mode:
authorSergii Romantsov <sergii.romantsov@globallogic.com>2019-09-12 15:28:45 +0300
committerConnor Abbott <cwabbott0@gmail.com>2019-09-16 07:58:49 +0000
commitc7b2a2fd363f57bb1ab4d7d6bad786af7e2924ef (patch)
tree54161e7c559450fc621f3fe794a4a218b8ed039b /src/compiler/nir/nir_opt_large_constants.c
parent237e6f4fed2b78be0fae7991abbd496307c35a36 (diff)
nir/large_constants: more careful data copying
A filed of nir_variable.location may be equel to -1. That may cause copying to invalid address of list-node, making some internal fields corrupted. Patch fixes segfault during freeing context due to corrupted address of ralloc_header.destructor. v2: copy data if var is constant (Connor Abbott) CC: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Fixes: b6d475356846 (nir/large_constants: De-duplicate constants) Signed-off-by: Sergii Romantsov <sergii.romantsov@globallogic.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111676 Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Diffstat (limited to 'src/compiler/nir/nir_opt_large_constants.c')
-rw-r--r--src/compiler/nir/nir_opt_large_constants.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/compiler/nir/nir_opt_large_constants.c b/src/compiler/nir/nir_opt_large_constants.c
index fae4ed27960..8fd1f0d2e99 100644
--- a/src/compiler/nir/nir_opt_large_constants.c
+++ b/src/compiler/nir/nir_opt_large_constants.c
@@ -318,7 +318,7 @@ nir_opt_large_constants(nir_shader *shader,
shader->constant_data = rzalloc_size(shader, shader->constant_data_size);
for (int i = 0; i < num_locals; i++) {
struct var_info *info = &var_infos[i];
- if (!info->duplicate) {
+ if (!info->duplicate && info->is_constant) {
memcpy((char *)shader->constant_data + info->var->data.location,
info->constant_data, info->constant_data_size);
}