|
Archives
D Programming
D
D.gnu
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger
C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows
digitalmars.empire
digitalmars.DMDScript
electronics
|
D.gnu - Re: build gdc with gcc 4.2.2
↑ ↓ ← → Arthur Loiret <arthur.loiret gmail.com> writes:
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Hi,
I've been able to build gdc with gcc-4.2, it stills segfault sometimes
and is unable to build phobos/tango for now, but it's a beginning and
can compile short D files.
I've put the patches in: http://people.dunnewind.net/arthur/gdc-4.2/patches/
gdc-4.2-build.dpatch updates gcc/d/Make-lang.in for the new gcc-4.2 objs
(pr26885) and gcc/d/d-builtins.c copied from the new c-common.c.
gdc-4.2.dpatch is mostly taked from patch-gcc-4.1.x, adding this:
--- gcc/tree.h 2007-11-15 14:21:01.000000000 +0100
+++ gcc/tree.h 2007-11-15 14:22:05.000000000 +0100
-3535,6 +3535,19
=20
extern tree build_nt (enum tree_code, ...);
=20
+/* Still required by gdc */
+#if GCC_VERSION >=3D 3000 || __STDC_VERSION__ >=3D 199901L
+/* Use preprocessor trickery to map "build" to "buildN" where N is the
+ expected number of arguments. This is used for both efficiency (no
+ varargs), and checking (verifying number of passed arguments). */
+#define build(code, ...) \
+ _buildN1(build, _buildC1(__VA_ARGS__))(code, __VA_ARGS__)
+#define _buildN1(BASE, X) _buildN2(BASE, X)
+#define _buildN2(BASE, X) BASE##X
+#define _buildC1(...) _buildC2(__VA_ARGS__,9,8,7,6,5,4,3,2,1,0,0)
+#define _buildC2(x,a1,a2,a3,a4,a5,a6,a7,a8,a9,c,...) c
+#endif
+
extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL);
#define build0(c,t) build0_stat (c,t MEM_STAT_INFO)
extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL);
I'm currently trying to fix ICEs, the problems seems to come from
gimple.
Any help would be welcome, there is still a lot of work to get it
working. :-)
Arthur.
↑ ↓ ← → Ingo Oeser <ioe-news rameria.de> writes:
Hi Arthur,
nice to see that happening!
Arthur Loiret wrote:
I've been able to build gdc with gcc-4.2, it stills segfault sometimes
and is unable to build phobos/tango for now, but it's a beginning and
can compile short D files.
I've been trying to do the same some months ago.
--- gcc/tree.h 2007-11-15 14:21:01.000000000 +0100
+++ gcc/tree.h 2007-11-15 14:22:05.000000000 +0100
-3535,6 +3535,19
extern tree build_nt (enum tree_code, ...);
+/* Still required by gdc */
+#if GCC_VERSION >= 3000 || __STDC_VERSION__ >= 199901L
+/* Use preprocessor trickery to map "build" to "buildN" where N is the
+ expected number of arguments. This is used for both efficiency (no
+ varargs), and checking (verifying number of passed arguments). */
+#define build(code, ...) \
+ _buildN1(build, _buildC1(__VA_ARGS__))(code, __VA_ARGS__)
+#define _buildN1(BASE, X) _buildN2(BASE, X)
+#define _buildN2(BASE, X) BASE##X
+#define _buildC1(...)
_buildC2(__VA_ARGS__,9,8,7,6,5,4,3,2,1,0,0) +#define
_buildC2(x,a1,a2,a3,a4,a5,a6,a7,a8,a9,c,...) c +#endif
+
extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL);
#define build0(c,t) build0_stat (c,t MEM_STAT_INFO)
extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL);
That's more (short term) maintainable than my approach. I patched the D glue
layer, fixed up the callers and provided build2() and build3() for compilers
below GCC 4.0.x.
David, would you accept a patch from me, which does ONLY that?
I'm currently trying to fix ICEs, the problems seems to come from
gimple.
Yes, I have seen the same and my vacation was over, so I stopped it.
I have some questions for some parts of that patch. I'll mail them to you.
Best Regards
Ingo Oeser
↑ ↓ ← → Arthur Loiret <arthur.loiret gmail.com> writes:
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Hi Ingo,
On Sat, Nov 24, 2007 at 03:13:52PM +0100, Ingo Oeser wrote:
--- gcc/tree.h 2007-11-15 14:21:01.000000000 +0100
+++ gcc/tree.h 2007-11-15 14:22:05.000000000 +0100
-3535,6 +3535,19
=20
extern tree build_nt (enum tree_code, ...);
=20
+/* Still required by gdc */
+#if GCC_VERSION >=3D 3000 || __STDC_VERSION__ >=3D 199901L
+/* Use preprocessor trickery to map "build" to "buildN" where N is the
+ expected number of arguments. This is used for both efficiency (no
+ varargs), and checking (verifying number of passed arguments). */
+#define build(code, ...) \
+ _buildN1(build, _buildC1(__VA_ARGS__))(code, __VA_ARGS__)
+#define _buildN1(BASE, X) _buildN2(BASE, X)
+#define _buildN2(BASE, X) BASE##X
+#define _buildC1(...) =20
_buildC2(__VA_ARGS__,9,8,7,6,5,4,3,2,1,0,0) +#define
_buildC2(x,a1,a2,a3,a4,a5,a6,a7,a8,a9,c,...) c +#endif
+
extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL);
#define build0(c,t) build0_stat (c,t MEM_STAT_INFO)
extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL);
That's more (short term) maintainable than my approach. I patched the D g=
layer, fixed up the callers and provided build2() and build3() for compil=
below GCC 4.0.x.=20
You're right. :-)
I'm currently trying to fix ICEs, the problems seems to come from
gimple.
Yes, I have seen the same and my vacation was over, so I stopped it.
I made a few other temporary patches to fix ICEs, here is what changed:
diff -ruN gcc/gimplify.c gcc/gimplify.c
--- gcc/gimplify.c 2007-11-19 11:56:50.000000000 +0000
+++ gcc/gimplify.c 2007-11-19 11:58:32.000000000 +0000
-1804,12 +1804,16
/* Divide the offset by its alignment. */
offset =3D size_binop (EXACT_DIV_EXPR, offset, factor);
=20
- if (!is_gimple_min_invariant (offset))
- {
- TREE_OPERAND (t, 2) =3D offset;
- tret =3D gimplify_expr (&TREE_OPERAND (t, 2), pre_p, post=
_p,
- is_gimple_formal_tmp_reg, fb_rvalue=
);
- ret =3D MIN (ret, tret);
+ /* Would be better to have a look at size_binop ... */
+ if (offset !=3D NULL_TREE)
+ {
+ if (!is_gimple_min_invariant (offset))
+ {
+ TREE_OPERAND (t, 2) =3D offset;
+ tret =3D gimplify_expr (&TREE_OPERAND (t, 2), pre_p, =
post_p,
+ is_gimple_formal_tmp_reg, fb_rv=
alue);
+ ret =3D MIN (ret, tret);
+ }
}
}
}
diff -ruN gcc/tree-inline.c gcc/tree-inline.c
--- gcc/tree-inline.c 2007-11-19 15:41:33.000000000 +0000
+++ gcc/tree-inline.c 2007-11-19 15:42:24.000000000 +0000
-2636,8 +2636,9
{
tree copy, type;
=20
- gcc_assert (TREE_CODE (decl) =3D=3D PARM_DECL
- || TREE_CODE (decl) =3D=3D RESULT_DECL);
+ if (cfun->naked) /* Not sure this is right ... */
+ gcc_assert (TREE_CODE (decl) =3D=3D PARM_DECL
+ || TREE_CODE (decl) =3D=3D RESULT_DECL);
=20
type =3D TREE_TYPE (decl);
=20
gdc-4.2 now builds phobos and tango, see [0] and [1].
[0] http://packages.qa.debian.org/g/gdc-4.2.html
[1] http://people.dunnewind.net/arthur/gdc-4.2/
Here is how to test it:
1/ Add this to your /etc/apt/sources.list
deb http://ftp.fr.debian.org/debian experimental main
deb-src http://ftp.fr.debian.org/debian experimental main
2/ Run sudo aptitude update && sudo aptitude install gdc-4.2
I've cleanup gdc-4.2-build.dpatch: see:
http://people.dunnewind.net/arthur/gdc-4.2/patches/gdc-4.2-build.dpatch
David, could you also have a look at this one?
I have some questions for some parts of that patch. I'll mail them to you.
Sure, no problem.
Have a nice day,
Arthur.
|
|