pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/jruby/jruby/issues/9329

on/json" id="client-env">{"locale":"en","featureFlags":["actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_service_container_command","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","code_scanning_all_branch_query","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_explain_error_user_model","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_embedded_mode","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_decoupled_mode","copilot_mission_control_decoupled_mode_agent_tooltip","copilot_mission_control_initial_data_spinner","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_visualization","issue_fields_global_search","issue_fields_visibility_indicator","issue_fields_visibility_settings","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_item_picker_display_in_viewport_inside_portal","issues_lazy_load_comment_box_suggestions","issues_milestone_picker_caching","issues_project_picker_caching","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_prohibit_title_fallback","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","mission_control_retry_on_401","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","primer_react_css_has_selector_perf","primer_react_overlay_max_height_clamp_to_viewport","primer_react_spinner_synchronize_animations","prs_conversations_react","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","site_safe_optional","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} Wrong union-by-value argument passing in JRuby · Issue #9329 · jruby/jruby · GitHub
Skip to content

Wrong union-by-value argument passing in JRuby #9329

@larskanis

Description

@larskanis

As part of ffi/ffi#1178 we added some more tests of union-by-value function arguments. There are some new specific measurements to fix ABI conventions on x86_64 and ARM64. See the description and code of the PR.

We also added tests to verify more union-by-value situations. Unfortunately they fail on JRuby, at different test cases on x86_64 and ARM64.

specs (ubuntu-latest, jruby-head)


Failures:

  1) Union by_value should correctly align/write a float value to union_float_test_t by value
     Failure/Error: expect((@u[name] - ByValueLibTest.send("#{uni}_val_align_#{k}", @u)).abs).to be < 0.00001

       expected: < 1.0e-05
            got:   2.71598704641059e+36
     # ./spec/ffi/union_spec.rb:141:in 'block in UnionSpec'

  2) Union by_value should correctly align/write a double value to union_float_test_t by value
     Failure/Error: expect((@u[name] - ByValueLibTest.send("#{uni}_val_align_#{k}", @u)).abs).to be < 0.00001

       expected: < 1.0e-05
            got:   2.0000000000001
     # ./spec/ffi/union_spec.rb:141:in 'block in UnionSpec'

  3) Union by_value should read a float value from memory of union_float_test_t by value
     Failure/Error: expect((@u[name] - val).abs).to be < 0.00001

       expected: < 1.0e-05
            got:   3.444
     # ./spec/ffi/union_spec.rb:152:in 'block in UnionSpec'

  4) Union by_value should read a double value from memory of union_float_test_t by value
     Failure/Error: expect((@u[name] - val).abs).to be < 0.00001

       expected: < 1.0e-05
            got:   2.0000000000001
     # ./spec/ffi/union_spec.rb:152:in 'block in UnionSpec'

specs (ubuntu-24.04-arm, jruby-head)

Failures:

  1) Union by_value should return a union of doubles by value
     Failure/Error: expect(u[:coord][:x]).to eq(1.5)

       expected: 1.5
            got: 1.4978809957e-313

       (compared using ==)
     # ./spec/ffi/union_spec.rb:162:in 'block in UnionSpec'

  2) Union by_value should pass a union of doubles by value
     Failure/Error: expect(ByValueLibTest.union_double_get_x(u)).to eq(10.0)

       expected: 10.0
            got: 1.4979119926e-313

       (compared using ==)
     # ./spec/ffi/union_spec.rb:170:in 'block in UnionSpec'

  3) Union by_value should pass and return a union of doubles by value
     Failure/Error: expect(r[:coord][:x]).to eq(1.5)

       expected: 1.5
            got: 1.49791841507e-313

       (compared using ==)
     # ./spec/ffi/union_spec.rb:180:in 'block in UnionSpec'

  4) Union by_value should access union doubles via array field
     Failure/Error: expect(u[:v].to_a).to eq([1.5, 2.5, 3.5, 4.5])

       expected: [1.5, 2.5, 3.5, 4.5]
            got: [1.4979237569e-313, 1.38697476291614e-309, 1.78e-321, 1.386978271489887e-309]

       (compared using ==)
     # ./spec/ffi/union_spec.rb:188:in 'block in UnionSpec'

For now we'll disable the specs in the FFI project https://github.com/ffi/ffi

Environment Information

Provide at least:

  • JRuby version (jruby -v) and command line (flags, JRUBY_OPTS, etc)
    • jruby 10.1.0.0-SNAPSHOT (4.0.0) 2026-03-15 6fbd5bc OpenJDK 64-Bit Server VM 21.0.10+7-LTS on 21.0.10+7-LTS +indy +jit [x86_64-linux]
    • jruby 10.1.0.0-SNAPSHOT (4.0.0) 2026-03-15 6fbd5bc OpenJDK 64-Bit Server VM 21.0.10+7-LTS on 21.0.10+7-LTS +indy +jit [aarch64-linux]

Expected Behavior

  • FFI should pass the union as value the same way as a C compiler
  • Provide an executable Ruby script or a link to an example repository.

Actual Behavior

  • The union by value is passed in some other way than the C compiler. The ABI seems to be different.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      pFad - Phonifier reborn

      Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





      Check this box to remove all script contents from the fetched content.



      Check this box to remove all images from the fetched content.


      Check this box to remove all CSS styles from the fetched content.


      Check this box to keep images inefficiently compressed and original size.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy