home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   alt.os.development      Operating system development chatter      4,255 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 3,615 of 4,255   
   Alexei A. Frounze to Alexei A. Frounze   
   Re: clang bug   
   02 Mar 23 00:40:43   
   
   From: alexfrunews@gmail.com   
      
   On Thursday, March 2, 2023 at 12:30:12 AM UTC-8, Alexei A. Frounze wrote:   
   > On Wednesday, March 1, 2023 at 10:47:09 PM UTC-8, muta...@gmail.com wrote:    
   > > On Thursday, March 2, 2023 at 1:34:09 PM UTC+8, Alexei A. Frounze wrote:    
   > > > On Wednesday, March 1, 2023 at 8:53:51 PM UTC-8, muta...@gmail.com   
   wrote:    
   > > > > Ok, I'm back on my computer now and was able to raise a bug report:    
   > > > >    
   > > > > https://github.com/llvm/llvm-project/issues/61112    
   > > > >    
   > > > > BFN. Paul.    
   > > > Without looking any further, you're taking address of a parameter (p),    
   > > > and doing pointer arithmetic on it. The only valid arithmetic here    
   > > > would be adding 0 or 1, but not 5, 6 or 7. But even if you add 1 to &p,    
   > > > you aren't allowed to dereference it (as in *(&p + 1)).    
   > > > You can only subtract the 1 back (as in (&p + 1) - 1) or compute    
   > > > a difference of that and &p (as in (&p + 1) - &p or the other way   
   around).    
   > > > Your shady pointer manipulation is undefined behavior and    
   > > > I almost guarantee your clang bug being soon closed as invalid.    
   > > >    
   > > > Write clean code. OK, write cleaner code. Maybe, refresh your ANSI C    
   > > > to get there.    
   > > "undefined behavior" shouldn't mean "let's leave the stack    
   > > uninitialized, and not even issue a warning". It just means    
   > > you can't guarantee what the result will be.   
   > This is wishful thinking. The standard means that all bets are off    
   > regardless of your thinking of what should or should not be.   
   > > But you can still give a sensible result.   
   > Sure. Garbage in, garbage out, as is the case here, is a sensible result.   
   > > In this case, I am trying to inspect the stack. I'm using    
   > > knowledge of the x86 as to what the stack looks like,    
   > > and the calling convention.   
   > If the compiler inlines some code or uses link-time optimization,    
   > there may be no stack at all. This likely won't happen if the caller    
   > is some assembly code, but throw in enough C and it becomes    
   > a possibility.   
   > > Yes. That code won't work on every platform in the world.    
   > >    
   > > But it should work perfectly fine when I know the layout.   
   > If you use an ancient compiler or disable optimizations in a modern    
   > one, maybe.   
   > > It is not in the spirit of C to catch every undefined behavior    
   > > and throw an error. And in this case, even throwing an error    
   > > would be better than silent failure and garbage.   
   > The standard does not require to detect undefined behavior    
   > at compile or run time and inform of it. In some cases such    
   > detection is impractically expensive if not outright impossible.   
   > > Even if setting a pointer to the arbitrary value 0xb8000 and    
   > > indexing up a 1000 bytes is undefined behavior, doesn't    
   > > mean it should be disallowed either.   
   > That's less relevant to your current problem, I think.    
   >    
   > Alex   
      
   If you really want to manipulate stuff directly on the stack,   
   declare a structure type with those things that will be on   
   the stack. On the caller side push the struct contents to the   
   stack and pass ESP as an argument to your C function   
   (make sure to abide by the ABI w.r.t. saved and non-saved   
   registers and ESP alignment (ESP may be expected to be   
   a multiple of 8 or 16, not just a multiple of 4)).   
      
   Alex   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca