From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30952 invoked by alias); 19 Feb 2015 15:00:36 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 30903 invoked by uid 48); 19 Feb 2015 15:00:30 -0000 From: "redi at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c/65106] C99 intialization of struct with const member through a non-const pointer Date: Thu, 19 Feb 2015 15:00:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c X-Bugzilla-Version: 4.9.3 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: redi at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2015-02/txt/msg02130.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65106 --- Comment #3 from Jonathan Wakely --- Function arguments and return values don't modify existing objects, the copies are new objects. In the assignment in your code you modify an existing object. If it was allowed what would prevent you from doing: struct A a = { 1, 2 } struct A *ptr = &a; *ptr = (struct A) {10, 10}; Or simply: struct A *ptr = malloc(sizeof(struct A)); *ptr = (struct A) {10, 10}; *ptr = (struct A) {11, 11}; (Clang allows both of these, despite the fact they modify a const object).