Hello, Here are a few changes that try to address some logic error bugs reported by running scan-build over the Clang code base.
I have no background in compiler technology and I may have been trying to fix false positives; here is a quick overview of what scan-build reported, let me know if the fixes are relevant: Bug Group: Logic error Bug Type: Called C++ object pointer is null Files: lib/Driver/Tools.cpp Bug Group: Logic error Bug Type: Called C++ object pointer is null Files: lib/Sema/SemaInit.cpp Bug Group: API Bug Type: Argument with 'nonnull' attribute passed null Files: lib/AST/NestedNameSpecifier.cpp Cheers. -- Apelete
diff --git a/lib/AST/NestedNameSpecifier.cpp b/lib/AST/NestedNameSpecifier.cpp index ede3862..a3b1076 100644 --- a/lib/AST/NestedNameSpecifier.cpp +++ b/lib/AST/NestedNameSpecifier.cpp @@ -456,9 +456,11 @@ namespace { Buffer = NewBuffer; BufferCapacity = NewCapacity; } - - memcpy(Buffer + BufferSize, Start, End - Start); - BufferSize += End-Start; + + if (Buffer) { + memcpy(Buffer + BufferSize, Start, End - Start); + BufferSize += End-Start; + } } /// \brief Save a source location to the given buffer. diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 824ee72..2ac5416 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -2334,7 +2334,7 @@ static void getAArch64TargetFeatures(const Driver &D, const ArgList &Args, success = getAArch64MicroArchFeaturesFromMcpu(D, getAArch64TargetCPU(Args), Args, Features); - if (!success) + if (!success && A) D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args); if (Args.getLastArg(options::OPT_mgeneral_regs_only)) { diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index bd8522d..dc4e967 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -4860,6 +4860,8 @@ static bool tryObjCWritebackConversion(Sema &S, InitializationSequence &Sequence, const InitializedEntity &Entity, Expr *Initializer) { + assert(Initializer && "Initializer needs to be not NULL"); + bool ArrayDecay = false; QualType ArgType = Initializer->getType(); QualType ArgPointee; @@ -5235,11 +5237,11 @@ void InitializationSequence::InitializeFrom(Sema &S, DeclAccessPair dap; if (isLibstdcxxPointerReturnFalseHack(S, Entity, Initializer)) { AddZeroInitializationStep(Entity.getType()); - } else if (Initializer->getType() == Context.OverloadTy && + } else if (Initializer && Initializer->getType() == Context.OverloadTy && !S.ResolveAddressOfOverloadedFunction(Initializer, DestType, false, dap)) SetFailed(InitializationSequence::FK_AddressOfOverloadFailed); - else if (Initializer->getType()->isFunctionType() && + else if (Initializer && Initializer->getType()->isFunctionType() && isExprAnUnaddressableFunction(S, Initializer)) SetFailed(InitializationSequence::FK_AddressOfUnaddressableFunction); else
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits