Skip to content

Commit

Permalink
fixes #3748 (#20563)
Browse files Browse the repository at this point in the history
* fixes #3748

* fix the regression

* don't use the new allocator for the SSL wrapper

* fixes regression
  • Loading branch information
Araq authored Oct 14, 2022
1 parent b793ca7 commit 07b6453
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 6 deletions.
2 changes: 1 addition & 1 deletion compiler/semdata.nim
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ type
efWantStmt, efAllowStmt, efDetermineType, efExplain,
efWantValue, efOperand, efNoSemCheck,
efNoEvaluateGeneric, efInCall, efFromHlo, efNoSem2Check,
efNoUndeclared
efNoUndeclared, efIsDotCall
# Use this if undeclared identifiers should not raise an error during
# overload resolution.

Expand Down
7 changes: 4 additions & 3 deletions compiler/semexprs.nim
Original file line number Diff line number Diff line change
Expand Up @@ -973,7 +973,7 @@ proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags; expectedType: PType
var prc = n[0]
if n[0].kind == nkDotExpr:
checkSonsLen(n[0], 2, c.config)
let n0 = semFieldAccess(c, n[0])
let n0 = semFieldAccess(c, n[0], {efIsDotCall})
if n0.kind == nkDotCall:
# it is a static call!
result = n0
Expand Down Expand Up @@ -1474,8 +1474,9 @@ proc dotTransformation(c: PContext, n: PNode): PNode =
proc semFieldAccess(c: PContext, n: PNode, flags: TExprFlags): PNode =
# this is difficult, because the '.' is used in many different contexts
# in Nim. We first allow types in the semantic checking.
result = builtinFieldAccess(c, n, flags)
if result == nil:
result = builtinFieldAccess(c, n, flags - {efIsDotCall})
if result == nil or ((result.typ == nil or result.typ.skipTypes(abstractInst).kind != tyProc) and
efIsDotCall in flags and callOperator notin c.features):
result = dotTransformation(c, n)

proc buildOverloadedSubscripts(n: PNode, ident: PIdent): PNode =
Expand Down
7 changes: 5 additions & 2 deletions lib/wrappers/openssl.nim
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,10 @@ proc i2d_X509*(cert: PX509): string =
if length.int <= 0:
raise newException(Exception, "X.509 certificate encoding failed")

when not useWinVersion and not defined(macosx) and not defined(android) and not defined(nimNoAllocForSSL):
const
useNimsAlloc = not defined(nimNoAllocForSSL) and not defined(gcDestructors)

when not useWinVersion and not defined(macosx) and not defined(android) and useNimsAlloc:
proc CRYPTO_set_mem_functions(a,b,c: pointer){.cdecl,
dynlib: DLLUtilName, importc.}

Expand All @@ -545,7 +548,7 @@ when not useWinVersion and not defined(macosx) and not defined(android) and not
if p != nil: deallocShared(p)

proc CRYPTO_malloc_init*() =
when not useWinVersion and not defined(macosx) and not defined(android) and not defined(nimNoAllocForSSL):
when not useWinVersion and not defined(macosx) and not defined(android) and useNimsAlloc:
CRYPTO_set_mem_functions(allocWrapper, reallocWrapper, deallocWrapper)

proc SSL_CTX_ctrl*(ctx: SslCtx, cmd: cint, larg: clong, parg: pointer): clong{.
Expand Down
14 changes: 14 additions & 0 deletions tests/overload/toverl4.nim
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,17 @@ proc add*[TKey, TData](root: var PElement[TKey, TData], key: TKey, data: TData)
var tree = PElement[int, int](kind: ElementKind.inner, key: 0, left: nil, right: nil)
let result = add(tree, 1, 1)
echo(result)

# bug #3748
type
Foo = object
bar: int

proc bar(cur: Foo, val: int, s:seq[string]) =
discard cur.bar

proc does_fail(): Foo =
let a = @["a"]
result.bar(5, a)

doAssert does_fail().bar == 0

0 comments on commit 07b6453

Please sign in to comment.