October 30, 2014 [Issue 13666] New: Undefined Symbols for __gshared data symbols in templates | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=13666 Issue ID: 13666 Summary: Undefined Symbols for __gshared data symbols in templates Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: major Priority: P1 Component: DMD Assignee: nobody@puremagic.com Reporter: r.sagitario@gmx.de Compile this module to a library: module test; template drt_envvars_enabled() { extern(C) __gshared bool drt_envvars_enabled = false; } bool foo() { return drt_envvars_enabled!(); } /////////// > dmd -lib test.d Then link it with main.d: import test; int main() { return foo(); } ////////////// > dmd main.d test.lib OPTLINK (R) for Win32 Release 8.00.15 Copyright (C) Digital Mars 1989-2013 All rights reserved. http://www.digitalmars.com/ctg/optlink.html test.lib(test) Error 42: Symbol Undefined __D4test25__T19drt_envvars_enabledZ19drt_envvars_enabledb --- errorlevel 1 According to https://github.com/D-Programming-Language/druntime/pull/986, this fails for Win32 and OS/X, but works for other platform. It also works if the variable is not "__gshared" or it is initialized to a non-zero value. It is probably caused by some bad BSS optimization. -- |
Copyright © 1999-2021 by the D Language Foundation