Author: Shafik Yaghmour Date: 2024-01-29T10:08:09-08:00 New Revision: 7b0396faabce0cec470779ae5e3a851bedb2ac12
URL: https://github.com/llvm/llvm-project/commit/7b0396faabce0cec470779ae5e3a851bedb2ac12 DIFF: https://github.com/llvm/llvm-project/commit/7b0396faabce0cec470779ae5e3a851bedb2ac12.diff LOG: [Clang][Sema] Fix crash when type used in return statement contains errors (#79788) In Sema in `BuildReturnStmt(...)` when we try to determine is the type is move eligible or copy elidable we don't currently check of the init of the `VarDecl` contain errors or not. This can lead to a crash since we may send a type that is not complete into `getTypeInfo(...)` which does not allow this. This fixes: https://github.com/llvm/llvm-project/issues/63244 https://github.com/llvm/llvm-project/issues/79745 Added: Modified: clang/docs/ReleaseNotes.rst clang/lib/Sema/SemaStmt.cpp clang/test/SemaCXX/deduced-return-type-cxx14.cpp Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 9fd4d8d65627c9e..99971bf10922bae 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -138,6 +138,9 @@ Bug Fixes to C++ Support - Fixed deducing auto& from const int in template parameters of partial specializations. (`#77189 <https://github.com/llvm/llvm-project/issues/77189>`_) +- Fix for crash when using a erroneous type in a return statement. + Fixes (`#63244 <https://github.com/llvm/llvm-project/issues/63244>`_) + and (`#79745 <https://github.com/llvm/llvm-project/issues/79745>`_) Bug Fixes to AST Handling ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 9e7c8c7e4e8c12c..5d5a29b825ae7d7 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -3391,6 +3391,8 @@ Sema::NamedReturnInfo Sema::getNamedReturnInfo(Expr *&E, const auto *VD = dyn_cast<VarDecl>(DR->getDecl()); if (!VD) return NamedReturnInfo(); + if (VD->getInit() && VD->getInit()->containsErrors()) + return NamedReturnInfo(); NamedReturnInfo Res = getNamedReturnInfo(VD); if (Res.Candidate && !E->isXValue() && (Mode == SimplerImplicitMoveMode::ForceOn || diff --git a/clang/test/SemaCXX/deduced-return-type-cxx14.cpp b/clang/test/SemaCXX/deduced-return-type-cxx14.cpp index c0d43911b8c7174..415bbbf1a0bc509 100644 --- a/clang/test/SemaCXX/deduced-return-type-cxx14.cpp +++ b/clang/test/SemaCXX/deduced-return-type-cxx14.cpp @@ -724,3 +724,12 @@ struct DeducedTargetTypeOfConversionFunction { // since-cxx20-error@-1 {{'decltype(auto)' not allowed in declaration of conversion function template}} #endif }; + +namespace GH79745 { +template <typename = int> struct a; // expected-note {{template is declared here}} +auto f() { + a c; // cxx20_23-error {{implicit instantiation of undefined template}} \ + // cxx14-error {{use of class template 'a' requires template arguments}} + return c; +} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits