This is the mail archive of the gcc-patches@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: [PATCH] Fix PR middle-end/26306


Richard Kenner wrote:

When you're talking about an aggegate type, you can easily get caught up in
higher-level semantics.

My beef with AGGREGATE_TYPE_P is that I can't see any reason that an SImode "struct S { int i; }" should be treated differently from plain "int i". Even accepting the arguments about hardware registers, etc., I would still have a hard time explaining why the struct should behave differently from the scalar.


Nobody writes code that does this sort of stuff anymore: volatile is
typically used for very different purposes now (shared memory).  So, in my
opinion, all we care about is legacy code and for that, the only important
thing is to generate EXACTLY the same things we used to: trying to define
some new semantic for a case that nobody will use in modern code seems
dubious to me.

Even under that argument, AGGREGATE_TYPE_P still isn't the right thing, since, IIUC, what we tested before was BLKmode. Shouldn't the test be using that instead, if our goal is to replicate the old semantics?


I'm not sure why the semantics of:

  struct S { int i; };
  volatile struct S s;
  s;

should be different between machines just because on some machines we give the structure SImode while on others we might give it BLKmode. But, given that volatile is (as you say) a very low-level thing, with inherently system-dependent variations, I'd be OK with that.

--
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713


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