[libcxx-commits] [libcxx] f355a57 - [libcxx] Initialize vcruntime __std_exception_data in the exception copy ctor (#144329)

via libcxx-commits libcxx-commits at lists.llvm.org
Tue Aug 5 12:11:31 PDT 2025


Author: Martin Storsjö
Date: 2025-08-05T22:11:27+03:00
New Revision: f355a57728c28f1df35cb0bc5bacefc5d7f89bd1

URL: https://github.com/llvm/llvm-project/commit/f355a57728c28f1df35cb0bc5bacefc5d7f89bd1
DIFF: https://github.com/llvm/llvm-project/commit/f355a57728c28f1df35cb0bc5bacefc5d7f89bd1.diff

LOG: [libcxx] Initialize vcruntime __std_exception_data in the exception copy ctor (#144329)

This fixes failures in a number of tests, in the
clang-cl-no-vcruntime configuration (where libcxx provides dummy, no-op
replacements of some vcruntime base exception classes), if building with
optimization enabled.

Previously, with optimization enabled, the compiler concluded that these
fields would be uninitialized at the points of asserts in the tests.

This fixes the following tests in this configuration:

llvm-libc++-shared-no-vcruntime-clangcl.cfg.in ::
std/language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc.pass.cpp
llvm-libc++-shared-no-vcruntime-clangcl.cfg.in ::
std/language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length.pass.cpp
llvm-libc++-shared-no-vcruntime-clangcl.cfg.in ::
std/language.support/support.exception/bad.exception/bad_exception.pass.cpp
llvm-libc++-shared-no-vcruntime-clangcl.cfg.in ::
std/language.support/support.exception/exception/exception.pass.cpp
llvm-libc++-shared-no-vcruntime-clangcl.cfg.in ::
std/language.support/support.rtti/bad.cast/bad_cast.pass.cpp
llvm-libc++-shared-no-vcruntime-clangcl.cfg.in ::
std/language.support/support.rtti/bad.typeid/bad_typeid.pass.cpp

Added: 
    

Modified: 
    libcxx/include/__exception/exception.h

Removed: 
    


################################################################################
diff  --git a/libcxx/include/__exception/exception.h b/libcxx/include/__exception/exception.h
index f7dab6e83ad14..161cc49979e4a 100644
--- a/libcxx/include/__exception/exception.h
+++ b/libcxx/include/__exception/exception.h
@@ -48,7 +48,7 @@ class exception { // base of all library exceptions
     __data_._DoFree = true;
   }
 
-  exception(exception const&) _NOEXCEPT {}
+  exception(exception const&) _NOEXCEPT : __data_() {}
 
   exception& operator=(exception const&) _NOEXCEPT { return *this; }
 


        


More information about the libcxx-commits mailing list