[cfe-dev] clang_parseTranslationUnit2 passes on incomplete type error

Milian Wolff via cfe-dev cfe-dev at lists.llvm.org
Mon Apr 29 04:48:42 PDT 2019


On Thursday, April 18, 2019 3:14:46 PM CEST Jiri Olsa via cfe-dev wrote:
> hi,
> when using clang_parseTranslationUnit2 to compile uncomplete
> struct declaration, like:
> 
>   struct a {
>     int a;
>     int b;
>     struct c c;
>   };
> 
> I'm getting just warning on terminal but no error on the call itself:
> 
>   $ ./test
>   definitions.h:1:35: error: field has incomplete type 'struct c'
>   definitions.h:1:33: note: forward declaration of 'struct c'
>   Clang error 0
>
> Is there a way (some flag perhaps) to make this fail on this input,
> or do I need to call clang_visitChildren and check the fields offsets
> and sizes, because those seem mangled, offsets are zero and size -2.
> 
> I'm new to this, so I might be missing something obvious ;-)

Hey Jirka,

I think clang_parseTranslationUnit2 only returns an error when something 
seriously failed. But it won't return an error on "normal" source input 
errors. Instead, you'll get diagnostics for those. So in your case, I suggest 
you iterate over the diagnostics (cf. clang_getNumDiagnostics and  
clang_getDiagnostic), then check clang_getDiagnosticSeverity for every 
diagnostic and error-our when you encounter an error.

Hope that helps

> ---
> #include <clang-c/Index.h>
> #include <iostream>
> #include <vector>
> 
> using namespace std;
> 
> int main(int argc, char **argv)
> {
> 	CXIndex index = clang_createIndex(1, 1);
> 	CXErrorCode error;
> 	CXTranslationUnit translation_unit;
> 	std::string input = "struct a { int a; int b; struct c c; };";
> 
> 	CXUnsavedFile unsaved_files[] =
> 	{
> 		{
> 			.Filename = "definitions.h",
> 			.Contents = input.c_str(),
> 			.Length = input.size(),
> 		},
> 	};
> 
> 	error = clang_parseTranslationUnit2(
> 			index,
> 			"definitions.h",
> 			NULL, 0,
> 			unsaved_files, sizeof(unsaved_files)/
sizeof(CXUnsavedFile),
> 			
CXTranslationUnit_DetailedPreprocessingRecord,
> 			&translation_unit);
> 
> 	cerr << "Clang error " << error << endl;
> 	return 0;
> }
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev


-- 
Milian Wolff
mail at milianw.de
http://milianw.de




More information about the cfe-dev mailing list