2010-08-12 2 views
3

"Writing an LLVM Pass" 웹 페이지에서 Hello 패스 예제를 시도하고있었습니다. 나는 아래 hello.c (GCC-4.2) 컴파일의 지시에 따라,하지만 난 컴파일 오류를 가지고 : 프로그램의 라인 INITIALIZE_PASS(Hello, "Hello", "Hello World Pass", false, false);입니다llvm의 Hello pass 예제에 대한 컴파일 오류

Hello.cpp:20: error: expected identifier before string constant
Hello.cpp:20: error: expected ',' or '...' before string constant
Hello.cpp:20: error: expected constructor, destructor, or type conversion before ';' token

합니다. 프로그램은 다음과 같습니다 :

#include "llvm/Pass.h" 
#include "llvm/Function.h" 
#include "llvm/Support/raw_ostream.h" 

using namespace llvm; 

namespace { 

struct Hello : public FunctionPass { 
    static char ID; 
    Hello() : FunctionPass(&ID) {} 

    virtual bool runOnFunction(Function &F) { 
     errs() << "Hello: " << F.getName() << "\n"; 
     return false; 
    } 
}; 

char Hello::ID = 0; 
INITIALIZE_PASS(Hello, "Hello", "Hello World Pass", false, false); 
} 

아무도 도와 드릴까요? 고마워요!

최저

,
다니엘

+1

의 지침을 따르십시오 : [코드 예제를 LLVM 백엔드 프로그래밍을 학습] http://stackoverflow.com/questions/8776903/code-examples (-for-learning-llvm-backend-programming) –

답변

0

이 데모 코드입니다. 나는 LLVM v2.8 버전을 사용하고

Hello() : FunctionPass(ID) {} 

, 그 작은 변화로 모든 것이 잘 작동하는 것 같군 :이해야하는 라인 (11)을 제외하고 잘 작동합니다. Hello 패스가 이미 존재하기 때문에 프로그램의 이름을 변경했습니다.

더 많은 작업 예제 큰 필요가있다, 나는 격려하고 llvm v2.8, Writing an llvm pass

+0

사실, FunctionPass의 생성자는 (http://llvm.org/docs/doxygen/html/classllvm_1_1FunctionPass.html)'char *'가 아니라 'char'를 취합니다. OP가 심판/포인터 구문에 혼란스러워하는 것 같습니다. 그가 [앰퍼샌드를 왼쪽 맞춤] (http://kera.name/articles/2010/05/tomalaks-monday-monstrous-rant-i-align-your-asterisks/)에 익숙하다면 도움이 될 것입니다. –