This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Compiling GCC With a C++ Compiler (g++)



On 14/10/2004, at 5:33 AM, Dave Korn wrote:



[ Phil Edwards snecked from Cc: line in accordance with his wish to escape
"this eternal thread"! ]


-----Original Message-----
From: Geoffrey Keating
Sent: 13 October 2004 20:42

On 13/10/2004, at 8:23 AM, Dave Korn wrote:

Huh? Are you saying that in:

typedef struct { const char x } AA;

AA *py1, py2;
AA y1 = { z };

  py1 = malloc (sizeof *py2);
  py2 = &y1;

it is valid to say

*(char *)(&py1->x) = '?';

but not valid to say

*(char *)(&py2->x) = '?';

Yes, that sounds right.


Wow, we really seem to me to be entering the realm of the bizarre here.
What about this function: is it valid, conformant C?


void fubar (const char *x)
{
    *(char *)x = '?';
}

It can be part of a conforming program, yes.


Is it not implicit from what you've just told me that the answer to the
question of whether or not that function is valid conformant C depends on
whether the value of the pointer you pass into it was originally derived
from a call to malloc (valid) or by taking the address-of a local or static
variable (not valid)? Does this still make sense? It's making my mind
boggle in several directions at once.

Yes, it matters what value 'x' has. For instance, consider


int main(void)
{
  fubar(NULL);
  return 0;
}

Obviously that program is not conforming, whether or not 'x' is const.

Attachment: smime.p7s
Description: S/MIME cryptographic signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]