[Issue 13666] New: Undefined Symbols for __gshared data symbols in templates
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Oct 30 01:27:20 PDT 2014
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 at puremagic.com
Reporter: r.sagitario at 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.
--
More information about the Digitalmars-d-bugs
mailing list