Commit Graph
942 Commits
Author SHA1 Message Date
Tomas Lindquist Olsen 062b6d93c4 Make sure typeinfo output are mutable types, this is a temporary workaround to get druntime genobj.d to compile until we figure out what typeinfos are actually needed here and there ... 2009-06-03 04:12:28 +02:00
Tomas Lindquist Olsen b218bfc828 Added missing initializer of (LDC introduced) Expression::cachedLvalue in D2 frontend. 2009-06-03 03:49:24 +02:00
Tomas Lindquist Olsen 092381577f Some minor changes to handling of variables referenced from nested functions in D2 .
Added generation of new 'void*[4] reserved;' !ModuleInfo member .
2009-06-03 03:04:47 +02:00
Tomas Lindquist Olsen f6997cb604 D2:
Applied function type from D1 frontend that got removed in D2, it's critical for member function type to be correct.

Fixed a bunch of type discrepancies in druntime object.di vs. genobj.d .

Disabled (#if 0) some potentally very large type dumps for -vv .

Updated classinfo and typeinfo generation for D2, almost complete now.

Added finer grained checks for vtbl type mismatching, aids debugging.
2009-06-03 02:28:48 +02:00
Frits van Bommel cf5ad1a5b0 Remove some unnecessary #ifs. The D1 frontend has a Type::nextOf() which just
returns `next`.
2009-06-02 18:41:10 +02:00
Robert Clipsham 435d3069f6 Automated merge with http://hg.dsource.org/projects/ldc 2009-06-02 17:12:37 +01:00
Frits van Bommel ba72e39d24 Add syscall to the x86-64 asm parser, and both syscall and sysret to the
x86 one. Fixes #316.
2009-06-01 23:42:42 +02:00
Frits van Bommel fd037f35e9 Fix a type mismatch in ModuleInfo generation. 2009-06-01 23:17:47 +02:00
Robert Clipsham cf08cc2844 Automated merge with http://hg.dsource.org/projects/ldc 2009-06-01 19:02:20 +01:00
Robert Clipsham 91ddf6140a More tweaks. 2009-06-01 18:58:21 +01:00
Frits van Bommel 2fe8f2cd74 Improve ABI conformance on x86 by passing the sret parameter in EAX if there's
no `this`.
2009-05-31 12:43:59 +02:00
Kelly Wilson 008d81afb0 Fix "garbage at end of line" errors on mingw...shouldn't affect linux/macosx 2009-05-31 09:10:33 -06:00
Christian Kamm 78aa98fdfb Error on invalid array cast. See DMD3041. 2009-05-31 15:07:04 +02:00
Frits van Bommel 3718bd23fb Add nest attribute to this parameters on x86-64. This is a free extra
parameter register :).
2009-05-31 10:41:20 +02:00
Frits van Bommel c8b10643f9 Add some missing returns. 2009-05-30 23:48:22 +02:00
Kelly Wilson 3eb4a4d389 merging 2009-05-30 14:36:00 -06:00
Kelly Wilson 71477fcb8c Forgot one windows underscore for asm output 2009-05-30 14:35:03 -06:00
Robert Clipsham c5be82c5ae LDC 2 compiles again. 2009-05-30 17:23:32 +01:00
Frits van Bommel da593c99dc Remove code duplication for vtable loads and improve instruction naming to make
bitcode with virtual calls easier to read.
2009-05-30 13:04:49 +02:00
Christian Kamm a05ed9a171 Fix #309: allow -of with multiple source files if -singleobj is given. 2009-05-30 12:58:04 +02:00
Christian Kamm e03a897bad Make sure complex -> integral casts are not used when casting to bool.
Error instead of assert on unimplemented cast.
2009-05-28 21:45:14 +02:00
Christian Kamm 803156b035 Allow complex -> integral casts. 2009-05-28 20:26:26 +02:00
Frits van Bommel a24a2201f1 Teach -dgc2stack to preserve the call graph. This should allow for more
efficient execution by the pass manager.
2009-05-28 02:14:01 +02:00
Frits van Bommel 6619190ba5 * Add -functionattrs to default pass list so -dgc2stack is more effective
when callees aren't inlined. This should also improve various standard LLVM
  optimizations.
* Comment out some verbose logging.
2009-05-28 00:07:21 +02:00
Christian Kamm 7fd43e8bf7 Error instead of assert on delegate literals as constant expressions.
Make function literal linkage internal inside functions and external otherwise.
2009-05-27 19:20:18 +02:00
Frits van Bommel e7b3f5415f Make "aa[key]" use the same runtime call as "key in aa". The runtime calls
these were using were different, but with equivalent definitions.

With `ldc -O3`, the following functions now all compile to the exact same code:
{{{
int[int] y;
void foo(int x) {
    if (x in y) {
        auto z = x in y;
        sink(*z);
    }
}

void bar(int x) {
    if (x in y) {
        sink(y[x]);
    }
}

void baz(int x) {
    if (auto p = x in y) {
        sink(*p);
    }
}
}}}
2009-05-25 12:50:40 +02:00
Frits van Bommel 1791d7b8b4 Fix a behavioral change accidentally introduced by the move to the LLVM
commandline system: `-output-(bc|ll|s)` used to disable generation of an object
file unless explicitly requested with `-output-o`. Now they do so again.
2009-05-23 20:57:22 +02:00
Christian Kamm 52329f071e Fix regression dstress.nocompile.finally_07. The EnclosingTryFinally handler
should not be set when emitting the landing pad's finally code.
2009-05-23 09:02:36 +02:00
Christian Kamm 5b799deeb4 Fix #308 by giving finally code emitted by EnclosingTryFinally a different landing pad. 2009-05-23 00:23:39 +02:00
Frits van Bommel adfc5b3ee9 Fix scope(exit) foreach (ref v; arr) foo(v); 2009-05-22 21:38:01 +02:00
Frits van Bommel 59f9b35cea Count the sret register as well when keeping track of how many integer registers
are available for extern(C) functions on x86-64.
Interestingly, llvm-g++ seems to have a very similar bug: http://llvm.org/pr4242
(So this breaks ABI-compatibility with llvm-gcc for this corner case, but gains
it with gcc...)

To clarify, this is about code like this:
{{{
struct S { void*[3] data; }
struct T { void*[2] data; }

// The T should be passed in memory, and p in the last int register.
extern(C) S fail(int, int, int, int, T t, void* p) {
    S s;
    s.data[0] = t.data[0];
    s.data[1] = t.data[1];
    s.data[2] = p;
    return s;
}
}}}
which should generate code functionally equivalent to this:
{{{
extern(C) S* succeed(S* s, int, int, int, int, T t, void* p) {
    s.data[0] = t.data[0];
    s.data[1] = t.data[1];
    s.data[2] = p;
    return s;
}
}}}
(with the same definitions for S and T)
2009-05-22 13:17:06 +02:00
Christian Kamm 86e1457dde Automated merge with http://hg.dsource.org/projects/ldc 2009-05-22 10:18:04 +02:00
Christian Kamm c433604243 Fix bug #307 by doing what DMD does: add the arrayop to
sc->module->importedFrom instead of sc->module. That way array ops in template
instantiations will be semantic3'ed.
2009-05-22 10:17:47 +02:00
Frits van Bommel 2739cd108c Let TargetABI::passByValue() know when a parameter is byref (either explicitly
or because it's a static array) by giving it the pointer type instead of the
type itself.
This fixes Derelict compilation on x86-64, where the ABI wasn't expecting a
static array to be passed in at all.
2009-05-22 00:19:54 +02:00
Frits van Bommel 2f150ddd62 Oops, didn't mean to change debug info linkage. 2009-05-21 15:26:46 +02:00
Frits van Bommel a520661667 Now that templates instantiations are no longer emitted for all modules that
even blink at them they seem to break due to being linkonce (if compiled with
any optimization level > 0), so let's give them weak linkage instead.
The difference is that unreferenced linkonce symbols can be deleted, while
weak symbols need to be preserved.
2009-05-21 15:23:28 +02:00
Christian Kamm f675d36cfb Tentative fix for semantic3 on imported modules and unnecessary template
function definition issue. Please test!
Also change linkage of __interfaceInfos to external (same as __Class, __vtbl,
__init). The other change might make this superfluous.
2009-05-21 10:56:04 +02:00
Christian Kamm 8e56fe69a4 Merged xfBuild patch for dependency tree generation. See #286. 2009-05-20 21:13:41 +02:00
Frits van Bommel 95c35225bb Don't print the entire declaration of the alliassee when ->toChars() is
called on an `AliasDeclaration`; just printing the name will do. This fixes
#305, which otherwise tries to generate
{{{
  class E {
      void A() {
          alias /* recurse into E->toCBuffer() */ m;
      }
  }
}}}
by way of an infinite recursion (causing a segfault when the stack runs out).
2009-05-20 16:20:59 +02:00
Frits van Bommel 3164ceba17 Remove some overly verbose logging. 2009-05-19 20:46:33 +02:00
Kelly Wilson 16a2512808 remove extra 'test' instructions and fix 'test' properly 2009-05-19 12:28:44 -06:00
Kelly Wilson 8941b6960c fix missing 'test' mnemonic and add several variations 2009-05-19 11:58:54 -06:00
Tomas Lindquist Olsen f733680251 Try to cut down reallocations when building string literals. 2009-05-18 16:01:22 +02:00
Tomas Lindquist Olsen be25445461 Added simple check for ClassInfo change introduced in DMD 1.045, it must have 12 fields. 2009-05-17 23:15:04 +02:00
Frits van Bommel 827880e467 Don't try to strip metadata if we don't generate any 2009-05-17 22:40:02 +02:00
Tomas Lindquist Olsen 0b8413b4bc Fixed class -> integer casts. 2009-05-17 22:02:03 +02:00
Tomas Lindquist Olsen 2690f3cfd8 Add debug info for all class fields, including those from super classes... 2009-05-17 17:55:53 +02:00
Tomas Lindquist Olsen e2ba08388f Added new FreeBSD and Solaris predefined version identifiers. 2009-05-17 17:10:26 +02:00
Tomas Lindquist Olsen b64ad3299e Use RTTIBuilder to build !ModuleInfo, still needs some work. 2009-05-17 17:04:47 +02:00
Tomas Lindquist Olsen 3e4ade93ba Updated comment in RTTIBuilder.h 2009-05-17 16:31:23 +02:00