<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 12/10/15 21:13, Richard Smith via
cfe-dev wrote:<br>
</div>
<blockquote
cite="mid:CAOfiQqnntYQN-0=yZnR554oO3kbsyrp85d5M-rA-jmmQjmnX2A@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Mon, Oct 12, 2015 at 11:33 AM,
Serge Pavlov via cfe-dev <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:cfe-dev@lists.llvm.org" target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a></a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div>Hi all,</div>
<div><br>
</div>
<div>Now building a module involves creation of
intermediate source streams that includes/imports each
header composing the module. This source stream is
then parsed as if it were a source file. So to build a
module several transformations must be done:</div>
<div>- Module map is parsed to produce module
objects(clang::Module),</div>
<div>- Module objects are used to build source stream
(llvm::MemoryBuffer), which contains include
directives,</div>
<div>- The source stream is parsed to produce module
content.</div>
<div><br>
</div>
<div>The build process could be simpler, if instead of
text source stream we prepared a sequence of
annotation tokens, annot_module_begin,
annot_module_end and some new token, say
annot_module_header, which represented a header of a
module. It would be something like pretokenized header
but without a counterpart in file system.</div>
<div><br>
</div>
<div>Such redesign would help in solving performance
degradation reported in PR24667 ([Regression]
Quadratic module build time due to
Preprocessor::LeaveSubmodule). The reason of the
problem is leaving module after each header, even if
the next header is of the same module.</div>
</div>
</blockquote>
<div><br>
</div>
<div>We generally recommend that each header goes in its own
submodule, so optimizing for this case doesn't address the
problem for a lot of cases.</div>
</div>
</div>
</div>
</blockquote>
Is there a technical reason for this? Is there a difference (say
bigger module size or slower deserialization) between a header file
per submodule and a hearder file per standalone module?<br>
<br>
We stumble upon (see attachment) cases which compile just fine
without modules and with standalone modules (i.e. header per
module). They do not compile with the submodule model. In the
attached example including B.h registers the top-most module, which
pollutes the lookup (with the lookup entries of A) thus the behavior
with a non-module build differs.<br>
<br>
Vassil<br>
<br>
[snip]<br>
</body>
</html>