[cfe-dev] Analyzer question

Erik Verbruggen erikjv at me.com
Fri Feb 11 07:50:49 PST 2011


I would like to write static analyses checks for Qt, specifically for the meta-object usage. Qt uses some pre-processor macros which are used by the meta-object compiler (moc) to generate extra code. For example:

class MyObject: public QObject {
	Q_OBJECT // expands to a field declaration and some utility methods

signals: // expands to protected
	void somethingChanged();

public slots: // expands to Q_SLOTS which expands to empty
	void changeSomething();

I checked the IBAction/IBOutlet macros, but it looks like they expand to __attribute__((ibaction)) (or iboutlet) when using code completion, and to void/empty when compiling -- meaning: while running the analyzer, they do not end up in the AST.

So, what would be the best way to do it for Qt? If I understand the pre-processing correctly, I would need to do two passes while analysing, or I would need to annotate methods with an additional flag (akin to the ibaction/iboutlet flags) while parsing. I think that annotating while parsing is the most solid way, as one could also use it while doing code-completion or code-navigation.

What do you think? And would such a change/patch be allowed into the clang source tree?

Erik Verbruggen.

More information about the cfe-dev mailing list