[cfe-dev] lifetime marker for expression-emission temporaries
via cfe-dev
cfe-dev at lists.llvm.org
Mon Aug 21 08:48:40 PDT 2017
Hi,
Due to the missing lifetime markers for temporary allocas, an
unreasonable stack size burst was observed
(https://bugs.llvm.org/show_bug.cgi?id=34173). Using the C code below,
you can see the missing lifetime markers for temporary allocas for sret:
/* clang -Wframe-larger-than=1 -o bug bug.c -c -O1 */
struct a {
int a; int b;
int c; int d;
int f; int g;
int h; int i;
};
struct a test_callee(void);
int foo() {
struct a b;
b= test_callee();
b= test_callee();
b= test_callee();
b= test_callee();
b= test_callee();
b= test_callee();
return 0;
}
Based on John McCall's comment in Bug34173, the frond-end needs to be
improved to properly add lifetime marks :
Clang's adoption of lifetime markers has been rather piecemeal,
especially for expression-emission temporaries like this. To do this
properly, I think we'd need to honor full-expression lifetime implicitly
rather than relying on ExprWithCleanups.
Honestly, I don't have much experience in the front-end and I have other
issues to handle in priority. Is there anyone who can volunteer for this
issue ?
Thanks,
Jun
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a
Linux Foundation Collaborative Project.
More information about the cfe-dev
mailing list