[Issue 22083] New: Error: function ldc.intrinsics.llvm_bswap!uint.llvm_bswap conflict with std.bitmanip.nativeToBigEndian!ushort.nativeToBigEndian

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Jun 25 00:13:51 UTC 2021


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

          Issue ID: 22083
           Summary: Error: function
                    ldc.intrinsics.llvm_bswap!uint.llvm_bswap conflict
                    with
                    std.bitmanip.nativeToBigEndian!ushort.nativeToBigEndia
                    n
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: mingwu at gmail.com

kinke think this is a frontend bug, only showing in LDC:

https://github.com/ldc-developers/ldc/issues/3772

=================================================
Hi,

While building apache-thrift, LDC has build failure (DMD succeed):

/home/./.dub/packages/apache-thrift-0.14.1/apache-thrift/lib/d/src/thrift/transport/websocket.d(335,39):
Error: function ldc.intrinsics.llvm_bswap!uint.llvm_bswap at
/home/./project/ldc2-1.26.0-linux-x86_64/bin/../import/ldc/intrinsics.di(405,7)
conflicts with function std.bitmanip.nativeToBigEndian!ushort.nativeToBigEndian
at
/home/./project/ldc2-1.26.0-linux-x86_64/bin/../import/std/bitmanip.d(2998,6)

While there is a work around by using fully qualified names:
std.bitmanip.nativeToBigEndian, I think LDC compiler should be fixed.

$ ldc2 --version
LDC - the LLVM D compiler (1.26.0):
  based on DMD v2.096.1 and LLVM 11.0.1
  built with LDC - the LLVM D compiler (1.26.0)
  Default target: x86_64-unknown-linux-gnu
  Host CPU: znver1
  http://dlang.org - http://wiki.dlang.org/LDC



This looks like a frontend bug - the conflict seems to be caused by
https://github.com/ldc-developers/phobos/blob/16d1a9be59cb319961bd7bc0bcd1128151fc0a67/std/digest/sha.d#L124, 
```
version (LittleEndian)
{
    private alias nativeToBigEndian = bswap;
    private alias bigEndianToNative = bswap;
}
```

which is a private alias, which - for LDC - aliases 2 other aliases: 

https://github.com/ldc-developers/druntime/blob/8916695501005be33291f5a88e399b7eb1eb9e25/src/core/bitop.d#L657
and 
```
version (LDC)
{
    alias bswap = llvm_bswap!uint;
}
```


https://github.com/ldc-developers/druntime/blob/8916695501005be33291f5a88e399b7eb1eb9e25/src/core/bitop.d#L677
```
version (LDC)
{
    alias bswap = llvm_bswap!ulong;
}
```

=================================

I wasn't able to reduce it to a smaller test case; maybe someone who is more
familiar with the frontend code can do.

--


More information about the Digitalmars-d-bugs mailing list