[cfe-dev] OpenMP support in CLANG: A proposal
Olaf.Krzikalla at tu-dresden.de
Wed Nov 7 06:28:07 PST 2012
a general note at first: I noticed the line
PP.EnterTokenStream(Toks, 1, /*DisableMacroExpansion=*/true,
in your code. IMHO DisableMacroExpansion should be false, since all text
after a #pragma omp is subject to macro expansion (OpenMP 3.1, sec.2.1).
Also I dont understand what you mean with scope in the case of "if" clauses.
I see, what you want to accomplish by integrating OpenMP directly in the
parser. If you encounter a omp parallel directive you instruct the
parser to parse a structured block. And if that fails it is an error.
I would go another route. I would stll see OpenMP directives as
attributes to statements. And by the moment these attributes are
attached to a statement the appropriate checks can be made.
Try to attach an "omp parallel" directive to a class declaration -> error
Try to attach an "omp parallel for" directive to a non-conforming
for-Statement -> error.
You see by the second example, that with this approach you aren't longer
limited by the means of the parser.
Of course you are right by writing:
> So, we have to piggy back Global parser
> to handle scopes, parse expressions and compound statement (structured
Thats what I meant in point 4 of my previous writing. We have to shout
it out as often as possible to the right people (I don't belong to them)
that the Parser needs a serious refactoring in order to support
expressions inside pragmas and (later) C++0x-attributes.
To say it with Douglas Gregors words from a another posting: while
OpenMP is just a standard, using it is an industry trend. (actually I
have wondered that the clang people could ignore it successfully for
such a long time).
So my suggestion remains: try to handle OpenMP directives as attributes.
Extend the attribute framework in a way, that made it possible to
user-check attributes at the time they are attached to the appropriate
AST entity. And refactor the parser framework so that it is possible to
parse code snippets.
More information about the cfe-dev