From 775c45c60eddb9282f523dd116ac5f257f1024ae Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Wed, 12 Mar 2025 09:17:45 -0700 Subject: [PATCH] Do not lookup compiler options by name when attaching. Also, fix a pre-existing bug that caused incorrect compiler option propagation with nested attachments. Fixes #2480. PiperOrigin-RevId: 736156202 Change-Id: Ib430493e8c60556c2312603198587b39de9b8a4a --- src/user/user_objects.cc | 20 +++++++++++++------- test/user/user_api_test.cc | 8 ++++---- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index eed727be..d06a121f 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -1009,35 +1009,41 @@ mjCBody& mjCBody::operator-=(const mjCBody& subtree) { // set model of this body and its subtree void mjCBody::SetModel(mjCModel* _model) { model = _model; - mjSpec* origin = model->FindSpec(mjs_getString(model->spec.modelname)); + mjSpec* origin = _model->FindSpec(compiler); compiler = origin ? &origin->compiler : &model->spec.compiler; for (auto& body : bodies) { body->SetModel(_model); } for (auto& frame : frames) { + origin = _model->FindSpec(frame->compiler); frame->model = _model; - frame->compiler = compiler; + frame->compiler = origin ? &origin->compiler : &model->spec.compiler; } for (auto& geom : geoms) { + origin = _model->FindSpec(geom->compiler); geom->model = _model; - geom->compiler = compiler; + geom->compiler = origin ? &origin->compiler : &model->spec.compiler; } for (auto& joint : joints) { + origin = _model->FindSpec(joint->compiler); joint->model = _model; - joint->compiler = compiler; + joint->compiler = origin ? &origin->compiler : &model->spec.compiler; } for (auto& site : sites) { + origin = _model->FindSpec(site->compiler); site->model = _model; - site->compiler = compiler; + site->compiler = origin ? &origin->compiler : &model->spec.compiler; } for (auto& camera : cameras) { + origin = _model->FindSpec(camera->compiler); camera->model = _model; - camera->compiler = compiler; + camera->compiler = origin ? &origin->compiler : &model->spec.compiler; } for (auto& light : lights) { + origin = _model->FindSpec(light->compiler); light->model = _model; - light->compiler = compiler; + light->compiler = origin ? &origin->compiler : &model->spec.compiler; } } diff --git a/test/user/user_api_test.cc b/test/user/user_api_test.cc index 1d0941fe..f648cd77 100644 --- a/test/user/user_api_test.cc +++ b/test/user/user_api_test.cc @@ -2342,13 +2342,13 @@ TEST_F(MujocoTest, KeyframeSizeError) { TEST_F(MujocoTest, DifferentUnitsAllowed) { static constexpr char gchild_xml[] = R"( - - + + - + - +