diff options
-rw-r--r-- | compiler/ccgtypes.nim | 2 | ||||
-rw-r--r-- | testament/categories.nim | 4 | ||||
-rw-r--r-- | tests/dll/visibility.nim | 19 |
3 files changed, 24 insertions, 1 deletions
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 905f8999e..59f47b02d 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -954,7 +954,7 @@ proc genProcHeader(m: BModule, prc: PSym, asPtr: bool = false): Rope = result.add "N_LIB_EXPORT " elif prc.typ.callConv == ccInline or asPtr or isNonReloadable(m, prc): result.add "static " - elif {sfImportc, sfExportc} * prc.flags == {}: + elif sfImportc notin prc.flags: result.add "N_LIB_PRIVATE " var check = initIntSet() fillLoc(prc.loc, locProc, prc.ast[namePos], mangleName(m, prc), OnUnknown) diff --git a/testament/categories.nim b/testament/categories.nim index 98ddd7e10..f8cc625c4 100644 --- a/testament/categories.nim +++ b/testament/categories.nim @@ -128,6 +128,9 @@ proc runBasicDLLTest(c, r: var TResults, cat: Category, options: string) = var test3 = makeTest("lib/nimhcr.nim", options & " --outdir:tests/dll" & rpath, cat) test3.spec.action = actionCompile testSpec c, test3 + var test4 = makeTest("tests/dll/visibility.nim", options & " --app:lib" & rpath, cat) + test4.spec.action = actionCompile + testSpec c, test4 # windows looks in the dir of the exe (yay!): when not defined(Windows): @@ -141,6 +144,7 @@ proc runBasicDLLTest(c, r: var TResults, cat: Category, options: string) = testSpec r, makeTest("tests/dll/client.nim", options & " --threads:on" & rpath, cat) testSpec r, makeTest("tests/dll/nimhcr_unit.nim", options & rpath, cat) + testSpec r, makeTest("tests/dll/visibility.nim", options & rpath, cat) if "boehm" notin options: # force build required - see the comments in the .nim file for more details diff --git a/tests/dll/visibility.nim b/tests/dll/visibility.nim new file mode 100644 index 000000000..7341e3311 --- /dev/null +++ b/tests/dll/visibility.nim @@ -0,0 +1,19 @@ +discard """ + output: "could not import: foo" + exitcode: 1 +""" + +const LibName {.used.} = + when defined(windows): + "visibility.dll" + elif defined(macosx): + "libvisibility.dylib" + else: + "libvisibility.so" + +when compileOption("app", "lib"): + proc foo() {.exportc.} = + echo "failed" +elif isMainModule: + proc foo() {.importc, dynlib: LibName.} + foo() |