[Issue 16243] wrong C++ argument passing with empty struct when interfacing with Clang
https://issues.dlang.org/show_bug.cgi?id=16243 --- Comment #21 from Walter Bright--- https://github.com/dlang/dmd/pull/7963 --
[Issue 18486] std.format cannot format const objects
https://issues.dlang.org/show_bug.cgi?id=18486 --- Comment #3 from github-bugzi...@puremagic.com --- Commit pushed to master at https://github.com/dlang/phobos https://github.com/dlang/phobos/commit/93dc74be78de197d8c1daa52d9bd1920d07d7f47 Merge pull request #6207 from JackStouffer/issue18486 Fix Issue 7879 - format of const class with non const toString() --
[Issue 7879] format of class with not const toString()
https://issues.dlang.org/show_bug.cgi?id=7879 github-bugzi...@puremagic.com changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --
[Issue 7879] format of class with not const toString()
https://issues.dlang.org/show_bug.cgi?id=7879 --- Comment #5 from github-bugzi...@puremagic.com --- Commit pushed to master at https://github.com/dlang/phobos https://github.com/dlang/phobos/commit/502aed8cc34ee5a5c229bc12571365ab1f04e175 Fix Issue 7879 - format of const/immutable/shared class with no toString() --
[Issue 18510] [Beta 2.079] lld-link.exe fails to open obj file in subpath
https://issues.dlang.org/show_bug.cgi?id=18510 github-bugzi...@puremagic.com changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --
[Issue 18296] [Reg2.078.1] invalid code with coverage and copy construction
https://issues.dlang.org/show_bug.cgi?id=18296 github-bugzi...@puremagic.com changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --
[Issue 18480] [Reg 2.079] dmd hangs with self-alias declaration
https://issues.dlang.org/show_bug.cgi?id=18480 github-bugzi...@puremagic.com changed: What|Removed |Added Resolution|DUPLICATE |FIXED --
[Issue 18510] [Beta 2.079] lld-link.exe fails to open obj file in subpath
https://issues.dlang.org/show_bug.cgi?id=18510 --- Comment #3 from github-bugzi...@puremagic.com --- Commits pushed to master at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/c75ca864f10a1513780172aca5472e8f885f8a87 fix issue 18510 - lld-link.exe fails to open obj file in subpath LLD doesn't assume .obj automatically for files with '\' in the name, but there is no good reason to strip the extension to begin with https://github.com/dlang/dmd/commit/22aeea76549cb6f5dbf0460981f3e0661e754a68 Merge pull request #7946 from rainers/issue18510 fix issue 18510 - lld-link.exe fails to open obj file in subpath --
[Issue 18296] [Reg2.078.1] invalid code with coverage and copy construction
https://issues.dlang.org/show_bug.cgi?id=18296 --- Comment #4 from github-bugzi...@puremagic.com --- Commits pushed to master at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/0146d2be4298f15416a4f0bee08876934ed2200c fix Issue 18296 - make __coverage a hidden symbol - external linkage only for current DSO, but not across DSOs - avoids GOT indirection on every access - thus avoids codegen bugs related to those - uses SCstatic with SFLhidden flag as the access is the same as for static symbols, even though linkage is between SCglobal and SCstatic In the long-run (and with more usage) a separate SChidden might be cleaner. - no changes to OMF code as LPUBDEF isn't used https://github.com/dlang/dmd/commit/eb2bf7713cd46d49a9ea75999188d84b410b45d5 Merge pull request #7772 from MartinNowak/fix18296 fix Issue 18296 - make __coverage a hidden symbol --
[Issue 18480] [Reg 2.079] dmd hangs with self-alias declaration
https://issues.dlang.org/show_bug.cgi?id=18480 --- Comment #6 from github-bugzi...@puremagic.com --- Commits pushed to master at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/1092c107880953c8d663ac67f287d87608d4f17e fix Issue 18480 - dmd 2.079 hangs https://github.com/dlang/dmd/commit/a551a360f1078efbbfff46f67ee3faccf93c96a5 Merge pull request #7930 from timotheecour/pr_fix_18480 fix Issue 18480 - dmd 2.079 hangs https://github.com/dlang/dmd/commit/414ae9924ede83a5e5bebc7be0a063a22a3ec6d1 fix Issue 18480 - dmd hangs with self-alias declaration - fixed by detecting `alias sym = sym;` during semantic - small adoption of assertion in mostVisibleOverload to deal with alias error expression (type = Type.terror) in overload https://github.com/dlang/dmd/commit/2ab13f54cd8c8da2ee4025319e1baf5a3366f4cc Merge pull request #7954 from MartinNowak/fix18480 cleaner fix for Issue 18480 - dmd hangs with self-alias declaration --
[Issue 18519] freebsd 11 + phobos + curl, timing out
https://issues.dlang.org/show_bug.cgi?id=18519 Sebchanged: What|Removed |Added CC||greensunn...@gmail.com --- Comment #2 from Seb --- See also https://github.com/dlang/phobos/pull/6232 (a PR to temporarily disable the curl tests). --
[Issue 16519] toHexString always returns stack allocated string
https://issues.dlang.org/show_bug.cgi?id=16519 Sebchanged: What|Removed |Added CC||greensunn...@gmail.com --- Comment #3 from Seb --- FWIW -dip1000 warns about this problem: foo.d(8): Deprecation: slice of static array temporary returned by toHexString(hash) assigned to longer lived variable a but I still think we should do something about the API. --
[Issue 14241] phobos unittests not run on Windows
https://issues.dlang.org/show_bug.cgi?id=14241 Timothee Courchanged: What|Removed |Added CC||timothee.co...@gmail.com --- Comment #2 from Timothee Cour --- is it related to https://issues.dlang.org/show_bug.cgi?id=18535 ? --
[Issue 18535] auto-tester fails on Win_32_64 : `The system cannot find the path specified.`
https://issues.dlang.org/show_bug.cgi?id=18535 Timothee Courchanged: What|Removed |Added CC||timothee.co...@gmail.com --- Comment #1 from Timothee Cour --- not sure if related to https://issues.dlang.org/show_bug.cgi?id=14241 --
[Issue 18535] New: auto-tester fails on Win_32_64 : `The system cannot find the path specified.`
https://issues.dlang.org/show_bug.cgi?id=18535 Issue ID: 18535 Summary: auto-tester fails on Win_32_64 : `The system cannot find the path specified.` Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: critical Priority: P1 Component: dlang.org Assignee: nob...@puremagic.com Reporter: timothee.co...@gmail.com https://auto-tester.puremagic.com/show-run.ghtml?projectid=14=3051857=true Run ID 3051857 Pulldlang/phobos/6222 SHA 1c63a329cedeb3bf8a37148bffada3d213962da4 Reporterwin-farm-2 (174.24.231.191) PlatformWin_32_64 Start Time 2018-02-27 21:40:51 End Time2018-02-27 21:52:02 Duration00:11:11 Result Code 1 Deleted 0 Past ResultsPull Test History ``` HOST_DC=/home/braddr/sandbox/at-client/release-build/install/windows/bin/dmd.exe HOST_DC=D:\sandbox\at-client\release-build\install\windows\bin\dmd.exe cd test gmake -j4 Creating output directory: test_results Building d_do_test tool Building sanitize_json tool OS: 'win64' OS: 'win64' MODEL: '64' MODEL: '64' PIC: '' ../generated/windows/release/32/dmd.exe -conf= -m64 -g -unittest -run d_do_test.d -unittest PIC: '' ../generated/windows/release/32/dmd.exe -conf= -m64 -g -odtest_results -oftest_results\\sanitize_json.exe -i sanitize_json.d ../generated/windows/release/32/dmd.exe -conf= -m64 -g -odtest_results -oftest_results\\d_do_test.exe d_do_test.d Running runnable tests Running compilable tests Running fail compilation tests ... The system cannot find the path specified. failed to execute '\"Program Files (x86)"\"Microsoft Visual Studio 10.0"\VC\bin\amd64\cl.exe /c /nologo runnable\extra-files\cpp_abi_tests.cpp /Fotest_results\runnable\cpp_abi_tests.cpp.obj' Makefile:220: recipe for target 'test_results/runnable/cpp_abi_tests.d.out' failed gmake[1]: *** [test_results/runnable/cpp_abi_tests.d.out] Error 1 gmake[1]: *** Waiting for unfinished jobs ... runnable\xdtor.d () ... runnable\s2ir.d (-inline -release -g -O) Makefile:259: recipe for target 'start_runnable_tests' failed gmake: *** [start_runnable_tests] Error 2 gmake: INTERNAL: Exiting with 3 jobserver tokens available; should be 4! ``` occurred in https://github.com/dlang/phobos/pull/6222 --
[Issue 13918] lldb fails to decode DWARF DW_TAG_base_type
https://issues.dlang.org/show_bug.cgi?id=13918 --- Comment #3 from Timothee Cour--- full error: error: need to add support for DW_TAG_base_type 'immutable(char)' encoded with DW_ATE = 0x10, bit_size = 8 error: need to add support for DW_TAG_base_type 'char' encoded with DW_ATE = 0x10, bit_size = 8 --
[Issue 8172] OSX: symbols mangled on gdb,ggdb,cgdb,lldb but not on ubuntu; no line numbers on stacktraces
https://issues.dlang.org/show_bug.cgi?id=8172 Timothee Courchanged: What|Removed |Added CC||timothee.co...@gmail.com --- Comment #14 from Timothee Cour --- I have a working patch: see instructions here: https://github.com/timotheecour/dtools/blob/master/dtools/lldbdplugin.d it involves dlopen'ing a D shared library + applying this patch build lldb with https://github.com/llvm-mirror/lldb/pull/3 example results of resulting backtrace shown here: https://github.com/llvm-mirror/lldb/pull/3 --
[Issue 13918] lldb fails to decode DWARF DW_TAG_base_type
https://issues.dlang.org/show_bug.cgi?id=13918 Timothee Courchanged: What|Removed |Added OS|Linux |All --
[Issue 13918] lldb fails to decode DWARF DW_TAG_base_type
https://issues.dlang.org/show_bug.cgi?id=13918 Timothee Courchanged: What|Removed |Added Status|RESOLVED|REOPENED CC||timothee.co...@gmail.com Resolution|WORKSFORME |--- --- Comment #2 from Timothee Cour --- it's still happening in lldb error: need to add support for DW_TAG_base_type 'immutable(char)' encoded with DW_ATE = 0x10, bit_size = 8 this msg appears at the start of a lldb session (eg when using fr v for 1st time) --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 --- Comment #11 from Timothee Cour--- https://github.com/dlang/phobos/pull/6231 --
[Issue 18534] Wrong code for ?: operator when compiling with -O
https://issues.dlang.org/show_bug.cgi?id=18534 --- Comment #2 from hst...@quickfur.ath.cx --- Reduced code without Phobos/template dependency: - auto blah(char ch) { return ch; } auto foo(int i) { return blah(i ? 'A' : 'A'); } void main() { auto c = foo(0); assert(c == 'A'); } - --
[Issue 18534] Wrong code for ?: operator when compiling with -O
https://issues.dlang.org/show_bug.cgi?id=18534 ag0ae...@gmail.com changed: What|Removed |Added CC||ag0ae...@gmail.com --- Comment #1 from ag0ae...@gmail.com --- Reduced Phobos away: void f(char x) {} void foo(int invert) { char c = invert ? 'A' : 'A'; f(c); assert(c == 'A'); // assertion fails } void main() { foo(0); } --
[Issue 18534] Wrong code for ?: operator when compiling with -O
https://issues.dlang.org/show_bug.cgi?id=18534 hst...@quickfur.ath.cx changed: What|Removed |Added Keywords||wrong-code --
[Issue 18534] New: Wrong code for ?: operator when compiling with -O
https://issues.dlang.org/show_bug.cgi?id=18534 Issue ID: 18534 Summary: Wrong code for ?: operator when compiling with -O Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: hst...@quickfur.ath.cx Code: --- auto foo(int invert) { import std.format : format; return format("%c", invert ? 'A' : 'A'); } void main() { auto s = foo(0); assert(s == "A"); // assertion fails } --- Compile command: --- dmd -O -run test.d --- Inspecting the contents of s reveals that instead of containing the character 'A', it contains 0xFF instead. Compiling without -O fixes the problem. Replacing the conditional with just 'A' also makes the problem go away. Seems like -O generates wrong code for the ?: operator. --
[Issue 18533] inline
https://issues.dlang.org/show_bug.cgi?id=18533 Nathan S.changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |INVALID --
[Issue 18533] New: inline
https://issues.dlang.org/show_bug.cgi?id=18533 Issue ID: 18533 Summary: inline Product: D Version: D2 Hardware: All URL: http://dlang.org/ OS: All Status: NEW Severity: enhancement Priority: P3 Component: dlang.org Assignee: nob...@puremagic.com Reporter: n8sh.second...@hotmail.com --
[Issue 13855] Allow multiple selective imports from different modules in a single import statement
https://issues.dlang.org/show_bug.cgi?id=13855 Martin Nowakchanged: What|Removed |Added Status|REOPENED|RESOLVED Resolution|--- |WONTFIX --
[Issue 18532] Hex literals produce invalid strings
https://issues.dlang.org/show_bug.cgi?id=18532 --- Comment #3 from FeepingCreature--- It has to, because it returns string and string is defined to be UTF-8. If it wants to return something that is not UTF-8, it should return ubyte[], and you should have to cast it to string explicitly. --
[Issue 11555] std.algorithm.reverse should return the just-reversed range
https://issues.dlang.org/show_bug.cgi?id=11555 Nick Treleavenchanged: What|Removed |Added CC||n...@geany.org Component|dmd |phobos --
[Issue 18532] Hex literals produce invalid strings
https://issues.dlang.org/show_bug.cgi?id=18532 Basile B.changed: What|Removed |Added CC||b2.t...@gmx.com --- Comment #2 from Basile B. --- It doesn't have to. hexString isn't even design to represent strings literals, it can be a memory dump as well that can be cast to ubyte[]. --
[Issue 18532] Hex literals produce invalid strings
https://issues.dlang.org/show_bug.cgi?id=18532 --- Comment #1 from FeepingCreature--- Update: std.conv.hexString does not validate its return value either. --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 Steven Schveighofferchanged: What|Removed |Added CC||schvei...@yahoo.com --- Comment #10 from Steven Schveighoffer --- (In reply to anonymous4 from comment #8) > Should go through trusted wrapper. > printf is a @system function and can't be called from safe code, arguments > don't even matter. Yes, most of this argument is moot unless you find a better example. The rational behind disallowing .ptr is simple: We want to be able to use pointers in safe D (disallowing them is too crippling). To that end we allow dereferencing a pointer, but not indexing a pointer. In order for this to work, we must ensure that safe code cannot create a dangling pointer. That is, the pointer MUST point at valid data, or point at null. An array with zero length does not generate a known-valid pointer with .ptr, therefore it's disallowed. Using [0] works because it's first bounds-checked that the first element exists. --
[Issue 18532] New: Hex literals produce invalid strings
https://issues.dlang.org/show_bug.cgi?id=18532 Issue ID: 18532 Summary: Hex literals produce invalid strings Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: enhancement Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: default_357-l...@yahoo.de Hex literals let you declare strings that are invalid utf-8. This violates the docs, as well as the typesystem. "\xff" is an expression of type string. string is defined ( https://dlang.org/spec/arrays.html#strings ) to be in UTF-8 format. Furthermore, string is an array of char, and chars are defined to be UTF-8 codepoints. 0xFF is not a valid UTF-8 codepoint. The docs state that hex strings do not perform UTF-8 checking. The docs accurately describe the code; the code is mistaken since it breaks the type. Either the behavior of hex literals must be changed, or the definition of char must be changed. As it stands, the documentation and behavior is self-contradictory. Maybe hex literals can be ubyte[]? --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 ag0ae...@gmail.com changed: What|Removed |Added CC||ag0ae...@gmail.com --- Comment #9 from ag0ae...@gmail.com --- (In reply to Timothee Cour from comment #0) > NOTE: the rationale for that deprecation was that the pointer can't be > dereferenced. However that's no different from the following: > class A{...} > A a; > // valid in safe code even though `a` is null and can't be derefenced. Because no one seems to have addresses this so far: Null dereferences are considered @safe. A null dereference is assumed to lead to a segfault which stops the program, preventing memory corruption. The problem with `.ptr` isn't null. The problem is that the pointer can be invalid despite not being null. --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 --- Comment #8 from anonymous4--- Should go through trusted wrapper. printf is a @system function and can't be called from safe code, arguments don't even matter. --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 --- Comment #7 from Timothee Cour--- >> Anecdotically, all of core.demangle is broken. > Are you sure? It has safe unittests, they wouldn't compile if it was broken. try with -debug=info these will error: debug(info) printf( "overflow: %.*s\n", cast(int) msg.length, msg.ptr ); (many others in this file) Why would this be suddently invalid? what's a workaround? NOTE: this should work regardless of debug(info) being present; so: even if https://issues.dlang.org/show_bug.cgi?id=18407 were fixed, what would be a workaround for: printf( "overflow: %.*s\n", cast(int) msg.length, msg.ptr ); (not involving something like: ``` if(msg.length) printf( "overflow: %.*s\n", cast(int) msg.length, msg.ptr ); else printf( "overflow: \n"); ``` ) --
[Issue 18407] debug should escape nothrow, @nogc, @safe (not just pure)
https://issues.dlang.org/show_bug.cgi?id=18407 anonymous4changed: What|Removed |Added Keywords||spec Hardware|x86 |All OS|Mac OS X|All --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 --- Comment #6 from anonymous4--- (In reply to Timothee Cour from comment #0) > // from core.demangle > printf( “shifting (%.*s)\n”, cast(int) val.length, val.ptr ); > compiler issues error: Error: val.ptr cannot be used in @safe code, use > [0] instead That's issue 18407 --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 --- Comment #5 from anonymous4--- (In reply to Timothee Cour from comment #2) > and it breaks valid code. Your complaint is that there was no deprecation period? > Anecdotically, all of core.demangle is broken. Are you sure? It has safe unittests, they wouldn't compile if it was broken. --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 Mike Franklinchanged: What|Removed |Added CC||slavo5...@yahoo.com --- Comment #4 from Mike Franklin --- The original deprecation was made with this PR: https://github.com/dlang/dmd/pull/5860 It would be prudent to review the comments there in order understand the motivation and rationale. --
[Issue 18531] core.exception.RangeError@src/core/demangle.d(216): Range violation
https://issues.dlang.org/show_bug.cgi?id=18531 Timothee Courchanged: What|Removed |Added CC||timothee.co...@gmail.com --- Comment #1 from Timothee Cour --- https://github.com/dlang/druntime/pull/2117 --
[Issue 18531] New: core.exception.RangeError@src/core/demangle.d(216): Range violation
https://issues.dlang.org/show_bug.cgi?id=18531 Issue ID: 18531 Summary: core.exception.RangeError@src/core/demangle.d(216): Range violation Product: D Version: D2 Hardware: x86 OS: Mac OS X Status: NEW Severity: major Priority: P1 Component: druntime Assignee: nob...@puremagic.com Reporter: timothee.co...@gmail.com different from https://issues.dlang.org/show_bug.cgi?id=18208 ``` void main(){ auto s=`_D3std3uni__T6toCaseS_DQvQt12toLowerIndexFNaNbNiNewZtVii1043S_DQCjQCi10toLowerTabFNaNbNiNemZwSQDo5ascii7toLowerTAyaZQDzFNaNeQmZ14__foreachbody2MFNaNeKmKwZ14__foreachbody3MFNaNeKwZi`; import core.demangle; auto dst=new char[200]; import std.stdio; writeln(demangle(s, dst)); } ``` --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 --- Comment #3 from anonymous4--- --- int[]a=[0,1]; auto b = a[0..0]; a.length=0; a.assumeSafeAppend; assert(a[0..0] is b); --- Would this work? --
[Issue 18300] core.demangle demangling of really long symbol fails
https://issues.dlang.org/show_bug.cgi?id=18300 Rainer Schuetzechanged: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |DUPLICATE --- Comment #3 from Rainer Schuetze --- duplicate of This is a duplicate of https://issues.dlang.org/show_bug.cgi?id=18208, which also has a shorter test symbol. *** This issue has been marked as a duplicate of issue 18208 *** --
[Issue 18208] demangle RangeError@src/core/demangle.d(230)
https://issues.dlang.org/show_bug.cgi?id=18208 Rainer Schuetzechanged: What|Removed |Added CC||c...@benjamin-thaut.de --- Comment #4 from Rainer Schuetze --- *** Issue 18300 has been marked as a duplicate of this issue. *** --
[Issue 18508] Using statement without effect should error
https://issues.dlang.org/show_bug.cgi?id=18508 anonymous4changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |INVALID --- Comment #3 from anonymous4 --- Yep, no statement without effect in the example. Even pure function can still throw exception, which is effect too. --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 --- Comment #2 from Timothee Cour--- > No, array's ptr can't be blindly dereferenced indeed, I never said .ptr can be dereferenced; as I stated, this is no different from `class A{...} A a;` where `a` can't be dereferenced We shouldn't deprecate unless we can suggest to users a valid alternative for `a.ptr`; as I showed, `[0]` is not equivalent (in case a.length==0) and it breaks valid code. Anecdotically, all of core.demangle is broken. --
[Issue 18529] .ptr on arrays can no longer be used in @safe code prevents valid code
https://issues.dlang.org/show_bug.cgi?id=18529 anonymous4changed: What|Removed |Added Status|NEW |RESOLVED Hardware|x86 |All Resolution|--- |INVALID Severity|regression |enhancement --- Comment #1 from anonymous4 --- No, array's ptr can't be blindly dereferenced: --- int[1] a; *a[$..$].ptr=0; --- This is not trivial and requires a DIP. --
[Issue 18530] New: src/rt/tracegc.d(43): Deprecation: The delete keyword has been deprecated
https://issues.dlang.org/show_bug.cgi?id=18530 Issue ID: 18530 Summary: src/rt/tracegc.d(43): Deprecation: The delete keyword has been deprecated Product: D Version: D2 Hardware: x86 OS: Mac OS X Status: NEW Severity: regression Priority: P1 Component: druntime Assignee: nob...@puremagic.com Reporter: timothee.co...@gmail.com --
[Issue 18208] demangle RangeError@src/core/demangle.d(230)
https://issues.dlang.org/show_bug.cgi?id=18208 --- Comment #3 from Timothee Cour--- https://github.com/dlang/druntime/pull/2116 --