On 12/6/21 7:06 AM, Segher Boessenkool wrote: > On Fri, Dec 03, 2021 at 11:46:53AM +0800, Kewen.Lin wrot >> Without this fix, bar inlines foo but get the error as below: >> >> In function ‘foo’, >> inlined from ‘bar’ at test.c:8:8: >> test.c:3:9: error: ‘__builtin_ttest’ requires the ‘-mhtm’ option >> 3 | *b += __builtin_ttest(); >> | ^~~~~~~~~~~~~~~~~ >> >> Since bar doesn't support foo's required HTM feature. >> >> With this fix, bar doesn't inline foo and the case gets compiled well. > > And if you inline something no-htm into something that allows htm? That > should work fine, be allowed just fine.
It is only ok to inline a function to be compiled with no-htm into a function that will be compiled with htm if the no-htm function is being compiled with no-htm by default. If the user explicitly used -fno-htm on the function, then we should not inline the htm function into it. Ditto for the other way around. Meaning, the caller's option flags should be a superset of the callee's flags, but the explicit flags used on both functions need to match exactly. Peter