[Issue 24371] New: String array concatenation does not respect operator precedence

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Feb 5 15:50:31 UTC 2024


https://issues.dlang.org/show_bug.cgi?id=24371

          Issue ID: 24371
           Summary: String array concatenation does not respect operator
                    precedence
           Product: D
           Version: D2
          Hardware: x86
                OS: Linux
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: dechcaudron+issues.dlang at pm.me

Hi,

something odd happens when you mix parenthesis and variables to concatenate
strings and string arrays. See code below:

```
unittest
{
  // All works well with literals
  assert("b" ~ "c" == "bc");
  assert(["a"] ~ "b" == ["a", "b"]);
  assert(["a"] ~ ("b" ~ "c") == ["a", "bc"]);

  // Things work well as long as you only reference one variable
  auto strArr = ["a"];
  assert(strArr ~ ("b" ~ "c") == ["a", "bc"]);
  auto str = "c";
  assert(["a"] ~ ("b" ~ str) == ["a", "bc"]);

  // Things stop working when both operands are variables
  // This should not pass
  assert(strArr ~ ("b" ~ str) == ["a", "b", "c"]);
  // This should not fail
  assert(strArr ~ ("b" ~ str) == ["a", "bc"]);
}

```

When the issue is reproduced, the compiler behaves as if the parenthesis were
not there and appends each individual string to the string array.

This code used to work years ago (unfortunately I cannot remember the DMD
version I was using back then, but it was 2021). I don't know if it also
happens in systems other than Linux.

--


More information about the Digitalmars-d-bugs mailing list