From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by sourceware.org (Postfix) with ESMTPS id 5DB873857C41 for ; Fri, 11 Mar 2022 07:04:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5DB873857C41 Received: by mail-wm1-x32a.google.com with SMTP id r65so4596712wma.2 for ; Thu, 10 Mar 2022 23:04:25 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Idby0nMrZsFJ+kIE3URLBBDj/QfY0W7Mw9AH/17wkrs=; b=27V1eMAwSzSEerpjA+jpTSQWiARqhr5r99/GnnCvcEkLGby2lYkUatR6JDS9+XQziH DjEiK2MJlIVqkp8HeDyo3pnQAJulDOexl/o/WIOqQ2ryQnrqqGOTBk4QedFDMqy04OCw C60IjwhvyjK8oAaz5n1kugArAf57yIY5FBLM8dAGatfi3bgLW/ggfT7FbspHmeBXe8+R lOl9Luw/EDHePS7wHatBBPSJKSUVvLeYQjpApBSR14CeFHoCN83JYq/JG9Enj1ANi0kf I0lTTGTZQrcr5jlcyBAg+RxYVqJ8t7ldn2WsZ5IFnYWWDc3TaCDF6yGXEjc25OWMviEr NojA== X-Gm-Message-State: AOAM530eJlHYrXQBF1uofVRh5U2OFyOBiulo81S0hAL/j96uRD/eeNQT KTTiS4GN6JOS2yItRsLzlLHzqkaL0sJ9YKdpK1wiwX4KIP0= X-Google-Smtp-Source: ABdhPJxbuoFD4f+onfUhRKC3xyNw1TAZJ3TNurLPKelirTTUMUXLqLl5I4ZWQUHqTAwZHnp91nbKjbxq5byJXyaJ/GQ= X-Received: by 2002:a05:600c:3483:b0:380:edaf:d479 with SMTP id a3-20020a05600c348300b00380edafd479mr14510138wmq.20.1646982263637; Thu, 10 Mar 2022 23:04:23 -0800 (PST) MIME-Version: 1.0 From: Yangfl Date: Fri, 11 Mar 2022 15:03:47 +0800 Message-ID: Subject: Tell GCC functions do not modify struct To: gcc-help@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-help@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-help mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Mar 2022 07:04:27 -0000 Hello Everyone, I'm playing with GCC optimization and come up with a quite common scenario: struct A { int a; }; void print_a(const struct A *); int test() { const struct A a = {3}; print_a(&a); return a.a == 3; } GCC always products a load operation of a.a, that's reasonable. But my question is, how to tell GCC that the function is guaranteed to not modify the struct? I've tried `access` attribute, but that does not help. Of course I can use __builtin_unreachable around the function call to make a promise, but that is not a struct-independent solution. Thanks