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
Solved by DIP1000.