| // REQUIRED_ARGS: -ignore |
| module foo.bar; |
| |
| import core.vararg; |
| |
| // Only compilable, declare inline |
| void writeln(T...)(T) {} |
| |
| pragma(lib, "test"); |
| pragma(msg, "Hello World"); |
| pragma(linkerDirective, "/DEFAULTLIB:test2"); |
| |
| static assert(true, "message"); |
| |
| alias double mydbl; |
| |
| alias fl1 = function () |
| in {} |
| in (true) |
| out (; true) |
| out (r; true) |
| out |
| { |
| } |
| out (r) |
| { |
| } |
| do |
| { |
| return 2; |
| }; |
| |
| alias fl2 = function () |
| in (true) |
| out(; true) |
| out(r; true) |
| { |
| return 2; |
| }; |
| |
| int testmain() |
| in |
| { |
| assert(1+(2+3) == -(1 - 2*3)); |
| } |
| out (result) |
| { |
| assert(result == 0); |
| } |
| do |
| { |
| float f = float.infinity; |
| int i = cast(int) f; |
| writeln(i,1,2); |
| writeln(cast(int)float.max); |
| assert(i == cast(int)float.max); |
| assert(i == 0x80000000); |
| return 0; |
| } |
| |
| struct S { int m, n; } |
| |
| template Foo(T, int V) |
| { |
| void foo(...) |
| { |
| static if (is(Object _ : X!TL, alias X, TL...)) {} // https://issues.dlang.org/show_bug.cgi?id=10044 |
| |
| auto x = __traits(hasMember, Object, "noMember"); |
| auto y = is(Object : X!TL, alias X, TL...); |
| assert(!x && !y, "message"); |
| |
| S s = { 1,2 }; |
| auto a = [1, 2, 3]; |
| auto aa = [1:1, 2:2, 3:3]; |
| |
| int n,m; |
| } |
| |
| int bar(double d, int x) |
| { |
| if (d) |
| { d++; |
| } |
| else |
| d--; |
| |
| asm |
| { naked ; |
| mov EAX, 3; |
| } |
| |
| for (;;) |
| { |
| d = d + 1; |
| } |
| |
| for (int i = 0; i < 10; i++) |
| { |
| d = i ? d + 1 : 5; |
| } |
| |
| char[] s; |
| foreach (char c; s) |
| { |
| d *= 2; |
| if (d) |
| break; |
| else |
| continue; |
| } |
| |
| switch (V) |
| { |
| case 1: |
| case 2: break; |
| case 3: goto case 1; |
| case 4: goto default; |
| default: |
| d /= 8; |
| break; |
| } |
| |
| enum Label { A, B, C } |
| void fswitch(Label l) |
| { |
| final switch (l) |
| { |
| case A: break; |
| case B: break; |
| case C: break; |
| } |
| } |
| |
| loop: |
| while (x) |
| { |
| x--; |
| if (x) |
| break loop; |
| else |
| continue loop; |
| } |
| |
| do |
| { |
| x++; |
| } while (x < 10); |
| |
| try |
| { |
| bar(1, 2); |
| } |
| catch (Object o) |
| { |
| x++; |
| } |
| finally |
| { |
| x--; |
| } |
| |
| try |
| bar(1, 2); |
| catch(Object o) |
| x++; |
| finally |
| x--; |
| |
| Object o; |
| synchronized (o) |
| { |
| x = ~x; |
| } |
| |
| synchronized |
| { |
| x = x < 3; |
| } |
| |
| with (o) |
| { |
| toString(); |
| } |
| } |
| } |
| |
| static this() |
| { |
| } |
| |
| static ~this() |
| { |
| } |
| |
| pure nothrow @safe @nogc static this() {} |
| pure nothrow @safe @nogc static ~this() {} |
| static this() pure nothrow @safe @nogc {} |
| static ~this() pure nothrow @safe @nogc {} |
| |
| pure nothrow @safe @nogc shared static this() {} |
| pure nothrow @safe @nogc shared static ~this() {} |
| shared static this() pure nothrow @safe @nogc {} |
| shared static ~this() pure nothrow @safe @nogc {} |
| |
| interface iFoo{} |
| class xFoo: iFoo{} |
| |
| interface iFoo2{} |
| class xFoo2: iFoo, iFoo2{} |
| |
| class Foo3 |
| { |
| this(int a, ...){} |
| this(int* a){} |
| } |
| |
| alias int myint; |
| |
| static notquit = 1; |
| |
| class Test |
| { |
| void a() {} |
| void b() {} |
| void c() {} |
| void d() {} |
| void e() {} |
| void f() {} |
| void g() {} |
| void h() {} |
| void i() {} |
| void j() {} |
| void k() {} |
| void l() {} |
| void m() {} |
| void n() {} |
| void o() {} |
| void p() {} |
| void q() {} |
| void r() {} |
| void s() {} |
| void t() {} |
| void u() {} |
| void v() {} |
| void w() {} |
| void x() {} |
| void y() {} |
| void z() {} |
| |
| void aa() {} |
| void bb() {} |
| void cc() {} |
| void dd() {} |
| void ee() {} // Try adding or removing some functions here to see the effect. |
| |
| template A(T) { } |
| |
| alias A!(uint) getHUint; |
| alias A!(int) getHInt; |
| alias A!(float) getHFloat; |
| alias A!(ulong) getHUlong; |
| alias A!(long) getHLong; |
| alias A!(double) getHDouble; |
| alias A!(byte) getHByte; |
| alias A!(ubyte) getHUbyte; |
| alias A!(short) getHShort; |
| alias A!(ushort) getHUShort; |
| alias A!(real) getHReal; |
| |
| alias void F(); |
| |
| pure nothrow @safe @nogc unittest {} |
| pure nothrow @safe @nogc invariant {} |
| pure nothrow @safe @nogc invariant (true); |
| } |
| |
| template templ( T ) |
| { |
| void templ( T val ) |
| { |
| pragma( msg, "Invalid destination type." ); |
| } |
| } |
| |
| static char[] charArray = [ '\"', '\'' ]; |
| |
| class Point |
| { |
| auto x = 10; |
| uint y = 20; |
| } |
| |
| template Foo2(bool bar) |
| { |
| void test() |
| { |
| static if(bar) |
| { |
| int i; |
| } |
| else |
| { |
| } |
| static if(!bar) |
| { |
| } |
| else |
| { |
| } |
| } |
| } |
| |
| |
| template Foo4() |
| { |
| void bar() |
| { |
| } |
| } |
| |
| template Foo4x( T... ) {} |
| |
| class Baz4 |
| { |
| mixin Foo4 foo; |
| mixin Foo4x!(int, "str") foox; |
| |
| alias foo.bar baz; |
| } |
| |
| int test(T)(T t) |
| { |
| if (auto o = cast(Object)t) return 1; |
| return 0; |
| } |
| |
| enum x6 = 1; |
| |
| bool foo6(int a, int b, int c, int d) |
| { |
| return (a < b) != (c < d); |
| } |
| |
| auto foo7(int x) |
| { |
| return 5; |
| } |
| |
| class D8{} |
| void func8() |
| { |
| scope a= new D8(); |
| } |
| |
| T func9(T)() if (true) |
| { |
| T i; |
| scope(exit) i= 1; |
| scope(success) i = 2; |
| scope(failure) i = 3; |
| return i; |
| } |
| |
| template V10(T) |
| { |
| void func() |
| { |
| for(int i,j=4; i<3;i++) |
| { |
| } |
| } |
| } |
| |
| int foo11(int function() fn) |
| { |
| return fn(); |
| } |
| |
| int bar11(T)() |
| { |
| return foo11(function int (){ return 0; }); |
| } |
| |
| |
| struct S6360 |
| { |
| @property long weeks1() const pure nothrow { return 0; } |
| |
| @property const pure nothrow long weeks2() { return 0; } |
| } |
| |
| |
| struct S12 |
| { |
| /// postfix storage class and constructor |
| this(int n) nothrow{} |
| |
| /// prefix storage class (==StorageClassDeclaration) and constructor |
| nothrow this(string s){} |
| } |
| |
| /// dummy |
| struct T12 |
| { |
| /// postfix storage class and template constructor |
| this()(int args) immutable { } |
| |
| /// prefix storage class (==StorageClassDeclaration) and template constructor |
| immutable this(A...)(A args){ } |
| } |
| |
| |
| // https://issues.dlang.org/show_bug.cgi?id=6591 |
| import core.stdc.stdio : printf, F = FILE; |
| |
| void foo6591()() |
| { |
| import core.stdc.stdio : printf, F = FILE; |
| } |
| |
| |
| // https://issues.dlang.org/show_bug.cgi?id=8081 |
| version(unittest) { |
| pure nothrow unittest {} |
| pure nothrow unittest {} |
| |
| public unittest {} |
| extern(C) unittest {} |
| align unittest {} |
| } |
| |
| |
| // https://issues.dlang.org/show_bug.cgi?id=10334 |
| |
| template Foo10334(T) if (Bar10334!()) {} /// |
| template Foo10334(T) if (Bar10334!100) {} /// |
| template Foo10334(T) if (Bar10334!3.14) {} /// |
| template Foo10334(T) if (Bar10334!"str") {} /// |
| template Foo10334(T) if (Bar10334!1.4i) {} /// |
| template Foo10334(T) if (Bar10334!null) {} /// |
| template Foo10334(T) if (Bar10334!true) {} /// |
| template Foo10334(T) if (Bar10334!false) {} /// |
| template Foo10334(T) if (Bar10334!'A') {} /// |
| template Foo10334(T) if (Bar10334!int) {} /// |
| template Foo10334(T) if (Bar10334!string) {} /// |
| template Foo10334(T) if (Bar10334!wstring) {} /// |
| template Foo10334(T) if (Bar10334!dstring) {} /// |
| template Foo10334(T) if (Bar10334!this) {} /// |
| template Foo10334(T) if (Bar10334!([1,2,3])) {} /// |
| template Foo10334(T) if (Bar10334!(Baz10334!())) {} /// |
| template Foo10334(T) if (Bar10334!(Baz10334!T)) {} /// |
| template Foo10334(T) if (Bar10334!(Baz10334!100)) {} /// |
| template Foo10334(T) if (Bar10334!(.foo)) {} /// |
| template Foo10334(T) if (Bar10334!(const int)) {} /// |
| template Foo10334(T) if (Bar10334!(shared T)) {} /// |
| |
| template Test10334(T...) {} /// |
| mixin Test10334!int a; /// |
| mixin Test10334!(int,long) b; /// |
| mixin Test10334!"str" c; /// |
| |
| // https://issues.dlang.org/show_bug.cgi?id=12266 |
| auto clamp12266a(T1, T2, T3)(T1 x, T2 min_val, T3 max_val) |
| { |
| return 0; |
| } |
| pure clamp12266b(T1, T2, T3)(T1 x, T2 min_val, T3 max_val) |
| { |
| return 0; |
| } |
| @disable pure clamp12266c(T1, T2, T3)(T1 x, T2 min_val, T3 max_val) |
| { |
| return 0; |
| } |
| |
| // https://issues.dlang.org/show_bug.cgi?id=13832 |
| alias Dg13832 = ref int delegate(); |
| |
| // https://issues.dlang.org/show_bug.cgi?id=16590 |
| class TestClass { |
| int aa; |
| int b1, b2; |
| this(int b1, int b2) |
| { |
| this.b1 = b1; |
| this.b2 = b2; |
| } |
| |
| ref foo() { |
| return aa; |
| } |
| |
| ref retFunc() return { |
| return aa; |
| } |
| |
| ~this() @trusted @disable @nogc { |
| } |
| } |
| |
| class FooA { |
| protected void method42() { |
| |
| } |
| |
| ~this() @safe { |
| } |
| |
| } |
| |
| |
| class Bar : FooA { |
| override void method42() { |
| |
| } |
| } |
| |
| double foo() @trusted { |
| int a = 5; |
| return a; |
| } |
| |
| struct Foo1(size_t Size = 42 / magic()) { |
| |
| } |
| |
| |
| size_t magic() { |
| return 42; |
| } |
| |
| class Foo2A { |
| |
| immutable(FooA) Dummy = new immutable(FooA); |
| private immutable pure nothrow @nogc @safe this() { |
| |
| } |
| |
| } |
| |
| // https://issues.dlang.org/show_bug.cgi?id=15676 |
| struct Foo3A(T) |
| { |
| @disable this(this); |
| @disable this(); |
| } |
| |
| // return ref, return scope, return ref scope |
| ref int foo(return ref int a) @safe |
| { |
| return a; |
| } |
| |
| int* foo(return scope int* a) @safe |
| { |
| return a; |
| } |
| |
| ref int* foo(scope return ref int* a) @safe |
| { |
| return a; |
| } |
| |
| struct SafeS |
| { |
| this(int[1] x) scope {} |
| this(int[2] x) return scope {} |
| this(int[3] x) return ref scope {} |
| this(int[4] x) return {} |
| |
| @safe: |
| ref SafeS foo() return |
| { |
| return this; |
| } |
| |
| SafeS foo2() return scope |
| { |
| return this; |
| } |
| |
| ref SafeS foo3() scope |
| { |
| static SafeS s; |
| return s; |
| } |
| |
| ref SafeS foo4() scope return |
| { |
| return this; |
| } |
| |
| int* p; |
| } |
| |
| void test13x(@(10) int a, @(20) int, @(30) @(40) int[] arr...) {} |
| |
| enum Test14UDA1; |
| struct Test14UDA2 |
| { |
| string str; |
| } |
| |
| Test14UDA2 test14uda3(string name) |
| { |
| return Test14UDA2(name); |
| } |
| struct Test14UDA4(string v){} |
| |
| void test14x(@Test14UDA1 int, @Test14UDA2("1") int, @test14uda3("2") int, @Test14UDA4!"3" int) {} |
| |
| void test15x(@(20) void delegate(int) @safe dg){} |
| |
| T throwStuff(T)(T t) |
| { |
| if (false) test13x(1, throw new Exception(""), 2); |
| return t ? t : throw new Exception("Bad stuff happens!"); |
| } |
| |
| class C12344 |
| { |
| abstract int c12344(int x) in(x > 0) out(result) {assert(result > 0);}; |
| } |
| |
| interface I12344 |
| { |
| int i12344(int x) in(x > 0) out(result) {assert(result > 0);}; |
| } |
| |
| debug enum issue21406 = 1; |