================
@@ -325,19 +348,27 @@ void FactsGenerator::VisitInitListExpr(const InitListExpr
*ILE) {
void FactsGenerator::VisitMaterializeTemporaryExpr(
const MaterializeTemporaryExpr *MTE) {
OriginList *MTEList = getOriginsList(*MTE);
- if (!MTEList)
+ // Here we also defer from handling lifetime extended materializations.
+ if (!MTEList || MTE->getStorageDuration() != SD_FullExpression)
return;
OriginList *SubExprList = getOriginsList(*MTE->getSubExpr());
if (MTE->isGLValue()) {
assert(!SubExprList ||
MTEList->getLength() == SubExprList->getLength() + 1 &&
"MTE top level origin should contain a loan to the MTE itself");
MTEList = getRValueOrigins(MTE, MTEList);
- // TODO: Issue a loan to the MTE.
+ if (getChildBinding(MTE)) {
+ // Issue a loan to MTE for the storage location represented by MTE.
+ const Loan *L = createLoan(FactMgr, MTE);
+ OriginList *List = getOriginsList(*MTE);
+ CurrentBlockFacts.push_back(
+ FactMgr.createFact<IssueFact>(L->getID(), List->getOuterOriginID()));
+ }
flow(MTEList, SubExprList, /*Kill=*/true);
} else {
- assert(MTE->isXValue());
- flow(MTEList, SubExprList, /*Kill=*/true);
+ // A temporary object's origin is the same as the origin of the
----------------
usx95 wrote:
Interesting. This looks wrongly added in that case if this branch is dead.
Can you instead remove the `if` completely and add an assertion for
`assert(MTE->isGLValue())`.
Please verify that this does not fire by building LLVM/clang (stage 2) using
your modified clang (stage 1).
You can do that by building LLVM in a separate build directory:
```
cmake -G Ninja /path/to/llvm-project/llvm \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;" \
-DLLVM_ENABLE_ASSERTIONS=On \
-DCMAKE_C_FLAGS_RELEASE="-O3 -gmlt -UNDEBUG" \
-DCMAKE_CXX_FLAGS_RELEASE="-O3 -gmlt -UNDEBUG -Xclang
-fexperimental-lifetime-safety -Wexperimental-lifetime-safety" \
-DCMAKE_C_COMPILER="/path/to/stage1/build/bin/clang" \
-DCMAKE_CXX_COMPILER="/path/to/stage1/build/bin/clang++" \
-DLLVM_USE_LINKER=lld \
-DLLVM_CCACHE_BUILD=1
```
https://github.com/llvm/llvm-project/pull/172007
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits