Hm, still can't reproduce this with a normal stage2-RA build of clang+compiler_rt.
And it looks like the next build on the job has the same issue: http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/5468/steps/annotate/logs/stdio Do you think there could be stale build products on the machine? Could we try to run a 'make clean' in the top-level build dir? vedant > On Feb 27, 2017, at 12:51 PM, Dmitry Vyukov <dvyu...@google.com> wrote: > > Does not seem to be related to tsan. It's just that somebody called a > directory with compiler tsan_release_build, but that seems to be the > only relation to tsan. Otherwise looks like a violated assertion in > clang. > > > On Mon, Feb 27, 2017 at 9:46 PM, Ivan Krasin <kra...@google.com> wrote: >> Hi Vedant, >> >> not on top of my head. Dmitriy, can you please take a look? >> >> krasin >> >> On Mon, Feb 27, 2017 at 12:43 PM, Vedant Kumar <v...@apple.com> wrote: >>> >>> Hi Ivan, >>> >>> I saw a bot failure on your job after this commit: >>> >>> >>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/5467/steps/tsan%20analyze/logs/stdio >>> >>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/5467/steps/build%20release%20tsan%20with%20clang/logs/stdio >>> >>> However, I cannot reproduce it locally with a stage2 TSAN build. >>> >>> After staring at my diff I couldn't find anything that would explain the >>> failure. No other bots seem upset. >>> >>> Do you have any idea about what's going on? Let me know if you want me to >>> revert... >>> >>> vedant >>> >>>> On Feb 27, 2017, at 11:46 AM, Vedant Kumar via cfe-commits >>>> <cfe-commits@lists.llvm.org> wrote: >>>> >>>> Author: vedantk >>>> Date: Mon Feb 27 13:46:19 2017 >>>> New Revision: 296374 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=296374&view=rev >>>> Log: >>>> [ubsan] Factor out logic to emit a range check. NFC. >>>> >>>> This is a readability improvement, but it will also help prep an >>>> upcoming patch to detect UB loads from bitfields. >>>> >>>> Modified: >>>> cfe/trunk/lib/CodeGen/CGExpr.cpp >>>> cfe/trunk/lib/CodeGen/CodeGenFunction.h >>>> >>>> Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=296374&r1=296373&r2=296374&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original) >>>> +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Mon Feb 27 13:46:19 2017 >>>> @@ -1301,6 +1301,46 @@ llvm::MDNode *CodeGenFunction::getRangeF >>>> return MDHelper.createRange(Min, End); >>>> } >>>> >>>> +bool CodeGenFunction::EmitScalarRangeCheck(llvm::Value *Value, QualType >>>> Ty, >>>> + SourceLocation Loc) { >>>> + bool HasBoolCheck = SanOpts.has(SanitizerKind::Bool); >>>> + bool HasEnumCheck = SanOpts.has(SanitizerKind::Enum); >>>> + if (!HasBoolCheck && !HasEnumCheck) >>>> + return false; >>>> + >>>> + bool IsBool = hasBooleanRepresentation(Ty) || >>>> + NSAPI(CGM.getContext()).isObjCBOOLType(Ty); >>>> + bool NeedsBoolCheck = HasBoolCheck && IsBool; >>>> + bool NeedsEnumCheck = HasEnumCheck && Ty->getAs<EnumType>(); >>>> + if (!NeedsBoolCheck && !NeedsEnumCheck) >>>> + return false; >>>> + >>>> + llvm::APInt Min, End; >>>> + if (!getRangeForType(*this, Ty, Min, End, /*StrictEnums=*/true, >>>> IsBool)) >>>> + return true; >>>> + >>>> + SanitizerScope SanScope(this); >>>> + llvm::Value *Check; >>>> + --End; >>>> + if (!Min) { >>>> + Check = Builder.CreateICmpULE( >>>> + Value, llvm::ConstantInt::get(getLLVMContext(), End)); >>>> + } else { >>>> + llvm::Value *Upper = Builder.CreateICmpSLE( >>>> + Value, llvm::ConstantInt::get(getLLVMContext(), End)); >>>> + llvm::Value *Lower = Builder.CreateICmpSGE( >>>> + Value, llvm::ConstantInt::get(getLLVMContext(), Min)); >>>> + Check = Builder.CreateAnd(Upper, Lower); >>>> + } >>>> + llvm::Constant *StaticArgs[] = {EmitCheckSourceLocation(Loc), >>>> + EmitCheckTypeDescriptor(Ty)}; >>>> + SanitizerMask Kind = >>>> + NeedsEnumCheck ? SanitizerKind::Enum : SanitizerKind::Bool; >>>> + EmitCheck(std::make_pair(Check, Kind), >>>> SanitizerHandler::LoadInvalidValue, >>>> + StaticArgs, EmitCheckValue(Value)); >>>> + return true; >>>> +} >>>> + >>>> llvm::Value *CodeGenFunction::EmitLoadOfScalar(Address Addr, bool >>>> Volatile, >>>> QualType Ty, >>>> SourceLocation Loc, >>>> @@ -1353,35 +1393,9 @@ llvm::Value *CodeGenFunction::EmitLoadOf >>>> false /*ConvertTypeToTag*/); >>>> } >>>> >>>> - bool IsBool = hasBooleanRepresentation(Ty) || >>>> - NSAPI(CGM.getContext()).isObjCBOOLType(Ty); >>>> - bool NeedsBoolCheck = SanOpts.has(SanitizerKind::Bool) && IsBool; >>>> - bool NeedsEnumCheck = >>>> - SanOpts.has(SanitizerKind::Enum) && Ty->getAs<EnumType>(); >>>> - if (NeedsBoolCheck || NeedsEnumCheck) { >>>> - SanitizerScope SanScope(this); >>>> - llvm::APInt Min, End; >>>> - if (getRangeForType(*this, Ty, Min, End, /*StrictEnums=*/true, >>>> IsBool)) { >>>> - --End; >>>> - llvm::Value *Check; >>>> - if (!Min) >>>> - Check = Builder.CreateICmpULE( >>>> - Load, llvm::ConstantInt::get(getLLVMContext(), End)); >>>> - else { >>>> - llvm::Value *Upper = Builder.CreateICmpSLE( >>>> - Load, llvm::ConstantInt::get(getLLVMContext(), End)); >>>> - llvm::Value *Lower = Builder.CreateICmpSGE( >>>> - Load, llvm::ConstantInt::get(getLLVMContext(), Min)); >>>> - Check = Builder.CreateAnd(Upper, Lower); >>>> - } >>>> - llvm::Constant *StaticArgs[] = { >>>> - EmitCheckSourceLocation(Loc), >>>> - EmitCheckTypeDescriptor(Ty) >>>> - }; >>>> - SanitizerMask Kind = NeedsEnumCheck ? SanitizerKind::Enum : >>>> SanitizerKind::Bool; >>>> - EmitCheck(std::make_pair(Check, Kind), >>>> SanitizerHandler::LoadInvalidValue, >>>> - StaticArgs, EmitCheckValue(Load)); >>>> - } >>>> + if (EmitScalarRangeCheck(Load, Ty, Loc)) { >>>> + // In order to prevent the optimizer from throwing away the check, >>>> don't >>>> + // attach range metadata to the load. >>>> } else if (CGM.getCodeGenOpts().OptimizationLevel > 0) >>>> if (llvm::MDNode *RangeInfo = getRangeForLoadFromType(Ty)) >>>> Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo); >>>> >>>> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=296374&r1=296373&r2=296374&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original) >>>> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Mon Feb 27 13:46:19 2017 >>>> @@ -2866,6 +2866,13 @@ public: >>>> /// representation to its value representation. >>>> llvm::Value *EmitFromMemory(llvm::Value *Value, QualType Ty); >>>> >>>> + /// Check if the scalar \p Value is within the valid range for the >>>> given >>>> + /// type \p Ty. >>>> + /// >>>> + /// Returns true if a check is needed (even if the range is unknown). >>>> + bool EmitScalarRangeCheck(llvm::Value *Value, QualType Ty, >>>> + SourceLocation Loc); >>>> + >>>> /// EmitLoadOfScalar - Load a scalar value from an address, taking >>>> /// care to appropriately convert from the memory representation to >>>> /// the LLVM value representation. >>>> >>>> >>>> _______________________________________________ >>>> cfe-commits mailing list >>>> cfe-commits@lists.llvm.org >>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>> >> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits