vitalybuka created this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D77189 Files: clang/lib/CodeGen/CGDecl.cpp Index: clang/lib/CodeGen/CGDecl.cpp =================================================================== --- clang/lib/CodeGen/CGDecl.cpp +++ clang/lib/CodeGen/CGDecl.cpp @@ -37,6 +37,7 @@ #include "llvm/IR/GlobalVariable.h" #include "llvm/IR/Intrinsics.h" #include "llvm/IR/Type.h" +#include <iostream> using namespace clang; using namespace CodeGen; @@ -44,6 +45,11 @@ static_assert(clang::Sema::MaximumAlignment <= llvm::Value::MaximumAlignment, "Clang max alignment greater than what LLVM supports?"); +#include "llvm/Support/CommandLine.h" +static llvm::cl::opt<uint64_t> ClUninitBegin("uninit-begin", llvm::cl::init(1)); +static llvm::cl::opt<uint64_t> ClUninitEnd("uninit-end", llvm::cl::init(0)); +static llvm::cl::opt<bool> ClUninitPrint("uninit-print", llvm::cl::init(false)); + void CodeGenFunction::EmitDecl(const Decl &D) { switch (D.getKind()) { case Decl::BuiltinTemplate: @@ -1793,13 +1799,26 @@ const Address Loc = locIsByrefHeader ? emission.getObjectAddress(*this) : emission.Addr; + static const uint64_t HB = ClUninitBegin; + static const uint64_t HE = ClUninitEnd; + size_t v = llvm::hash_value( + D.getLocation().printToString(getContext().getSourceManager())); + bool attr = D.getAttr<UninitializedAttr>(); + if (v >= HB && v <= HE) { + if (ClUninitPrint) { + std::cerr << v << " " + << D.getLocation().printToString( + getContext().getSourceManager()) + << "\n"; + } + attr = true; + } // Note: constexpr already initializes everything correctly. LangOptions::TrivialAutoVarInitKind trivialAutoVarInit = (D.isConstexpr() ? LangOptions::TrivialAutoVarInitKind::Uninitialized - : (D.getAttr<UninitializedAttr>() - ? LangOptions::TrivialAutoVarInitKind::Uninitialized - : getContext().getLangOpts().getTrivialAutoVarInit())); + : (attr ? LangOptions::TrivialAutoVarInitKind::Uninitialized + : getContext().getLangOpts().getTrivialAutoVarInit())); auto initializeWhatIsTechnicallyUninitialized = [&](Address Loc) { if (trivialAutoVarInit ==
Index: clang/lib/CodeGen/CGDecl.cpp =================================================================== --- clang/lib/CodeGen/CGDecl.cpp +++ clang/lib/CodeGen/CGDecl.cpp @@ -37,6 +37,7 @@ #include "llvm/IR/GlobalVariable.h" #include "llvm/IR/Intrinsics.h" #include "llvm/IR/Type.h" +#include <iostream> using namespace clang; using namespace CodeGen; @@ -44,6 +45,11 @@ static_assert(clang::Sema::MaximumAlignment <= llvm::Value::MaximumAlignment, "Clang max alignment greater than what LLVM supports?"); +#include "llvm/Support/CommandLine.h" +static llvm::cl::opt<uint64_t> ClUninitBegin("uninit-begin", llvm::cl::init(1)); +static llvm::cl::opt<uint64_t> ClUninitEnd("uninit-end", llvm::cl::init(0)); +static llvm::cl::opt<bool> ClUninitPrint("uninit-print", llvm::cl::init(false)); + void CodeGenFunction::EmitDecl(const Decl &D) { switch (D.getKind()) { case Decl::BuiltinTemplate: @@ -1793,13 +1799,26 @@ const Address Loc = locIsByrefHeader ? emission.getObjectAddress(*this) : emission.Addr; + static const uint64_t HB = ClUninitBegin; + static const uint64_t HE = ClUninitEnd; + size_t v = llvm::hash_value( + D.getLocation().printToString(getContext().getSourceManager())); + bool attr = D.getAttr<UninitializedAttr>(); + if (v >= HB && v <= HE) { + if (ClUninitPrint) { + std::cerr << v << " " + << D.getLocation().printToString( + getContext().getSourceManager()) + << "\n"; + } + attr = true; + } // Note: constexpr already initializes everything correctly. LangOptions::TrivialAutoVarInitKind trivialAutoVarInit = (D.isConstexpr() ? LangOptions::TrivialAutoVarInitKind::Uninitialized - : (D.getAttr<UninitializedAttr>() - ? LangOptions::TrivialAutoVarInitKind::Uninitialized - : getContext().getLangOpts().getTrivialAutoVarInit())); + : (attr ? LangOptions::TrivialAutoVarInitKind::Uninitialized + : getContext().getLangOpts().getTrivialAutoVarInit())); auto initializeWhatIsTechnicallyUninitialized = [&](Address Loc) { if (trivialAutoVarInit ==
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits