Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion clang/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -623,6 +623,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
refered to a reference to an incomplete type. (#GH129397)

Bug Fixes to AST Handling
^^^^^^^^^^^^^^^^^^^^^^^^^
Expand Down Expand Up @@ -769,7 +771,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.
Expand Down
8 changes: 5 additions & 3 deletions clang/lib/AST/ExprConstant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
};
Expand Down
12 changes: 12 additions & 0 deletions clang/test/SemaCXX/builtin-object-size-cxx14.cpp
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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);
}

}