Bug 6931 – scope parameter storage class not checked at all
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-11-11T07:17:58Z
Last change time
2020-08-04T03:38:16Z
Keywords
accepts-invalid, diagnostic
Assigned to
No Owner
Creator
Trass3r
Comments
Comment #0 by hoganmeier — 2011-11-11T07:17:58Z
int ga;
C gb;
S* gc;
int[] gd;
struct S {}
class C {}
void foo(scope int a, scope C b, scope S* c, scope int[] d)
{
ga = a;
gb = b;
gc = c;
gd = d;
ga = d[1];
}
void main()
{
S s;
foo(5, new C, &s, [1,2,3]);
}
This compiles and runs fine. Shouldn't at least some of these cause errors?
Comment #1 by verylonglogin.reg — 2012-01-22T06:47:29Z
If we will look at destruction & allocation:
---
import std.stdio;
class C {
int n;
this(int n) { writefln(" this(%s) at %s", this.n = n, cast(void*)this); }
~this() { writefln("~this(%s) at %s", n, cast(void*)this); }
}
void main() {
int i;
writefln("Stack is at %s", &i);
writefln("Heap is at %s", (new void[1]).ptr);
{
C cHeap = new C(0); // will be destroyed on scope exit
scope C c0 = cHeap;
// C(1)-C(4) will be allocated in heap
// C(1), C(2), and C(4) will be destroyed on scope exit
// C(3) will be destroyed on garbage collection
scope C c1 = cast(C)cast(void*)new C(1);
scope C c2 = true ? new C(2) : null;
scope C c3 = (new C(3), new C(4));
}
writefln("after scope");
}
---
As a result even if `C` is a `scope class` the program will compile without `cHeap` and `c0`, but every `C` instance will be allocated in heap and C(3) will be destroyed on garbage collection.
Comment #2 by hoganmeier — 2012-01-22T07:02:54Z
This report is about scope as a parameter storage class!
Comment #3 by verylonglogin.reg — 2012-01-22T09:19:58Z
Oh, sorry for the unrelated comment. Created Issue 7347 for that.
Comment #4 by b2.temp — 2016-01-15T04:14:22Z
*** Issue 15562 has been marked as a duplicate of this issue. ***
Comment #5 by issues.dlang — 2018-03-16T19:50:17Z
*** Issue 18129 has been marked as a duplicate of this issue. ***
Comment #6 by pro.mathias.lang — 2020-08-04T03:38:16Z