Commit d2025512 by Iain Buclaw

re PR d/88990 (ICE in get_symbol_decl, at d/decl.cc:1097)

    PR d/88990
d/dmd: Merge upstream dmd 8d4c876c6

The extern storage class flag was wrongly propagated to function scope
when starting the semantic pass on the body.

Fixes https://gcc.gnu.org/PR88990

Reviewed-on: https://github.com/dlang/dmd/pull/9452

From-SVN: r269708
parent ec156546
19b1454b5ca7b1036ea5fde197d91d4a7d05c0a5
8d4c876c658608e8f6e653803c534a9e15618f57
The first line of this file holds the git revision number of the last
merge done from the dlang/dmd repository.
......@@ -2008,6 +2008,7 @@ bool VarDeclaration::isDataseg()
else if (storage_class & (STCstatic | STCextern | STCtls | STCgshared) ||
parent->isModule() || parent->isTemplateInstance() || parent->isNspace())
{
assert(!isParameter() && !isResult());
isdataseg = 1; // It is in the DataSegment
}
}
......
......@@ -1437,7 +1437,7 @@ void FuncDeclaration::semantic3(Scope *sc)
sc2->sw = NULL;
sc2->fes = fes;
sc2->linkage = LINKd;
sc2->stc &= ~(STCauto | STCscope | STCstatic | STCabstract |
sc2->stc &= ~(STCauto | STCscope | STCstatic | STCextern | STCabstract |
STCdeprecated | STCoverride |
STC_TYPECTOR | STCfinal | STCtls | STCgshared | STCref | STCreturn |
STCproperty | STCnothrow | STCpure | STCsafe | STCtrusted | STCsystem);
......
// https://issues.dlang.org/show_bug.cgi?id=19734
// REQUIRED_ARGS: -main
class C19734
{
import core.stdc.stdarg;
extern
{
// Invalid 'this' parameter because of applied 'extern' storage class.
void testin(typeof(this) p)
in { assert(this is p); }
body
{
}
// Undefined reference to __result.
int testout()
out { assert(__result == 2); }
body
{
return 2;
}
// Undefined reference to var.
int testlocal()
{
int var;
return var + 2;
}
// Variable _argptr cannot have initializer.
int testvarargs(...)
{
return 0;
}
}
}
// https://issues.dlang.org/show_bug.cgi?id=19735
extern int test1(int par)
{
int var = 42;
return var + par;
}
extern
{
int test2(int par)
{
int var = 42;
return var + par;
}
}
void main()
{
assert(test1(1) == test2(1));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment