On 22/07/2020 17:42, Matthias Klose wrote:
> Control: tags -1 + moreinfo
> 
> On 7/22/20 12:59 PM, Adrian Bunk wrote:
>> Package: gdc-10
>> Version: 10.1.0-6
>> Severity: important
>> Tags: ftbfs
>> Control: affects -1 src:gtk-d
>>
>> https://buildd.debian.org/status/package.php?p=gtk-d&suite=sid
>>
>> ...
>> during RTL pass: expand
>> /usr/lib/gcc/arm-linux-gnueabihf/10/include/d/std/algorithm/mutation.d: In 
>> function ‘gtkd_container_remove’:
>> /usr/lib/gcc/arm-linux-gnueabihf/10/include/d/std/algorithm/mutation.d:2044:10:
>>  internal compiler error: Segmentation fault
>>  2044 |     auto result = range;
>>       |          ^
>> Please submit a full bug report,
>> with preprocessed source if appropriate.
>> See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.
>> make[2]: *** [GNUmakefile:260: generated/gtkd/gtk/Container.pic.o] Error 1
>>
> 
> I see this on armhf with a -j8 build. Trying to re-run the command succeeds.
> Building the package with -j1 also succeeds.  Are you able to get a 
> stacktrace?
> 

I think fixing upstream PR96156 and PR96157 will deal with this.

However for the gcc-10 release, obviously will need a smaller change to fix 
this issue.

Issue raised here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96301

Testing the following patch doesn't show up any regressions in the testsuite, 
despite my initial reservations that it would do the right thing for POD types.


diff --git a/gcc/d/decl.cc b/gcc/d/decl.cc
index 845fc5cf877..e1ec1719b4c 100644
--- a/gcc/d/decl.cc
+++ b/gcc/d/decl.cc
@@ -981,11 +981,13 @@ public:
       {
        tree resdecl = DECL_RESULT (fndecl);
 
-       TREE_TYPE (resdecl)
-         = build_reference_type (TREE_TYPE (resdecl));
-       DECL_BY_REFERENCE (resdecl) = 1;
-       TREE_ADDRESSABLE (resdecl) = 0;
-       relayout_decl (resdecl);
+       if (TREE_ADDRESSABLE (TREE_TYPE (resdecl)))
+         {
+           TREE_TYPE (resdecl) = build_reference_type (TREE_TYPE (resdecl));
+           DECL_BY_REFERENCE (resdecl) = 1;
+           TREE_ADDRESSABLE (resdecl) = 0;
+           relayout_decl (resdecl);
+         }
 
        if (d->nrvo_var)
          {
@@ -995,7 +997,9 @@ public:
            DECL_NAME (resdecl) = DECL_NAME (var);
            /* Don't forget that we take its address.  */
            TREE_ADDRESSABLE (var) = 1;
-           resdecl = build_deref (resdecl);
+
+           if (DECL_BY_REFERENCE (resdecl))
+             resdecl = build_deref (resdecl);
 
            SET_DECL_VALUE_EXPR (var, resdecl);
            DECL_HAS_VALUE_EXPR_P (var) = 1; 

Reply via email to