problem with clang application

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

problem with clang application

Nobin Mathew
Hi,

I am building an application using clang libraries, I running to a
problem, it will be very helpful if somebody can give some directions.

#./a.out /home/nmathew/Desktop/algorithms/array.cpp     gives

In file included from /home/nmathew/Desktop/algorithms/array.cpp:1:
In file included from /usr/include/c++/4.4.3/iostream:39:
In file included from /usr/include/c++/4.4.3/ostream:39:
In file included from /usr/include/c++/4.4.3/ios:38:
In file included from /usr/include/c++/4.4.3/iosfwd:40:
/usr/include/c++/4.4.3/bits/stringfwd.h:49:48: error: unknown type
name 'char_traits'
a.out: TextDiagnosticPrinter.cpp:293: void
clang::TextDiagnosticPrinter::EmitCaretDiagnostic(clang::SourceLocation,
clang::SourceRange*, unsigned int, const clang::SourceManager&, const
clang::FixItHint*, unsigned int, unsigned int, unsigned int, unsigned
int, unsigned int): Assertion `LangOpts && "Unexpected diagnostic
outside source file processing"' failed.
Stack dump:
0. /usr/include/c++/4.4.3/bits/stringfwd.h:49:48: current parser token
'char_traits'




My Include search directories are below.

#include "..." search starts here:
#include <...> search starts here:
 /usr/include/linux
 /usr/lib/gcc/i686-redhat-linux/4.4.3/include
 /usr/include/c++/4.4.3
 /usr/include/c++/4.4.3/backward
 /usr/include/c++/4.4.3/i686-redhat-linux
 /usr/local/include
 /usr/include
End of search list.

and char_traits.h is in /usr/include/c++/4.4.3/bits/, I am using
Fedora 12 32 bit system.



my files are

#cat tut01_pp.cpp


#include "PPContext.h"

int main(int argc, char *argv[])
{
        if (argc != 2)
        {
                cerr << "No File input " << endl;
                return 0;
        }
        PPContext scope;
        scope.headers.PrintStats();
        const FileEntry *File = scope.fm.getFile(argv[1]);
        if(!File)
        {
                cerr << "File Open Failed\t" << argv[1] << endl;
                return 0;
        }
        scope.sm.createMainFileID(File, SourceLocation());
        scope.pp->EnterMainSourceFile();
        IdentifierTable identitab(scope.lang);
        MinimalAction action(*(scope.pp));
        Parser parse(*(scope.pp), action);
        parse.ParseTranslationUnit();
        identitab.PrintStats();

        return 0;
}


#cat PPContext.h


#ifndef PP_CONTEXT
#define PP_CONTEXT

#include <iostream>
#include <string>
using namespace std;

#include <llvm/Support/raw_ostream.h>

#include <clang/Basic/Diagnostic.h>
#include <clang/Basic/TargetInfo.h>
#include <clang/Basic/TargetOptions.h>
#include <clang/Basic/FileManager.h>
#include <clang/Basic/SourceManager.h>
#include <clang/Lex/Preprocessor.h>
#include <clang/Lex/HeaderSearch.h>
#include <clang/Frontend/Utils.h>
#include <clang/Frontend/TextDiagnosticPrinter.h>
#include <clang/Frontend/DiagnosticOptions.h>
#include <clang/Frontend/HeaderSearchOptions.h>
#include <clang/Parse/Action.h>
#include <clang/Parse/Parser.h>
#include "llvm/System/Host.h"
using namespace clang;
using namespace llvm;

struct PPContext {
        PPContext():tdp(ost, options), diag(&tdp), sm(diag), headers(fm)
        {

                TargetOptions target_options;
                target_options.Triple = sys::getHostTriple();
                target_options.CXXABI = "itanium";
                target = TargetInfo::CreateTargetInfo(diag, target_options);
                lang.CPlusPlus = 1;
                pp = new Preprocessor(diag, lang, *target, sm, headers);
                headeropts.EnvIncPath = "/usr/include/linux";
                headeropts.CXXEnvIncPath =
"/usr/lib/gcc/i686-redhat-linux/4.4.3/include/";
                headeropts.Verbose = 1;
                ApplyHeaderSearchOptions(headers, headeropts, lang,
llvm::Triple(target_options.Triple));
        };
        ~PPContext()
        {
                delete pp;
                delete target;
        };

        llvm::raw_stdout_ostream ost;
        const DiagnosticOptions options;
        TextDiagnosticPrinter tdp;
        Diagnostic diag;
        LangOptions lang;
        SourceManager sm;
        FileManager fm;
        HeaderSearch headers;
        TargetInfo *target;
        Preprocessor *pp;
        HeaderSearchOptions headeropts;
};
#endif //#ifndef PP_CONTEXT


#cat array.cpp

#include <iostream>
#include "array.hpp"

using namespace std;



template <class gen>
ARRAY<gen>::ARRAY()
{
        size = MAX;
        ptr = (gen (*)[MAX])new gen[size];
}

template <class gen>
ARRAY<gen>::ARRAY(int array_size)
{
        size = array_size;
        ptr = (gen (*)[])new gen[size];
}

template <class gen>
ARRAY<gen>::~ARRAY()
{
        delete (gen (*)[MAX])ptr;
}

template <class gen>
int ARRAY<gen>::getsize()
{
        return size;
}

template <class gen>
ARRAY<gen>::ARRAY(const ARRAY &orig)
{
        ptr = (gen (*)[MAX])new gen[orig.size];
        memcpy(ptr, orig.ptr, sizeof(gen)*orig.size);
        size = orig.size;
}

template <class gen>
gen& ARRAY<gen>::operator [](unsigned int index)
{
        return *ptr[index];
}

int main(void)
{
        ARRAY <int> intarray;
        intarray[8] = 16;
        return 0;
}


thanks
Nobin
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: problem with clang application

Nobin Mathew
Is there any problem in this code fragment

     scope.sm.createMainFileID(File, SourceLocation());
       scope.pp->EnterMainSourceFile();
       IdentifierTable identitab(scope.lang);
       MinimalAction action(*(scope.pp));
       Parser parse(*(scope.pp), action);
       parse.ParseTranslationUnit();
       identitab.PrintStats();

I am not able to find the problem in the library, any help?

-Nobin

On Sat, Jun 19, 2010 at 3:27 PM, Nobin Mathew <[hidden email]> wrote:

> Hi,
>
> I am building an application using clang libraries, I running to a
> problem, it will be very helpful if somebody can give some directions.
>
> #./a.out /home/nmathew/Desktop/algorithms/array.cpp     gives
>
> In file included from /home/nmathew/Desktop/algorithms/array.cpp:1:
> In file included from /usr/include/c++/4.4.3/iostream:39:
> In file included from /usr/include/c++/4.4.3/ostream:39:
> In file included from /usr/include/c++/4.4.3/ios:38:
> In file included from /usr/include/c++/4.4.3/iosfwd:40:
> /usr/include/c++/4.4.3/bits/stringfwd.h:49:48: error: unknown type
> name 'char_traits'
> a.out: TextDiagnosticPrinter.cpp:293: void
> clang::TextDiagnosticPrinter::EmitCaretDiagnostic(clang::SourceLocation,
> clang::SourceRange*, unsigned int, const clang::SourceManager&, const
> clang::FixItHint*, unsigned int, unsigned int, unsigned int, unsigned
> int, unsigned int): Assertion `LangOpts && "Unexpected diagnostic
> outside source file processing"' failed.
> Stack dump:
> 0.      /usr/include/c++/4.4.3/bits/stringfwd.h:49:48: current parser token
> 'char_traits'
>
>
>
>
> My Include search directories are below.
>
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/include/linux
>  /usr/lib/gcc/i686-redhat-linux/4.4.3/include
>  /usr/include/c++/4.4.3
>  /usr/include/c++/4.4.3/backward
>  /usr/include/c++/4.4.3/i686-redhat-linux
>  /usr/local/include
>  /usr/include
> End of search list.
>
> and char_traits.h is in /usr/include/c++/4.4.3/bits/, I am using
> Fedora 12 32 bit system.
>
>
>
> my files are
>
> #cat tut01_pp.cpp
>
>
> #include "PPContext.h"
>
> int main(int argc, char *argv[])
> {
>        if (argc != 2)
>        {
>                cerr << "No File input " << endl;
>                return 0;
>        }
>        PPContext scope;
>        scope.headers.PrintStats();
>        const FileEntry *File = scope.fm.getFile(argv[1]);
>        if(!File)
>        {
>                cerr << "File Open Failed\t" << argv[1] << endl;
>                return 0;
>        }
>        scope.sm.createMainFileID(File, SourceLocation());
>        scope.pp->EnterMainSourceFile();
>        IdentifierTable identitab(scope.lang);
>        MinimalAction action(*(scope.pp));
>        Parser parse(*(scope.pp), action);
>        parse.ParseTranslationUnit();
>        identitab.PrintStats();
>
>        return 0;
> }
>
>
> #cat PPContext.h
>
>
> #ifndef PP_CONTEXT
> #define PP_CONTEXT
>
> #include <iostream>
> #include <string>
> using namespace std;
>
> #include <llvm/Support/raw_ostream.h>
>
> #include <clang/Basic/Diagnostic.h>
> #include <clang/Basic/TargetInfo.h>
> #include <clang/Basic/TargetOptions.h>
> #include <clang/Basic/FileManager.h>
> #include <clang/Basic/SourceManager.h>
> #include <clang/Lex/Preprocessor.h>
> #include <clang/Lex/HeaderSearch.h>
> #include <clang/Frontend/Utils.h>
> #include <clang/Frontend/TextDiagnosticPrinter.h>
> #include <clang/Frontend/DiagnosticOptions.h>
> #include <clang/Frontend/HeaderSearchOptions.h>
> #include <clang/Parse/Action.h>
> #include <clang/Parse/Parser.h>
> #include "llvm/System/Host.h"
> using namespace clang;
> using namespace llvm;
>
> struct PPContext {
>        PPContext():tdp(ost, options), diag(&tdp), sm(diag), headers(fm)
>        {
>
>                TargetOptions target_options;
>                target_options.Triple = sys::getHostTriple();
>                target_options.CXXABI = "itanium";
>                target = TargetInfo::CreateTargetInfo(diag, target_options);
>                lang.CPlusPlus = 1;
>                pp = new Preprocessor(diag, lang, *target, sm, headers);
>                headeropts.EnvIncPath = "/usr/include/linux";
>                headeropts.CXXEnvIncPath =
> "/usr/lib/gcc/i686-redhat-linux/4.4.3/include/";
>                headeropts.Verbose = 1;
>                ApplyHeaderSearchOptions(headers, headeropts, lang,
> llvm::Triple(target_options.Triple));
>        };
>        ~PPContext()
>        {
>                delete pp;
>                delete target;
>        };
>
>        llvm::raw_stdout_ostream ost;
>        const DiagnosticOptions options;
>        TextDiagnosticPrinter tdp;
>        Diagnostic diag;
>        LangOptions lang;
>        SourceManager sm;
>        FileManager fm;
>        HeaderSearch headers;
>        TargetInfo *target;
>        Preprocessor *pp;
>        HeaderSearchOptions headeropts;
> };
> #endif //#ifndef PP_CONTEXT
>
>
> #cat array.cpp
>
> #include <iostream>
> #include "array.hpp"
>
> using namespace std;
>
>
>
> template <class gen>
> ARRAY<gen>::ARRAY()
> {
>        size = MAX;
>        ptr = (gen (*)[MAX])new gen[size];
> }
>
> template <class gen>
> ARRAY<gen>::ARRAY(int array_size)
> {
>        size = array_size;
>        ptr = (gen (*)[])new gen[size];
> }
>
> template <class gen>
> ARRAY<gen>::~ARRAY()
> {
>        delete (gen (*)[MAX])ptr;
> }
>
> template <class gen>
> int ARRAY<gen>::getsize()
> {
>        return size;
> }
>
> template <class gen>
> ARRAY<gen>::ARRAY(const ARRAY &orig)
> {
>        ptr = (gen (*)[MAX])new gen[orig.size];
>        memcpy(ptr, orig.ptr, sizeof(gen)*orig.size);
>        size = orig.size;
> }
>
> template <class gen>
> gen& ARRAY<gen>::operator [](unsigned int index)
> {
>        return *ptr[index];
> }
>
> int main(void)
> {
>        ARRAY <int> intarray;
>        intarray[8] = 16;
>        return 0;
> }
>
>
> thanks
> Nobin
>

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: problem with clang application

Douglas Gregor

On Jun 19, 2010, at 7:25 AM, Nobin Mathew wrote:

> Is there any problem in this code fragment
>
>     scope.sm.createMainFileID(File, SourceLocation());
>       scope.pp->EnterMainSourceFile();
>       IdentifierTable identitab(scope.lang);
>       MinimalAction action(*(scope.pp));
>       Parser parse(*(scope.pp), action);
>       parse.ParseTranslationUnit();
>       identitab.PrintStats();
>
> I am not able to find the problem in the library, any help?

I highlight recommend using CompilerInvocation/CompilerInstance rather than trying to set up all of the various interconnected pieces.

        - Doug


_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: problem with clang application

Nobin Mathew
On Tue, Jun 22, 2010 at 7:34 AM, Douglas Gregor <[hidden email]> wrote:

>
> On Jun 19, 2010, at 7:25 AM, Nobin Mathew wrote:
>
>> Is there any problem in this code fragment
>>
>>     scope.sm.createMainFileID(File, SourceLocation());
>>       scope.pp->EnterMainSourceFile();
>>       IdentifierTable identitab(scope.lang);
>>       MinimalAction action(*(scope.pp));
>>       Parser parse(*(scope.pp), action);
>>       parse.ParseTranslationUnit();
>>       identitab.PrintStats();
>>
>> I am not able to find the problem in the library, any help?
>
> I highlight recommend using CompilerInvocation/CompilerInstance rather than trying to set up all of the various interconnected pieces.

Thanks, I also came to the same conclusion after going through cc1_main().

>
>        - Doug
>
>

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev