Author: Richard Smith Date: 2019-12-13T18:41:54-08:00 New Revision: c5b890e922432bd80a5e3c6d82994ef4cdc41900
URL: https://github.com/llvm/llvm-project/commit/c5b890e922432bd80a5e3c6d82994ef4cdc41900 DIFF: https://github.com/llvm/llvm-project/commit/c5b890e922432bd80a5e3c6d82994ef4cdc41900.diff LOG: PR44268: Fix crash if __builtin_object_size is applied to a heap allocation. Added: Modified: clang/lib/AST/ExprConstant.cpp clang/test/SemaCXX/builtin-object-size-cxx14.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index fbc706b25d15..f3856f58b113 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -10218,7 +10218,7 @@ static QualType getObjectType(APValue::LValueBase B) { if (const ValueDecl *D = B.dyn_cast<const ValueDecl*>()) { if (const VarDecl *VD = dyn_cast<VarDecl>(D)) return VD->getType(); - } else if (const Expr *E = B.get<const Expr*>()) { + } else if (const Expr *E = B.dyn_cast<const Expr*>()) { if (isa<CompoundLiteralExpr>(E)) return E->getType(); } else if (B.is<TypeInfoLValue>()) { diff --git a/clang/test/SemaCXX/builtin-object-size-cxx14.cpp b/clang/test/SemaCXX/builtin-object-size-cxx14.cpp index a57bb6b53787..b7c6f6be01f5 100644 --- a/clang/test/SemaCXX/builtin-object-size-cxx14.cpp +++ b/clang/test/SemaCXX/builtin-object-size-cxx14.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify -std=c++14 %s +// RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx14 -std=c++14 %s // RUN: %clang_cc1 -fsyntax-only -verify -std=c++2a %s typedef __SIZE_TYPE__ size_t; @@ -113,3 +113,9 @@ namespace InvalidBase { constexpr size_t bos_dtor = __builtin_object_size(&(T&)(T&&)invalid_base_2(), 0); static_assert(bos_dtor == -1, ""); } + +// PR44268 +constexpr int bos_new() { // cxx14-error {{constant expression}} + void *p = new int; // cxx14-note {{until C++20}} + return __builtin_object_size(p, 0); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits