https://github.com/sookach updated https://github.com/llvm/llvm-project/pull/112111
>From 384e4eba4c3a587f0645e5f037b81acff786e39e Mon Sep 17 00:00:00 2001 From: Andrew Sukach <andrewsuk...@gmail.com> Date: Sat, 12 Oct 2024 19:47:30 -0400 Subject: [PATCH] [clang] Check for null TypeSourceInfo in Sema::CreateUnaryExprOrTypeTraitExpr --- clang/docs/ReleaseNotes.rst | 2 ++ clang/lib/Sema/SemaExpr.cpp | 3 +++ .../test/SemaCXX/unary-expr-or-type-trait-invalid.cpp | 11 +++++++++++ 3 files changed, 16 insertions(+) create mode 100644 clang/test/SemaCXX/unary-expr-or-type-trait-invalid.cpp diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 763bc3ac159322..f2f6988a1f5c13 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -505,6 +505,8 @@ Bug Fixes to C++ Support - Fix a crash when parsing a pseudo destructor involving an invalid type. (#GH111460) - Fixed an assertion failure when invoking recovery call expressions with explicit attributes and undeclared templates. (#GH107047, #GH49093) +- Fixed a compiler crash that occurred when processing malformed code involving `sizeof` with + an invalid type argument. (#GH111594) Bug Fixes to AST Handling ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 4e37385710af5e..b0bd216c5dc101 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -4629,6 +4629,9 @@ ExprResult Sema::CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo, TInfo->getType()->isVariablyModifiedType()) TInfo = TransformToPotentiallyEvaluated(TInfo); + if (!TInfo) + return ExprError(); + // C99 6.5.3.4p4: the type (an unsigned integer type) is size_t. return new (Context) UnaryExprOrTypeTraitExpr( ExprKind, TInfo, Context.getSizeType(), OpLoc, R.getEnd()); diff --git a/clang/test/SemaCXX/unary-expr-or-type-trait-invalid.cpp b/clang/test/SemaCXX/unary-expr-or-type-trait-invalid.cpp new file mode 100644 index 00000000000000..ffb9e3df1e5843 --- /dev/null +++ b/clang/test/SemaCXX/unary-expr-or-type-trait-invalid.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Wno-unused-value %s +// +// Note: This test is ensure that code does not cause a crash as previously +// reported in (#GH111594). The specific diagnostics are unimportant. + +a() {struct b c (sizeof(b * [({ {tree->d* next)} 0 + +// expected-error@6 0+{{}} +// expected-error@11 0+{{}} +// expected-note@6 0+{{}} + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits