chaitanyav updated this revision to Diff 557346. chaitanyav added a comment.
Rebase with upstream and update code as per comments Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D147844/new/ https://reviews.llvm.org/D147844 Files: clang/docs/ReleaseNotes.rst clang/lib/Sema/SemaExpr.cpp clang/test/Analysis/uninit-vals.c clang/test/Sema/integer-overflow.c clang/test/Sema/parentheses.c clang/test/Sema/parentheses.cpp clang/test/SemaCXX/array-bounds.cpp clang/test/SemaCXX/integer-overflow.cpp libcxx/include/__chrono/duration.h libcxx/include/strstream libcxx/test/libcxx/algorithms/nth_element_stability.pass.cpp libcxx/test/libcxx/algorithms/partial_sort_stability.pass.cpp libcxx/test/libcxx/algorithms/sort_stability.pass.cpp libcxxabi/src/cxa_personality.cpp
Index: libcxxabi/src/cxa_personality.cpp =================================================================== --- libcxxabi/src/cxa_personality.cpp +++ libcxxabi/src/cxa_personality.cpp @@ -718,9 +718,7 @@ if (actionEntry == 0) { // Found a cleanup - results.reason = actions & _UA_SEARCH_PHASE - ? _URC_CONTINUE_UNWIND - : _URC_HANDLER_FOUND; + results.reason = (actions & _UA_SEARCH_PHASE) ? _URC_CONTINUE_UNWIND : _URC_HANDLER_FOUND; return; } // Convert 1-based byte offset into @@ -832,9 +830,8 @@ // End of action list. If this is phase 2 and we have found // a cleanup (ttypeIndex=0), return _URC_HANDLER_FOUND; // otherwise return _URC_CONTINUE_UNWIND. - results.reason = hasCleanup && actions & _UA_CLEANUP_PHASE - ? _URC_HANDLER_FOUND - : _URC_CONTINUE_UNWIND; + results.reason = + (hasCleanup && (actions & _UA_CLEANUP_PHASE)) ? _URC_HANDLER_FOUND : _URC_CONTINUE_UNWIND; return; } // Go to next action @@ -1250,10 +1247,9 @@ { const __shim_type_info* excpType = static_cast<const __shim_type_info*>(new_exception_header->exceptionType); - adjustedPtr = - __getExceptionClass(&new_exception_header->unwindHeader) == kOurDependentExceptionClass ? - ((__cxa_dependent_exception*)new_exception_header)->primaryException : - new_exception_header + 1; + adjustedPtr = (__getExceptionClass(&new_exception_header->unwindHeader) == kOurDependentExceptionClass) + ? ((__cxa_dependent_exception*)new_exception_header)->primaryException + : new_exception_header + 1; if (!exception_spec_can_catch(ttypeIndex, classInfo, ttypeEncoding, excpType, adjustedPtr, unwind_exception, base)) Index: libcxx/test/libcxx/algorithms/sort_stability.pass.cpp =================================================================== --- libcxx/test/libcxx/algorithms/sort_stability.pass.cpp +++ libcxx/test/libcxx/algorithms/sort_stability.pass.cpp @@ -32,7 +32,7 @@ std::vector<EqualType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = kSize / 2 - i * (i % 2 ? -1 : 1); + v[i].value = kSize / 2 - i * ((i % 2) ? -1 : 1); } std::less<EqualType> comp; std::__sort_dispatch<std::_ClassicAlgPolicy>(v.begin(), v.end(), comp); @@ -44,7 +44,7 @@ std::vector<EqualType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = kSize / 2 - i * (i % 2 ? -1 : 1); + v[i].value = kSize / 2 - i * ((i % 2) ? -1 : 1); } auto deterministic_v = deterministic(); std::sort(v.begin(), v.end()); @@ -62,7 +62,7 @@ std::vector<EqualType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = kSize / 2 - i * (i % 2 ? -1 : 1); + v[i].value = kSize / 2 - i * ((i % 2) ? -1 : 1); } auto snapshot_v = v; auto snapshot_custom_v = v; Index: libcxx/test/libcxx/algorithms/partial_sort_stability.pass.cpp =================================================================== --- libcxx/test/libcxx/algorithms/partial_sort_stability.pass.cpp +++ libcxx/test/libcxx/algorithms/partial_sort_stability.pass.cpp @@ -32,7 +32,7 @@ std::vector<MyType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = (i % 2 ? 1 : kSize / 2 + i); + v[i].value = ((i % 2) ? 1 : kSize / 2 + i); } auto comp = std::less<MyType>(); std::__partial_sort_impl<std::_ClassicAlgPolicy>(v.begin(), v.begin() + kSize / 2, v.end(), comp); @@ -44,7 +44,7 @@ std::vector<MyType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = (i % 2 ? 1 : kSize / 2 + i); + v[i].value = ((i % 2) ? 1 : kSize / 2 + i); } auto deterministic_v = deterministic(); std::partial_sort(v.begin(), v.begin() + kSize / 2, v.end()); @@ -62,7 +62,7 @@ std::vector<MyType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = (i % 2 ? 1 : kSize / 2 + i); + v[i].value = ((i % 2) ? 1 : kSize / 2 + i); } auto snapshot_v = v; auto snapshot_custom_v = v; Index: libcxx/test/libcxx/algorithms/nth_element_stability.pass.cpp =================================================================== --- libcxx/test/libcxx/algorithms/nth_element_stability.pass.cpp +++ libcxx/test/libcxx/algorithms/nth_element_stability.pass.cpp @@ -32,7 +32,7 @@ std::vector<MyType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = (i % 2 ? i : kSize / 2 + i); + v[i].value = ((i % 2) ? i : kSize / 2 + i); } std::__nth_element<std::_ClassicAlgPolicy>(v.begin(), v.begin() + kSize / 2, v.end(), std::less<MyType>()); return v; @@ -43,7 +43,7 @@ std::vector<MyType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = (i % 2 ? i : kSize / 2 + i); + v[i].value = ((i % 2) ? i : kSize / 2 + i); } auto deterministic_v = deterministic(); std::nth_element(v.begin(), v.begin() + kSize / 2, v.end()); @@ -61,7 +61,7 @@ std::vector<MyType> v; v.resize(kSize); for (int i = 0; i < kSize; ++i) { - v[i].value = (i % 2 ? i : kSize / 2 + i); + v[i].value = ((i % 2) ? i : kSize / 2 + i); } auto snapshot_v = v; auto snapshot_custom_v = v; Index: libcxx/include/strstream =================================================================== --- libcxx/include/strstream +++ libcxx/include/strstream @@ -300,7 +300,7 @@ _LIBCPP_INLINE_VISIBILITY ostrstream(char* __s, int __n, ios_base::openmode __mode = ios_base::out) : ostream(&__sb_), - __sb_(__s, __n, __s + (__mode & ios::app ? _VSTD::strlen(__s) : 0)) + __sb_(__s, __n, __s + ((__mode & ios::app) ? _VSTD::strlen(__s) : 0)) {} #ifndef _LIBCPP_CXX03_LANG @@ -360,7 +360,7 @@ _LIBCPP_INLINE_VISIBILITY strstream(char* __s, int __n, ios_base::openmode __mode = ios_base::in | ios_base::out) : iostream(&__sb_), - __sb_(__s, __n, __s + (__mode & ios::app ? _VSTD::strlen(__s) : 0)) + __sb_(__s, __n, __s + ((__mode & ios::app) ? _VSTD::strlen(__s) : 0)) {} #ifndef _LIBCPP_CXX03_LANG Index: libcxx/include/__chrono/duration.h =================================================================== --- libcxx/include/__chrono/duration.h +++ libcxx/include/__chrono/duration.h @@ -178,7 +178,7 @@ return __lower; if (__lower_diff > __upper_diff) return __upper; - return __lower.count() & 1 ? __upper : __lower; + return (__lower.count() & 1) ? __upper : __lower; } #endif Index: clang/test/SemaCXX/integer-overflow.cpp =================================================================== --- clang/test/SemaCXX/integer-overflow.cpp +++ clang/test/SemaCXX/integer-overflow.cpp @@ -41,7 +41,7 @@ uint64_t not_overflow2 = (1ULL * ((uint64_t)(4608) * (1024 * 1024)) + 2ULL); // expected-warning@+1 2{{overflow in expression; result is 536870912 with type 'int'}} - overflow = 4608 * 1024 * 1024 ? 4608 * 1024 * 1024 : 0; + overflow = (4608 * 1024 * 1024) ? 4608 * 1024 * 1024 : 0; // expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} overflow = 0 ? 0 : 4608 * 1024 * 1024; Index: clang/test/SemaCXX/array-bounds.cpp =================================================================== --- clang/test/SemaCXX/array-bounds.cpp +++ clang/test/SemaCXX/array-bounds.cpp @@ -87,7 +87,7 @@ } #define SIZE 10 -#define ARR_IN_MACRO(flag, arr, idx) flag ? arr[idx] : 1 +#define ARR_IN_MACRO(flag, arr, idx) (flag ? arr[idx] : 1) int test_no_warn_macro_unreachable() { int arr[SIZE]; // expected-note {{array 'arr' declared here}} Index: clang/test/Sema/parentheses.cpp =================================================================== --- clang/test/Sema/parentheses.cpp +++ clang/test/Sema/parentheses.cpp @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -Wparentheses -fsyntax-only -verify %s -// RUN: %clang_cc1 -Wparentheses -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s +// RUN: %clang_cc1 -Wparentheses -Woverloaded-shift-op-parentheses -fsyntax-only -verify %s +// RUN: %clang_cc1 -Wparentheses -Woverloaded-shift-op-parentheses -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s bool someConditionFunc(); @@ -38,7 +38,7 @@ Stream &operator>>(const char*); }; -void f(Stream& s, bool b) { +void f(Stream& s, bool b, int x) { (void)(s << b ? "foo" : "bar"); // expected-warning {{operator '?:' has lower precedence than '<<'}} \ // expected-note {{place parentheses around the '<<' expression to silence this warning}} \ // expected-note {{place parentheses around the '?:' expression to evaluate it first}} @@ -62,6 +62,30 @@ // CHECK: fix-it:"{{.*}}":{[[@LINE-4]]:16-[[@LINE-4]]:16}:")" // CHECK: fix-it:"{{.*}}":{[[@LINE-5]]:15-[[@LINE-5]]:15}:"(" // CHECK: fix-it:"{{.*}}":{[[@LINE-6]]:21-[[@LINE-6]]:21}:")" + + void(s << "Test" << x ? "foo" : "bar"); //expected-warning {{operator '?:' has lower precedence than '<<'}} \ + // expected-note {{place parentheses around the '<<' expression to silence this warning}} \ + // expected-note {{place parentheses around the '?:' expression to evaluate it first}} + // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:8-[[@LINE-3]]:8}:"(" + // CHECK: fix-it:"{{.*}}":{[[@LINE-4]]:24-[[@LINE-4]]:24}:")" + // CHECK: fix-it:"{{.*}}":{[[@LINE-5]]:23-[[@LINE-5]]:23}:"(" + // CHECK: fix-it:"{{.*}}":{[[@LINE-6]]:40-[[@LINE-6]]:40}:")" + + void(s << x == 1 ? "foo": "bar"); //expected-warning {{overloaded operator << has higher precedence than comparison operator}} \ + //expected-note {{place parentheses around the '<<' expression to silence this warning}} \ + //expected-note {{place parentheses around comparison expression to evaluate it first}} + // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:8-[[@LINE-3]]:8}:"(" + // CHECK: fix-it:"{{.*}}":{[[@LINE-4]]:14-[[@LINE-4]]:14}:")" + // CHECK: fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"(" + // CHECK: fix-it:"{{.*}}":{[[@LINE-6]]:19-[[@LINE-6]]:19}:")" + + void(s << static_cast<bool>(x) ? "foo" : "bar"); //expected-warning {{operator '?:' has lower precedence than '<<'}} \ + //expected-note {{place parentheses around the '<<' expression to silence this warning}} \ + //expected-note {{place parentheses around the '?:' expression to evaluate it first}} + // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:8-[[@LINE-3]]:8}:"(" + // CHECK: fix-it:"{{.*}}":{[[@LINE-4]]:33-[[@LINE-4]]:33}:")" + // CHECK: fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"(" + // CHECK: fix-it:"{{.*}}":{[[@LINE-6]]:49-[[@LINE-6]]:49}:")" } struct S { Index: clang/test/Sema/parentheses.c =================================================================== --- clang/test/Sema/parentheses.c +++ clang/test/Sema/parentheses.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -Wparentheses -fsyntax-only -verify %s // RUN: %clang_cc1 -Wparentheses -fsyntax-only -verify %s // RUN: %clang_cc1 -Wparentheses -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s @@ -84,10 +84,10 @@ // CHECK: fix-it:"{{.*}}":{[[@LINE-5]]:14-[[@LINE-5]]:14}:"(" // CHECK: fix-it:"{{.*}}":{[[@LINE-6]]:24-[[@LINE-6]]:24}:")" - (void)(x % 2 ? 1 : 2); // no warning + (void)(x % 2 ? 1 : 2); // expected-warning {{operator '?:' has lower precedence than '%'}} expected-note 2{{place parenthese}} (void)(x + p ? 1 : 2); // expected-warning {{operator '?:' has lower precedence than '+'}} expected-note 2{{place parentheses}} - (void)(p + x ? 1 : 2); // no warning + (void)(p + x ? 1 : 2); // expected-warning {{operator '?:' has lower precedence than '+'}} expected-note 2{{place parentheses}} (void)(p + b ? 1 : 2); // expected-warning {{operator '?:' has lower precedence than '+'}} expected-note 2{{place parentheses}} Index: clang/test/Sema/integer-overflow.c =================================================================== --- clang/test/Sema/integer-overflow.c +++ clang/test/Sema/integer-overflow.c @@ -34,7 +34,7 @@ uint64_t not_overflow2 = (1ULL * ((uint64_t)(4608) * (1024 * 1024)) + 2ULL); // expected-warning@+1 2{{overflow in expression; result is 536870912 with type 'int'}} - overflow = 4608 * 1024 * 1024 ? 4608 * 1024 * 1024 : 0; + overflow = (4608 * 1024 * 1024) ? 4608 * 1024 * 1024 : 0; // expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} overflow = 0 ? 0 : 4608 * 1024 * 1024; Index: clang/test/Analysis/uninit-vals.c =================================================================== --- clang/test/Analysis/uninit-vals.c +++ clang/test/Analysis/uninit-vals.c @@ -32,7 +32,7 @@ int f2_b(void) { int x; // expected-note{{'x' declared without an initial value}} - return ((1+x)+2+((x))) + 1 ? 1 : 2; // expected-warning{{The right operand of '+' is a garbage value}} + return (((1+x)+2+((x))) + 1) ? 1 : 2; // expected-warning{{The right operand of '+' is a garbage value}} // expected-note@-1{{The right operand of '+' is a garbage value}} } Index: clang/lib/Sema/SemaExpr.cpp =================================================================== --- clang/lib/Sema/SemaExpr.cpp +++ clang/lib/Sema/SemaExpr.cpp @@ -9543,11 +9543,13 @@ if (E->getType()->isBooleanType()) return true; if (BinaryOperator *OP = dyn_cast<BinaryOperator>(E)) - return OP->isComparisonOp() || OP->isLogicalOp(); + return OP->isComparisonOp() || OP->isLogicalOp() || (OP->getOpcode() == BO_And); if (UnaryOperator *OP = dyn_cast<UnaryOperator>(E)) return OP->getOpcode() == UO_LNot; if (E->getType()->isPointerType()) return true; + if (E->getType()->isIntegerType()) + return true; // FIXME: What about overloaded operator calls returning "unspecified boolean // type"s (commonly pointer-to-members)? Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -264,6 +264,146 @@ (`#64836 <https://github.com/llvm/llvm-project/issues/64836>`_) - Clang now allows an ``_Atomic`` qualified integer in a switch statement. Fixes (`#65557 <https://github.com/llvm/llvm-project/issues/65557>`_) +- Fix segfault while running clang-rename on a non existing file. + (`#36471 <https://github.com/llvm/llvm-project/issues/36471>`_) +- Fix crash when diagnosing incorrect usage of ``_Nullable`` involving alias + templates. + (`#60344 <https://github.com/llvm/llvm-project/issues/60344>`_) +- Fix confusing warning message when ``/clang:-x`` is passed in ``clang-cl`` + driver mode and emit an error which suggests using ``/TC`` or ``/TP`` + ``clang-cl`` options instead. + (`#59307 <https://github.com/llvm/llvm-project/issues/59307>`_) +- Fix assert that fails when the expression causing the this pointer to be + captured by a block is part of a constexpr if statement's branch and + instantiation of the enclosing method causes the branch to be discarded. +- Fix __VA_OPT__ implementation so that it treats the concatenation of a + non-placemaker token and placemaker token as a non-placemaker token. + (`#60268 <https://github.com/llvm/llvm-project/issues/60268>`_) +- Fix crash when taking the address of a consteval lambda call operator. + (`#57682 <https://github.com/llvm/llvm-project/issues/57682>`_) +- Clang now support export declarations in the language linkage. + (`#60405 <https://github.com/llvm/llvm-project/issues/60405>`_) +- Fix aggregate initialization inside lambda constexpr. + (`#60936 <https://github.com/llvm/llvm-project/issues/60936>`_) +- No longer issue a false positive diagnostic about a catch handler that cannot + be reached despite being reachable. This fixes + `#61177 <https://github.com/llvm/llvm-project/issues/61177>`_ in anticipation + of `CWG2699 <https://wg21.link/CWG2699>_` being accepted by WG21. +- Fix crash when parsing fold expression containing a delayed typo correction. + (`#61326 <https://github.com/llvm/llvm-project/issues/61326>`_) +- Fix crash when dealing with some member accesses outside of class or member + function context. + (`#37792 <https://github.com/llvm/llvm-project/issues/37792>`_) and + (`#48405 <https://github.com/llvm/llvm-project/issues/48405>`_) +- Fix crash when using ``[[clang::always_inline]]`` or ``[[clang::noinline]]`` + statement attributes on a call to a template function in the body of a + template function. +- Fix coroutines issue where ``get_return_object()`` result was always eagerly + converted to the return type. Eager initialization (allowing RVO) is now only + performed when these types match, otherwise deferred initialization is used, + enabling short-circuiting coroutines use cases. This fixes + (`#56532 <https://github.com/llvm/llvm-project/issues/56532>`_) in + anticipation of `CWG2563 <https://cplusplus.github.io/CWG/issues/2563.html>_`. +- Fix highlighting issue with ``_Complex`` and initialization list with more than + 2 items. (`#61518 <https://github.com/llvm/llvm-project/issues/61518>`_) +- Fix ``getSourceRange`` on ``VarTemplateSpecializationDecl`` and + ``VarTemplatePartialSpecializationDecl``, which represents variable with + the initializer, so it behaves consistently with other ``VarDecls`` and ends + on the last token of initializer, instead of right angle bracket of + the template argument list. +- Fix false-positive diagnostic issued for consteval initializers of temporary + objects. + (`#60286 <https://github.com/llvm/llvm-project/issues/60286>`_) +- Correct restriction of trailing requirements clauses on a templated function. + Previously we only rejected non-'templated' things, but the restrictions ALSO need + to limit non-defined/non-member functions as well. Additionally, we now diagnose + requires on lambdas when not allowed, which we previously missed. + (`#61748 <https://github.com/llvm/llvm-project/issues/61748>`_) +- Fix confusing diagnostic for incorrect use of qualified concepts names. +- Fix handling of comments in function like macros so they are ignored in -CC + mode. + (`#60887 <https://github.com/llvm/llvm-project/issues/60887>`_) +- Fix incorrect merging of lambdas across modules. + (`#60985 <https://github.com/llvm/llvm-project/issues/60985>`_) +- Fix crash when handling nested immediate invocations in initializers of global + variables. + (`#58207 <https://github.com/llvm/llvm-project/issues/58207>`_) +- Fix crash when generating code coverage information for `PseudoObjectExpr` in + Clang AST. + (`#45481 <https://github.com/llvm/llvm-project/issues/45481>`_) +- Fix the assertion hit when a template consteval function appears in a nested + consteval/constexpr call chain. + (`#61142 <https://github.com/llvm/llvm-project/issues/61142>`_) +- Clang now better diagnose placeholder types constrained with a concept that is + not a type concept. +- Fix crash when a doc comment contains a line splicing. + (`#62054 <https://github.com/llvm/llvm-project/issues/62054>`_) +- Work around with a clang coverage crash which happens when visiting + expressions/statements with invalid source locations in non-assert builds. + Assert builds may still see assertions triggered from this. +- Fix a failed assertion due to an invalid source location when trying to form + a coverage report for an unresolved constructor expression. + (`#62105 <https://github.com/llvm/llvm-project/issues/62105>`_) +- Fix defaulted equality operator so that it does not attempt to compare unnamed + bit-fields. This fixes: + (`#61355 <https://github.com/llvm/llvm-project/issues/61335>`_) and + (`#61417 <https://github.com/llvm/llvm-project/issues/61417>`_) +- Fix crash after suggesting typo correction to constexpr if condition. + (`#61885 <https://github.com/llvm/llvm-project/issues/61885>`_) +- Clang constexpr evaluator now treats comparison of [[gnu::weak]]-attributed + member pointer as an invalid expression. +- Fix crash when member function contains invalid default argument. + (`#62122 <https://github.com/llvm/llvm-project/issues/62122>`_) +- Fix crash when handling undefined template partial specialization + (`#61356 <https://github.com/llvm/llvm-project/issues/61356>`_) +- Fix premature substitution into the constraints of an inherited constructor. +- Fix crash when attempting to perform parenthesized initialization of an + aggregate with a base class with only non-public constructors. + (`#62296 <https://github.com/llvm/llvm-project/issues/62296>`_) +- Fix crash when handling initialization candidates for invalid deduction guide. + (`#62408 <https://github.com/llvm/llvm-project/issues/62408>`_) +- Fix crash when redefining a variable with an invalid type again with an + invalid type. (`#62447 <https://github.com/llvm/llvm-project/issues/62447>`_) +- Fix a stack overflow issue when evaluating ``consteval`` default arguments. + (`#60082` <https://github.com/llvm/llvm-project/issues/60082>`_) +- Fix the assertion hit when generating code for global variable initializer of + _BitInt(1) type. + (`#62207 <https://github.com/llvm/llvm-project/issues/62207>`_) +- Fix lambdas and other anonymous function names not respecting ``-fdebug-prefix-map`` + (`#62192 <https://github.com/llvm/llvm-project/issues/62192>`_) +- Fix crash when attempting to pass a non-pointer type as first argument of + ``__builtin_assume_aligned``. + (`#62305 <https://github.com/llvm/llvm-project/issues/62305>`_) +- A default argument for a non-type template parameter is evaluated and checked + at the point where it is required. This fixes: + (`#62224 <https://github.com/llvm/llvm-project/issues/62224>`_) and + (`#62596 <https://github.com/llvm/llvm-project/issues/62596>`_) +- Fix an assertion when instantiating the body of a Class Template Specialization + when it had been instantiated from a partial template specialization with different + template arguments on the containing class. This fixes: + (`#60778 <https://github.com/llvm/llvm-project/issues/60778>`_). +- Fix a crash when an enum constant has a dependent-type recovery expression for + C. + (`#62446 <https://github.com/llvm/llvm-project/issues/62446>`_). +- Propagate the value-dependent bit for VAArgExpr. Fixes a crash where a + __builtin_va_arg call has invalid arguments. + (`#62711 <https://github.com/llvm/llvm-project/issues/62711>`_). +- Fix crash on attempt to initialize union with flexible array member. + (`#61746 <https://github.com/llvm/llvm-project/issues/61746>`_). +- Clang `TextNodeDumper` enabled through `-ast-dump` flag no longer evaluates the + initializer of constexpr `VarDecl` if the declaration has a dependent type. +- Match GCC's behavior for ``__builtin_object_size`` and + ``__builtin_dynamic_object_size`` on structs containing flexible array + members. + (`#62789 <https://github.com/llvm/llvm-project/issues/62789>`_). +- Fix a crash when instantiating a non-type template argument in a dependent scope. + (`#62533 <https://github.com/llvm/llvm-project/issues/62533>`_). +- Fix crash when diagnosing default comparison method. + (`#62791 <https://github.com/llvm/llvm-project/issues/62791>`_) and + (`#62102 <https://github.com/llvm/llvm-project/issues/62102>`_). +- Print diagnostic warning about precedence when integer expression is used + without parentheses in an conditional operator expression. + (`#61943 <https://github.com/llvm/llvm-project/issues/61943>`_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits