Holger,
Good catch, thank you. There were two arrays dimensioned wrong in
OSProcessPlugin in
the Smalltalk slang source. I fixed this, and the warning should be gone after
the
sources are next generated.
Esteban,
I fixed the oscog branch also. I could not easily test it, but it is a small
change
so hopefully should be no problem when you next generate the plugin.
Dave
On Wed, Feb 22, 2017 at 04:25:05PM +0700, Holger Freyther wrote:
> Hi Esteban,
>
> while building packages for OBS and going the compile warnings (one of the
> nice things of newer compilers is the increased diagnostic) I noticed this:
>
> [ 196s]
> /usr/src/packages/BUILD/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c:4525:20:
> warning: iteration 64u invokes undefined behavior
> [-Waggressive-loop-optimizations]
> [ 196s] if ((semaIndices[sigNum]) > 0) {
> [ 196s] ^
> [ 196s]
> /usr/src/packages/BUILD/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c:4524:9:
> note: containing loop
> [ 196s] while (sigNum <= (signalArraySize())) {
>
> while (sigNum <= (signalArraySize())) {
> if ((semaIndices[sigNum]) > 0) {
> setSignalNumberhandler(sigNum,
> (originalSignalHandlers())[sigNum]);
> }
> sigNum += 1;
> }
>
> semaIndices has signalArraySize()/NSIG number of entries and is zero based,
> it is being accessed with sigNum==NSIG which means one entry beyond the
> memory of the array? Can you confirm this?
>
> restoreDefaultSignalHandlers
> "Restore signal handlers to their original behaviors."
>
> | sigNum |
> <returnTypeC: 'void'>
> semaIndices = nil "nil if in interpreter simulation"
> ifFalse: [sigNum := 1.
> [sigNum <= self signalArraySize] whileTrue:
> [((semaIndices at: sigNum) > 0) ifTrue:
> [self setSignalNumber: sigNum
> handler: (self originalSignalHandlers at: sigNum).].
> sigNum := sigNum + 1]]
>
> So it is one based but the array doesn't have an extra element to make it
> work? How is this normally handled in slang code?
>
>
> holger