Public bug reported:

On Linux, the distros often use libstdc++ rather than libc++ for Clang.
Building libcxx is an art that I have never been able to untangle, and I
think the maintainers have discovered the same.

Below, I'm catching a UB finding when using Clang and libstdc++. This
one has been around for some time. I first encountered it on Apple
platforms. I regularly encounter it on Debian and Ubuntu.

The fix is fairly easy, and I usually just do it: a couple of casts
among unsigned and the flags. Also see http://lists.llvm.org/pipermail
/cfe-dev/2015-January/040753.html.

**********

$ cat ub.cxx
#include <iostream>

int main(int argc, char* argv[])
{
  std::cout << std::hex << argc << std::endl;
  std::cout << std::dec << argc << std::endl;
  return 0;
}

$ clang++ -fsanitize=undefined ub.cxx -o ub.exe

$ ./ub.exe
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/ios_base.h:96:24:
 runtime error: load of value 4294967221, which is not a valid value for type 
'std::_Ios_Fmtflags'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/ios_base.h:76:67:
 runtime error: load of value 4294967221, which is not a valid value for type 
'std::_Ios_Fmtflags'
1
1

**********

$ g++ --version
g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

$ uname -a
Linux ubuntu 3.13.0-66-generic #108-Ubuntu SMP Wed Oct 7 15:20:27 UTC 2015 
x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release
No LSB modules are available.

**********

$ apt-cache show g++
Package: g++
Priority: optional
Section: devel
Installed-Size: 34
Maintainer: Ubuntu Developers <ubuntu-devel-disc...@lists.ubuntu.com>
Original-Maintainer: Debian GCC Maintainers <debian-...@lists.debian.org>
Architecture: amd64
Source: gcc-defaults (1.124ubuntu6)
Version: 4:4.8.2-1ubuntu6
Provides: c++-compiler
Depends: cpp (>= 4:4.8.2-1ubuntu6), gcc (>= 4:4.8.2-1ubuntu6), g++-4.8 (>= 
4.8.2-5~), gcc-4.8 (>= 4.8.2-5~)
Suggests: g++-multilib
Filename: pool/main/g/gcc-defaults/g++_4.8.2-1ubuntu6_amd64.deb
Size: 1490
MD5sum: 7332a4e9116b821e167a3d0236ca413a
SHA1: 2c7201808be1029d21b7691c5a855535a4fcbd51
SHA256: 02c3d204efe6c34bf3de655aaf6a9ce524511977aedf92d7bce7093d0581f977
Description-en: GNU C++ compiler
 This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
 .
 This is a dependency package providing the default GNU C++ compiler.
Description-md5: 4d44b18774ae5123b7c3f70d940cf655
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Build-Essential: yes
Origin: Ubuntu
Supported: 5y

** Affects: gcc-defaults (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1514309

Title:
  Undefined Behavior in GCC 4.8 ios_base.h

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1514309/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to