On Thursday, 5 January 2023 at 09:17:28 UTC, areYouSureAboutThat wrote:
>core.exception.ArrayIndexError@test.d(25): index [5] exceeds array of length 5
Aborted (core dumped)
This is bounds checking happening.
Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
January 05, 2023 forgetting -betterC means no runtime bounds checking? | ||||
---|---|---|---|---|
| ||||
I was playing around with betterC, when I discovered, that if i accidently forget to provide -betterC to the compiler, it will still compile this, but, there will be no runtime bounds checking occuring. My question is: why is there no bounds checking occurring if I forget to use -betterC? module test; extern(C) void main() { import core.stdc.stdio : printf; int[5] arr = [ 0, 1, 2, 3, 4]; for (int i = 0; i < 10; i++) // oops! { printf("%d\n", arr[i]); } } |
January 05, 2023 Re: forgetting -betterC means no runtime bounds checking? | ||||
---|---|---|---|---|
| ||||
Posted in reply to areYouSureAboutThat | On Thursday, 5 January 2023 at 09:10:00 UTC, areYouSureAboutThat wrote: > btw. the output (when you forget to use -betterC): 0 1 2 3 4 src/rt/dwarfeh.d:330: uncaught exception reached top of stack This might happen if you're missing a top level catch in your fiber or signal handler core.exception.ArrayIndexError@test.d(25): index [5] exceeds array of length 5 Aborted (core dumped) |
January 05, 2023 Re: forgetting -betterC means no runtime bounds checking? | ||||
---|---|---|---|---|
| ||||
Posted in reply to areYouSureAboutThat | On Thursday, 5 January 2023 at 09:17:28 UTC, areYouSureAboutThat wrote: >core.exception.ArrayIndexError@test.d(25): index [5] exceeds array of length 5 This is bounds checking happening. |
January 05, 2023 Re: forgetting -betterC means no runtime bounds checking? | ||||
---|---|---|---|---|
| ||||
Posted in reply to areYouSureAboutThat | On 05/01/2023 10:17 PM, areYouSureAboutThat wrote:
> src/rt/dwarfeh.d:330: uncaught exception reached top of stack
> This might happen if you're missing a top level catch in your fiber or signal handler
> core.exception.ArrayIndexError@test.d(25): index [5] exceeds array of length 5
> Aborted (core dumped)
Looks like an exception to me, which is what the default for bounds check on error will do.
Because you are not using the druntime entry point, its not being caught and made to look nice to you.
|
January 05, 2023 Re: forgetting -betterC means no runtime bounds checking? | ||||
---|---|---|---|---|
| ||||
Posted in reply to areYouSureAboutThat | On Thursday, 5 January 2023 at 09:10:00 UTC, areYouSureAboutThat wrote: >I was playing around with betterC, when I discovered, that if i accidently forget to provide -betterC to the compiler, it will still compile this, but, there will be no runtime bounds checking occuring. My question is: why is there no bounds checking occurring if I forget to use -betterC? module test; extern(C) void main()
} Works on run.dlang.io for me:
On my personal ldc 1.27.1:
|
January 05, 2023 Re: forgetting -betterC means no runtime bounds checking? | ||||
---|---|---|---|---|
| ||||
Posted in reply to areYouSureAboutThat | On Thursday, 5 January 2023 at 09:10:00 UTC, areYouSureAboutThat wrote: >My question is: why is there no bounds checking occurring if I forget to use -betterC? module test; extern(C) void main() Note that whether bounds checking is performed depends on compiler switches, and that there is a mode where
So, if you want bounds checking, make sure you either have |