issue a warning for ptr to cstring conversion[backport] (#20814)

* issue a warning for ptr to cstring conversion[backport]

* add a changelog

(cherry picked from commit 8e1181bde5)
This commit is contained in:
ringabout
2022-11-12 02:32:33 +08:00
committed by narimiran
parent 9dc97ed143
commit 2631e99238
3 changed files with 11 additions and 0 deletions

View File

@@ -20,6 +20,10 @@
## Standard library additions and changes
- Pointer to `cstring` conversion now triggers a `[PtrToCstringConv]` warning.
This warning will become an error in future versions! Use a `cast` operation
like `cast[cstring](x)` instead.
## Standard library additions and changes
- `macros.parseExpr` and `macros.parseStmt` now accept an optional

View File

@@ -76,6 +76,7 @@ type
warnAnyEnumConv = "AnyEnumConv",
warnHoleEnumConv = "HoleEnumConv",
warnCstringConv = "CStringConv",
warnPtrToCstringConv = "PtrToCstringConv",
warnEffect = "Effect",
warnUser = "User",
# hints
@@ -166,6 +167,7 @@ const
warnAnyEnumConv: "$1",
warnHoleEnumConv: "$1",
warnCstringConv: "$1",
warnPtrToCstringConv: "unsafe conversion to 'cstring' from '$1'; this will become a compile time error in the future",
warnEffect: "$1",
warnUser: "$1",
hintSuccess: "operation successful: $#",

View File

@@ -1216,6 +1216,11 @@ proc track(tracked: PEffects, n: PNode) =
message(tracked.config, n.info, warnCstringConv,
"implicit conversion to 'cstring' from a non-const location: $1; this will become a compile time error in the future" %
$n[1])
if n.typ.skipTypes(abstractInst).kind == tyCstring and
isCharArrayPtr(n[1].typ, true):
message(tracked.config, n.info, warnPtrToCstringConv,
$n[1].typ)
let t = n.typ.skipTypes(abstractInst)
if t.kind == tyEnum: