[PATCH] D52933: Fix incorrect Twine usage in CFGPrinter
Marcin Copik via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 5 06:01:36 PDT 2018
mcopik created this revision.
mcopik added a reviewer: grosser.
Herald added a subscriber: llvm-commits.
CFGPrinter (-view-cfg, -dot-cfg) invokes an undefined behaviour (dangling pointer to rvalue) on IR files with branch weights. This patch fixes the problem caused by Twine initialization and string conversion split into two statements.
Repository:
rL LLVM
https://reviews.llvm.org/D52933
Files:
include/llvm/Analysis/CFGPrinter.h
test/Other/cfg-printer-branch-weights.ll
Index: test/Other/cfg-printer-branch-weights.ll
===================================================================
--- /dev/null
+++ test/Other/cfg-printer-branch-weights.ll
@@ -0,0 +1,19 @@
+;RUN: opt < %s -analyze -dot-cfg 2>/dev/null
+;RUN: FileCheck %s -input-file=cfg.f.dot
+
+define void @f(i32) {
+entry:
+ %check = icmp sgt i32 %0, 0
+ br i1 %check, label %if, label %exit, !prof !0
+
+; CHECK: label="W:1"
+; CHECK-NOT: ["];
+if: ; preds = %entry
+ br label %exit
+; CHECK: label="W:200"
+; CHECK-NOT: ["];
+exit: ; preds = %entry, %if
+ ret void
+}
+
+!0 = !{!"branch_weights", i32 1, i32 200}
Index: include/llvm/Analysis/CFGPrinter.h
===================================================================
--- include/llvm/Analysis/CFGPrinter.h
+++ include/llvm/Analysis/CFGPrinter.h
@@ -172,8 +172,8 @@
// Prepend a 'W' to indicate that this is a weight rather than the actual
// profile count (due to scaling).
- Twine Attrs = "label=\"W:" + Twine(Weight->getZExtValue()) + "\"";
- return Attrs.str();
+ // Evaluate in a single statement to avoid dangling pointers in a Twine.
+ return ("label=\"W:" + Twine(Weight->getZExtValue()) + "\"").str();
}
};
} // End llvm namespace
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52933.168461.patch
Type: text/x-patch
Size: 1258 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181005/1eba8374/attachment.bin>
More information about the llvm-commits
mailing list