[Clang] Fix handling of reference types in tryEvaluateBuiltinObjectSize (#138247)
The order of operation was slightly incorrect, as we were checking for incomplete types *before* handling reference types. Fixes #129397 --------- Co-authored-by: Erich Keane <ekeane@nvidia.com>
This commit is contained in:
parent
b752822c44
commit
cb068dcec1
@ -635,6 +635,8 @@ Bug Fixes to C++ Support
|
||||
- Clang now emits a warning when class template argument deduction for alias templates is used in C++17. (#GH133806)
|
||||
- Fix a crash when checking the template template parameters of a dependent lambda appearing in an alias declaration.
|
||||
(#GH136432), (#GH137014), (#GH138018)
|
||||
- Fixed an assertion when trying to constant-fold various builtins when the argument
|
||||
referred to a reference to an incomplete type. (#GH129397)
|
||||
|
||||
Bug Fixes to AST Handling
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -781,7 +783,7 @@ clang-format
|
||||
|
||||
libclang
|
||||
--------
|
||||
- Fixed a bug in ``clang_File_isEqual`` that sometimes led to different
|
||||
- Fixed a bug in ``clang_File_isEqual`` that sometimes led to different
|
||||
in-memory files to be considered as equal.
|
||||
- Added ``clang_visitCXXMethods``, which allows visiting the methods
|
||||
of a class.
|
||||
|
@ -12772,11 +12772,13 @@ static bool determineEndOffset(EvalInfo &Info, SourceLocation ExprLoc,
|
||||
bool DetermineForCompleteObject = refersToCompleteObject(LVal);
|
||||
|
||||
auto CheckedHandleSizeof = [&](QualType Ty, CharUnits &Result) {
|
||||
if (Ty.isNull() || Ty->isIncompleteType() || Ty->isFunctionType())
|
||||
if (Ty.isNull())
|
||||
return false;
|
||||
|
||||
if (Ty->isReferenceType())
|
||||
Ty = Ty.getNonReferenceType();
|
||||
Ty = Ty.getNonReferenceType();
|
||||
|
||||
if (Ty->isIncompleteType() || Ty->isFunctionType())
|
||||
return false;
|
||||
|
||||
return HandleSizeof(Info, ExprLoc, Ty, Result);
|
||||
};
|
||||
|
@ -1,5 +1,7 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx14 -std=c++14 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++2a %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++2b %s
|
||||
|
||||
|
||||
typedef __SIZE_TYPE__ size_t;
|
||||
|
||||
@ -119,3 +121,13 @@ constexpr int bos_new() { // cxx14-error {{constant expression}}
|
||||
void *p = new int; // cxx14-note {{until C++20}}
|
||||
return __builtin_object_size(p, 0);
|
||||
}
|
||||
|
||||
|
||||
namespace GH129397 {
|
||||
|
||||
struct incomplete;
|
||||
void test(incomplete &ref) {
|
||||
__builtin_object_size(&ref, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user