diff options
author | alaviss <alaviss@users.noreply.github.com> | 2020-01-23 12:45:31 +0000 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2020-01-23 13:45:31 +0100 |
commit | f500895efe84525c131beadd2e83b30caa6674a3 (patch) | |
tree | 2562499459cbbe87f50c9a1401c27f8a0177bbe9 /tests/dll | |
parent | 3a5056dc70102e4d6dafaa0e0914ae48326c5f4a (diff) | |
download | Nim-f500895efe84525c131beadd2e83b30caa6674a3.tar.gz |
Unexport even more symbols (#13214)
* system/gc: don't export markStackAndRegisters * compiler/cgen: unexport internal symbols As these functions are Nim-specific walkaround against C's optimization schemes, they don't serve any purpose being exported. * compiler/cgen: don't export global var unless marked * compiler/ccgthreadvars: don't export threadvar unless marked * tests/dll/visibility: also check for exports This ensure that these changes don't break manual exports. * compiler/cgen: hide all variables created for constants * compiler/ccgtypes: don't export RTTI variables * compiler/ccgexprs: make all complex const static * nimbase.h: fix export for windows * compiler/cgen, ccgthreadvars: export variables correctly For C/C++ variables, `extern` means that the variable is defined in an another unit. Added a new N_LIB_EXPORT_VAR to correctly export variables.
Diffstat (limited to 'tests/dll')
-rw-r--r-- | tests/dll/visibility.nim | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/tests/dll/visibility.nim b/tests/dll/visibility.nim index 7341e3311..ec15dad29 100644 --- a/tests/dll/visibility.nim +++ b/tests/dll/visibility.nim @@ -1,6 +1,5 @@ discard """ - output: "could not import: foo" - exitcode: 1 + output: "" """ const LibName {.used.} = @@ -12,8 +11,33 @@ const LibName {.used.} = "libvisibility.so" when compileOption("app", "lib"): - proc foo() {.exportc.} = - echo "failed" + var + bar {.exportc.}: int + thr {.exportc, threadvar.}: int + proc foo() {.exportc.} = discard + + var + exported {.exportc, dynlib.}: int + exported_thr {.exportc, threadvar, dynlib.}: int + proc exported_func() {.exportc, dynlib.} = discard elif isMainModule: - proc foo() {.importc, dynlib: LibName.} - foo() + import dynlib + + let handle = loadLib(LibName) + + template check(sym: untyped) = + const s = astToStr(sym) + if handle.symAddr(s) != nil: + echo s, " is exported" + template checkE(sym: untyped) = + const s = astToStr(sym) + if handle.symAddr(s) == nil: + echo s, " is not exported" + + check foo + check bar + check thr + + checkE exported + checkE exported_thr + checkE exported_func |