v.g.vassilev created this revision.
v.g.vassilev added reviewers: rjmccall, daltenty, aaron.ballman.
Herald added a subscriber: pengfei.
Herald added a project: All.
v.g.vassilev requested review of this revision.
Herald added a subscriber: wangpc.

This patch fixes valgrind reports from downstream consumers about conditional 
jump over uninitialised.

  [ RUN      ] ScopeReflectionTest.IsComplete
  ==987150== Conditional jump or move depends on uninitialised value(s)
  ==987150==    at 0x1E1128F: 
clang::CodeGen::CodeGenModule::SetLLVMFunctionAttributesForDefinition(clang::Decl
 const*, llvm::Function*) (CodeGenModule.cpp:2391)
  ==987150==    by 0x1E4F181: 
clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, 
llvm::GlobalValue*) (CodeGenModule.cpp:5669)
  ==987150==    by 0x1E4A194: 
clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, 
llvm::GlobalValue*) (CodeGenModule.cpp:3909)
  ==987150==    by 0x1E4A752: 
clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) 
(CodeGenModule.cpp:3649)
  ==987150==    by 0x1E532F5: 
clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) [clone .part.0] 
(CodeGenModule.cpp:6563)
  ==987150==    by 0x1B0BEDD: (anonymous 
namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) 
(ModuleBuilder.cpp:190)
  ==987150==    by 0x1AEA47B: 
clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) 
(CodeGenAction.cpp:235)
  ==987150==    by 0x101B02F: 
clang::IncrementalASTConsumer::HandleTopLevelDecl(clang::DeclGroupRef) 
(IncrementalParser.cpp:52)
  ==987150==    by 0x101ED93: 
clang::IncrementalParser::ParseOrWrapTopLevelDecl() (IncrementalParser.cpp:276)
  ==987150==    by 0x101FBBC: clang::IncrementalParser::Parse(llvm::StringRef) 
(IncrementalParser.cpp:342)
  ==987150==    by 0x100E104: clang::Interpreter::Parse(llvm::StringRef) 
(Interpreter.cpp:360)
  ==987150==    by 0xE734C0: Cpp::Interpreter::Parse(llvm::StringRef) 
(CppInterOpInterpreter.h:172)
  ==987150==  Uninitialised value was created by a heap allocation
  ==987150==    at 0x844BE63: operator new(unsigned long) (in 
/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
  ==987150==    by 0x1B0C882: StartModule (ModuleBuilder.cpp:139)
  ==987150==    by 0x1B0C882: 
clang::CodeGenerator::StartModule(llvm::StringRef, llvm::LLVMContext&) 
(ModuleBuilder.cpp:360)
  ==987150==    by 0x101C4AF: clang::IncrementalParser::GenModule() 
(IncrementalParser.cpp:372)
  ==987150==    by 0x101FC0E: clang::IncrementalParser::Parse(llvm::StringRef) 
(IncrementalParser.cpp:362)
  ==987150==    by 0x100E104: clang::Interpreter::Parse(llvm::StringRef) 
(Interpreter.cpp:360)
  ==987150==    by 0x100E243: 
clang::Interpreter::create(std::unique_ptr<clang::CompilerInstance, 
std::default_delete<clang::CompilerInstance> >) (Interpreter.cpp:279)
  ==987150==    by 0xF2131A: compat::createClangInterpreter(std::vector<char 
const*, std::allocator<char const*> >&) (Compatibility.h:123)
  ==987150==    by 0xF22AB9: Cpp::Interpreter::Interpreter(int, char const* 
const*, char const*, std::vector<std::shared_ptr<clang::ModuleFileExtension>, 
std::allocator<std::shared_ptr<clang::ModuleFileExtension> > > const&, void*, 
bool) (CppInterOpInterpreter.h:146)
  ==987150==    by 0xF1827A: CreateInterpreter (CppInterOp.cpp:2494)
  ==987150==    by 0xECFA0E: 
TestUtils::GetAllTopLevelDecls(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&, 
std::vector<clang::Decl*, std::allocator<clang::Decl*> >&, bool) (Utils.cpp:23)
  ==987150==    by 0xE9CB85: ScopeReflectionTest_IsComplete_Test::TestBody() 
(ScopeReflectionTest.cpp:71)
  ==987150==    by 0xF0ED0C: void 
testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, 
void>(testing::Test*, void (testing::Test::*)(), char const*) (in 
/home/vvassilev/workspace/builds/scratch/cppyy/InterOp/build-with-clang-repl-release/unittests/CppInterOp/CppInterOpTests)
  ==987150== 


Repository:
  rC Clang

https://reviews.llvm.org/D159339

Files:
  clang/lib/CodeGen/CodeGenModule.cpp


Index: clang/lib/CodeGen/CodeGenModule.cpp
===================================================================
--- clang/lib/CodeGen/CodeGenModule.cpp
+++ clang/lib/CodeGen/CodeGenModule.cpp
@@ -2386,7 +2386,7 @@
   // functions. If the current target's C++ ABI requires this and this is a
   // member function, set its alignment accordingly.
   if (getTarget().getCXXABI().areMemberFunctionsAligned()) {
-    if (F->getPointerAlignment(getDataLayout()) < 2 && isa<CXXMethodDecl>(D))
+    if (isa<CXXMethodDecl>(D) && F->getPointerAlignment(getDataLayout()) < 2)
       F->setAlignment(std::max(llvm::Align(2), F->getAlign().valueOrOne()));
   }
 


Index: clang/lib/CodeGen/CodeGenModule.cpp
===================================================================
--- clang/lib/CodeGen/CodeGenModule.cpp
+++ clang/lib/CodeGen/CodeGenModule.cpp
@@ -2386,7 +2386,7 @@
   // functions. If the current target's C++ ABI requires this and this is a
   // member function, set its alignment accordingly.
   if (getTarget().getCXXABI().areMemberFunctionsAligned()) {
-    if (F->getPointerAlignment(getDataLayout()) < 2 && isa<CXXMethodDecl>(D))
+    if (isa<CXXMethodDecl>(D) && F->getPointerAlignment(getDataLayout()) < 2)
       F->setAlignment(std::max(llvm::Align(2), F->getAlign().valueOrOne()));
   }
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to