# dmd.safe

Checks whether member access or array casting is allowed in `@`safe`` code.

Specification: Function Safety

#### Authors

Walter Bright

#### License

Boost License 1.0

Source: safe.d

Documentation: https://dlang.org/phobos/dmd_safe.html

Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/safe.d

- `checkUnsafeAccess`

  #### Declaration

  `bool `checkUnsafeAccess`(Scope* `sc`, Expression `e`, bool `readonly`, bool `printmsg`);`

  Check for unsafe access in @safe code:

  1. read overlapped pointers
  2. write misaligned pointers
  3. write overlapped storage classes
  Print error if unsafe.

  #### Parameters

  `Scope* `sc`` | scope
  `Expression `e`` | expression to check
  `bool `readonly`` | if access is read-only
  `bool `printmsg`` | print error message if `true`

  #### Return Value

  `true` if error

- `isSafeCast`

  #### Declaration

  `bool `isSafeCast`(Expression `e`, Type `tfrom`, Type `tto`);`

  Determine if it is @safe to cast `e` from `tfrom` to `tto`.

  #### Parameters

  `Expression `e`` | expression to be cast
  `Type `tfrom`` | type of `e`
  `Type `tto`` | type to cast `e` to

  #### Return Value

  `true` if @safe

- `checkUnsafeDotExp`

  #### Declaration

  `bool `checkUnsafeDotExp`(Scope* `sc`, Expression `e`, Identifier `id`, int `flag`);`

  Check for unsafe use of `.ptr` or `.funcptr`

  #### Parameters

  `Scope* `sc`` | context
  `Expression `e`` | expression for error messages
  `Identifier `id`` | `ptr` or `funcptr`
  `int `flag`` | DotExpFlag

  #### Return Value

  `true` if error