Author: gbiv Date: Tue Jan 3 17:35:19 2017 New Revision: 290916 URL: http://llvm.org/viewvc/llvm-project?rev=290916&view=rev Log: Re-add objectsize function/incomplete type checks.
I accidentally omitted these when refactoring this code. This caused problems when building parts of the test-suite on MacOS. Modified: cfe/trunk/lib/AST/ExprConstant.cpp cfe/trunk/test/CodeGen/object-size.c Modified: cfe/trunk/lib/AST/ExprConstant.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=290916&r1=290915&r2=290916&view=diff ============================================================================== --- cfe/trunk/lib/AST/ExprConstant.cpp (original) +++ cfe/trunk/lib/AST/ExprConstant.cpp Tue Jan 3 17:35:19 2017 @@ -7192,6 +7192,12 @@ static bool determineEndOffset(EvalInfo CharUnits &EndOffset) { bool DetermineForCompleteObject = refersToCompleteObject(LVal); + auto CheckedHandleSizeof = [&](QualType Ty, CharUnits &Result) { + if (Ty.isNull() || Ty->isIncompleteType() || Ty->isFunctionType()) + return false; + return HandleSizeof(Info, ExprLoc, Ty, Result); + }; + // We want to evaluate the size of the entire object. This is a valid fallback // for when Type=1 and the designator is invalid, because we're asked for an // upper-bound. @@ -7209,7 +7215,7 @@ static bool determineEndOffset(EvalInfo return false; QualType BaseTy = getObjectType(LVal.getLValueBase()); - return !BaseTy.isNull() && HandleSizeof(Info, ExprLoc, BaseTy, EndOffset); + return CheckedHandleSizeof(BaseTy, EndOffset); } // We want to evaluate the size of a subobject. @@ -7238,7 +7244,7 @@ static bool determineEndOffset(EvalInfo } CharUnits BytesPerElem; - if (!HandleSizeof(Info, ExprLoc, Designator.MostDerivedType, BytesPerElem)) + if (!CheckedHandleSizeof(Designator.MostDerivedType, BytesPerElem)) return false; // According to the GCC documentation, we want the size of the subobject Modified: cfe/trunk/test/CodeGen/object-size.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/object-size.c?rev=290916&r1=290915&r2=290916&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/object-size.c (original) +++ cfe/trunk/test/CodeGen/object-size.c Tue Jan 3 17:35:19 2017 @@ -536,3 +536,16 @@ void PR30346() { // CHECK: store i32 14 gi = __builtin_object_size(sa->sa_data, 3); } + +extern char incomplete_char_array[]; +// CHECK-LABEL: @incomplete_and_function_types +int incomplete_and_function_types() { + // CHECK: call i64 @llvm.objectsize.i64.p0i8 + gi = __builtin_object_size(incomplete_char_array, 0); + // CHECK: call i64 @llvm.objectsize.i64.p0i8 + gi = __builtin_object_size(incomplete_char_array, 1); + // CHECK: call i64 @llvm.objectsize.i64.p0i8 + gi = __builtin_object_size(incomplete_char_array, 2); + // CHECK: store i32 0 + gi = __builtin_object_size(incomplete_char_array, 3); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits