extending clang - llvmllvm.org/devmtg/2011-11/gregor_extendingclang.pdf · lex parse sema codegen...

60
Extending Clang Doug Gregor 1 Wednesday, December 7, 11

Upload: others

Post on 24-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Extending ClangDoug Gregor

1Wednesday, December 7, 11

Page 2: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

A Platform for Tools

• Library-based architecture

• Compatibility with various language standards

• Accurate representation of source code

2Wednesday, December 7, 11

Page 3: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Extension Points

CodeGenSemaParseLex

3Wednesday, December 7, 11

Page 4: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Extension Points

• libclang

• Preprocessor callbacks, AST consumers

• Semantic analysis, static analyzer

• LLVM IR transformation and optimization

• Source-to-source translation

CodeGenSemaParseLex

3Wednesday, December 7, 11

Page 5: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Source ⇔ AST Mapping

4Wednesday, December 7, 11

Page 6: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

libclang: Clang C APIstruct List { int Data; struct List *Next;};

5Wednesday, December 7, 11

Page 7: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

• Where are all the declarations?

libclang: Clang C APIstruct List { int Data; struct List *Next;};

5Wednesday, December 7, 11

Page 8: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

• Where are all the declarations?

• Where are uses of List?

libclang: Clang C APIstruct List { int Data; struct List *Next;};

5Wednesday, December 7, 11

Page 9: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

• Where are all the declarations?

• Where are uses of List?

• What is under my cursor?

libclang: Clang C APIstruct List { int Data; struct List *Next;}; Kind: FieldDecl

Name: DataType: intContext: struct List

5Wednesday, December 7, 11

Page 10: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

• Where are all the declarations?

• Where are uses of List?

• What is under my cursor?

• What code completions work here?

libclang: Clang C APIstruct List { int Data; struct List *Next;};

sshortsignedstaticstruct <name>

5Wednesday, December 7, 11

Page 11: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

• Where are all the declarations?

• Where are uses of List?

• What is under my cursor?

• What code completions work here?

libclang: Clang C API

See 2010 talk “libclang: Thinking Beyond the Compiler”

struct List { int Data; struct List *Next;};

5Wednesday, December 7, 11

Page 12: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Exploring a Program

6Wednesday, December 7, 11

Page 13: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Preprocessor CallbacksCodeGenSemaParseLex

7Wednesday, December 7, 11

Page 14: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Preprocessor CallbacksCodeGenSemaParseLex

7Wednesday, December 7, 11

Page 15: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Preprocessor CallbacksCodeGenSemaParseLex

• Invoked for various preprocessor actions

• Macro definition/expansion

• Entering/leaving a file

• Pragmas, ifdefs

• Customize by overriding callbacks

7Wednesday, December 7, 11

Page 16: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Header Dependenciesclass FindDependencies : public PPCallbacks {public: void FileChanged(SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind, FileID PrevFID) { if (Reason != EnterFile) return; if (const FileEntry *FE = SM.getFileEntryForID( SM.getFileID(Loc))) std::cout << “Depends on “ << FE->getName() << “\n”; }};

8Wednesday, December 7, 11

Page 17: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

AST ConsumersCodeGenSemaParseLex

9Wednesday, December 7, 11

Page 18: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

AST ConsumersCodeGenSemaParseLex

9Wednesday, December 7, 11

Page 19: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

AST ConsumersCodeGenSemaParseLex

class FindUnions : public ASTConsumer {public: void HandleTagDeclDefinition(TagDecl *D) { if (D->isUnion()) { std::cout << “Union: “ << D->getNameAsString() << “\n”; } }};

9Wednesday, December 7, 11

Page 20: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

RecursiveASTVisitor

• Recursively walk any part of the AST

• Call Visitor.Traverse<NodeType>(Node)

• Customize by overriding visitation methods

• Used heavily within Clang itself

10Wednesday, December 7, 11

Page 21: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Finding Calls

11Wednesday, December 7, 11

Page 22: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Finding Callsclass FindCalls : public RecursiveASTVisitor<FindCalls> {

public: bool VisitCallExpr(CallExpr *Call) { if (FunctionDecl *Callee = Call->getDirectCallee()) std::cout << “Call to “ << Callee->getNameAsString() << “\n”; return true; }};

11Wednesday, December 7, 11

Page 23: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Finding Callsclass FindCalls : public RecursiveASTVisitor<FindCalls> {

public: bool VisitCallExpr(CallExpr *Call) { if (FunctionDecl *Callee = Call->getDirectCallee()) std::cout << “Call to “ << Callee->getNameAsString() << “\n”; return true; }};

11Wednesday, December 7, 11

Page 24: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Warnings & ErrorsCodeGenSemaParseLex

12Wednesday, December 7, 11

Page 25: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Warnings & ErrorsCodeGenSemaParseLex

12Wednesday, December 7, 11

Page 26: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

A Terrible Diagnostic

13Wednesday, December 7, 11

Page 27: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

A Terrible Diagnostic

typedef int N;N::string str;

13Wednesday, December 7, 11

Page 28: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

A Terrible Diagnostic

typedef int N;N::string str;

t.cpp:2:1: error: expected a class or namespaceN::string str;^

13Wednesday, December 7, 11

Page 29: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

A Terrible Diagnostic

14Wednesday, December 7, 11

Page 30: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

A Terrible Diagnostic

// DiagnosticSemaKinds.tddef err_expected_class_or_namespace : Error<"expected a class or namespace">;

14Wednesday, December 7, 11

Page 31: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

A Terrible Diagnostic

// DiagnosticSemaKinds.tddef err_expected_class_or_namespace : Error<"expected a class or namespace">;

// SemaCXXScopeSpec.cppDiag(IdentifierLoc, diag::err_expected_class_or_namespace);

14Wednesday, December 7, 11

Page 32: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Improving Diagnostics

15Wednesday, December 7, 11

Page 33: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Improving Diagnostics

// DiagnosticSemaKinds.tddef err_not_class_or_namespace : Error<"%0 is not a class or namespace">;

15Wednesday, December 7, 11

Page 34: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Improving Diagnostics

// DiagnosticSemaKinds.tddef err_not_class_or_namespace : Error<"%0 is not a class or namespace">;

// SemaCXXScopeSpec.cppif (TypeDecl *TD = Found.getAsSingle<TypeDecl>()) Diag(IdentifierLoc, diag::err_not_class_or_namespace) << Context.getTypeDeclType(TD);

15Wednesday, December 7, 11

Page 35: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Improving Diagnostics

typedef int N;N::string str;

t.cpp:2:1: error: ‘N’ (aka ‘int’) is not a class or namespaceN::string str;^

16Wednesday, December 7, 11

Page 36: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Improving Diagnostics

17Wednesday, December 7, 11

Page 37: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Improving Diagnostics// SemaCXXScopeSpec.cppif (TypeDecl *TD = Found.getAsSingle<TypeDecl>()) { Diag(IdentifierLoc, diag::err_not_class_or_namespace) << Context.getTypeDeclType(TD); Diag(TD->getLocation(), diag::note_declared_at);}

17Wednesday, December 7, 11

Page 38: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Improving Diagnostics

typedef int N;N::string str;

t.cpp:2:1: error: ‘N’ (aka ‘int’) is not a class or namespaceN::string str;^t.cpp:1:13: note: declared heretypedef int N; ^

18Wednesday, December 7, 11

Page 39: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Attributes & LLVM IRCodeGenSemaParseLex

19Wednesday, December 7, 11

Page 40: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Attributes & LLVM IRCodeGenSemaParseLex

19Wednesday, December 7, 11

Page 41: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Feeding Information to IR

“If I could just tell the compiler that some declarations are <adjective>, my new optimization pass would be awesome!”

20Wednesday, December 7, 11

Page 42: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Feeding Information to IR

• Attributes make such experiments easy

• Trivial to parse with few ambiguities

• Easy to introduce into the AST

“If I could just tell the compiler that some declarations are <adjective>, my new optimization pass would be awesome!”

20Wednesday, December 7, 11

Page 43: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

The annotate Attribute

• Clang supports the annotate attribute with arbitrary strings:

__attribute__((annotate(“singleton”))) Class *object;

• Annotations are mapped down to LLVM IR annotations

21Wednesday, December 7, 11

Page 44: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Adding Real Attributes

22Wednesday, December 7, 11

Page 45: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Adding Real Attributes// include/clang/Basic/Attr.tddef ReturnsTwice : InheritableAttr { let Spellings = ["returns_twice"];}

22Wednesday, December 7, 11

Page 46: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Adding Real Attributes// include/clang/Basic/Attr.tddef ReturnsTwice : InheritableAttr { let Spellings = ["returns_twice"];}

// lib/Sema/SemaDeclAttr.cppstatic void handleReturnsTwiceAttr(Sema &S, Decl *D, const AttributeList &Attr) { if (!isa<FunctionDecl>(D)) { // diagnose error return; } D->addAttr(::new (S.Context) ReturnsTwiceAttr(...));}

22Wednesday, December 7, 11

Page 47: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Adding Real Attributes

http://clang.llvm.org/docs/InternalsManual.html#AddingAttributes

// include/clang/Basic/Attr.tddef ReturnsTwice : InheritableAttr { let Spellings = ["returns_twice"];}

// lib/Sema/SemaDeclAttr.cppstatic void handleReturnsTwiceAttr(Sema &S, Decl *D, const AttributeList &Attr) { if (!isa<FunctionDecl>(D)) { // diagnose error return; } D->addAttr(::new (S.Context) ReturnsTwiceAttr(...));}

22Wednesday, December 7, 11

Page 48: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Source-to-Source Translation

23Wednesday, December 7, 11

Page 49: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

The Rewriter Class

• Rewriter class provides textual rewriting

24Wednesday, December 7, 11

Page 50: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

The Rewriter Class

• Rewriter class provides textual rewriting

class Rewriter {public: bool InsertText(SourceLocation Loc, StringRef Text);

bool RemoveText(SourceRange Range); bool ReplaceText(SourceRange Range, StringRef Text);};

24Wednesday, December 7, 11

Page 51: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Help Wanted

25Wednesday, December 7, 11

Page 52: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Plugins

26Wednesday, December 7, 11

Page 53: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Plugins

• Clang allows plugins during normal compilation:

clang -Xclang -load foo.so -Xclang -plugin foo-plugin <command line arguments>

26Wednesday, December 7, 11

Page 54: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Plugins

• Clang allows plugins during normal compilation:

clang -Xclang -load foo.so -Xclang -plugin foo-plugin <command line arguments>

• Numerous problems with plug-in support:

• ASTConsumers aren’t chained in a natural way

• Command-line option parsing is too hard

• Building plugins is too hard

• Documentation is absent

26Wednesday, December 7, 11

Page 55: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

One-Off Tools

27Wednesday, December 7, 11

Page 56: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

One-Off Tools

• Building one-off tools is possible (but hard):

• CompilerInstance/CompilerInvocation/Action not simple enough

• Missing a “quickstart” tutorial

27Wednesday, December 7, 11

Page 57: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

One-Off Tools

• Building one-off tools is possible (but hard):

• CompilerInstance/CompilerInvocation/Action not simple enough

• Missing a “quickstart” tutorial

• Simple source-to-source translation needed

• Tie together traversal, rewriter, verification

27Wednesday, December 7, 11

Page 58: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Summary

28Wednesday, December 7, 11

Page 59: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Summary

• Numerous extension points to Clang

• Picking the best one is important

28Wednesday, December 7, 11

Page 60: Extending Clang - LLVMllvm.org/devmtg/2011-11/Gregor_ExtendingClang.pdf · Lex Parse Sema CodeGen Wednesday, December 7, 11 3. Source 㱻 AST Mapping Wednesday, December 7, 11 4

Summary

• Numerous extension points to Clang

• Picking the best one is important

• We need to make extension easier

• Plugins need to be super-easy to write

• “Your first extension” tutorials

• Make source-to-source translation easy

28Wednesday, December 7, 11