[PATCH] D15996: Avoid undefined behavior in LinkAllPasses.h
Dimitry Andric via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 12 10:35:59 PST 2016
dim updated this revision to Diff 44652.
dim added a comment.
Two updates:
- Use a wrapper class around RegionPass, and call createPrinterPass on it. This ensures RegionPass.cpp is linked in.
- Use a raw_string_ostream to pass to functions requiring a raw_ostream, to avoid having to dereference yet another nullptr.
http://reviews.llvm.org/D15996
Files:
include/llvm/LinkAllPasses.h
Index: include/llvm/LinkAllPasses.h
===================================================================
--- include/llvm/LinkAllPasses.h
+++ include/llvm/LinkAllPasses.h
@@ -160,9 +160,11 @@
(void) llvm::createPostOrderFunctionAttrsPass();
(void) llvm::createReversePostOrderFunctionAttrsPass();
(void) llvm::createMergeFunctionsPass();
- (void) llvm::createPrintModulePass(*(llvm::raw_ostream*)nullptr);
- (void) llvm::createPrintFunctionPass(*(llvm::raw_ostream*)nullptr);
- (void) llvm::createPrintBasicBlockPass(*(llvm::raw_ostream*)nullptr);
+ std::string buf;
+ llvm::raw_string_ostream os(buf);
+ (void) llvm::createPrintModulePass(os);
+ (void) llvm::createPrintFunctionPass(os);
+ (void) llvm::createPrintBasicBlockPass(os);
(void) llvm::createModuleDebugInfoPrinterPass();
(void) llvm::createPartialInliningPass();
(void) llvm::createLintPass();
@@ -186,9 +188,14 @@
(void)new llvm::IntervalPartition();
(void)new llvm::ScalarEvolutionWrapperPass();
- ((llvm::Function*)nullptr)->viewCFGOnly();
- llvm::RGPassManager RGM;
- ((llvm::RegionPass*)nullptr)->runOnRegion((llvm::Region*)nullptr, RGM);
+ llvm::Function::Create(nullptr, llvm::GlobalValue::ExternalLinkage)->viewCFGOnly();
+ struct BogusRegionPass : public llvm::RegionPass {
+ explicit BogusRegionPass(char c) : RegionPass(c) {}
+ bool runOnRegion(llvm::Region *R, llvm::RGPassManager &RGM) override {
+ return false;
+ }
+ } BRP(0);
+ (void) BRP.createPrinterPass(os, "");
llvm::AliasSetTracker X(*(llvm::AliasAnalysis*)nullptr);
X.add(nullptr, 0, llvm::AAMDNodes()); // for -print-alias-sets
(void) llvm::AreStatisticsEnabled();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15996.44652.patch
Type: text/x-patch
Size: 1785 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160112/f6fbd8e4/attachment.bin>
More information about the llvm-commits
mailing list