[cfe-dev] Clang 3.2 assertion failure issuing diagnostics when compiling from AST files.

Tom Honermann thonermann at coverity.com
Wed Feb 27 20:00:49 PST 2013


Here is another example test case.  The diagnostic in this case is a 
warning, not an error.

$ cat t.cpp
template<typename T>
struct S {
     T *mf();
};
template<typename T>
T *S<T>::mf() {
     // warning: control reaches end of non-void function [-Wreturn-type]
}

void f() {
     S<int>().mf();
}


I suspect the assertion failure occurs whenever a diagnostic is issued 
for a template instantiation in an AST file, but I haven't tried to 
prove this.

I added this example to the bug report as well.

Tom.

On 02/27/2013 03:35 PM, Tom Honermann wrote:
> This issue reproduces with Clang 3.2 and with Clang trunk as of yesterday.
>
> The following bug has been filed for this:
>    Bug 15377 - Clang assertion failure when issuing a diagnostic while
> compiling from an AST file
>    http://llvm.org/bugs/show_bug.cgi?id=15377
>
> This code is ill-formed:
>
> $ cat t.cpp
> template<typename T>
> T tf() {
>      static const T i;
>      return i;
> }
>
> void f() {
>      tf<int>();
> }
>
>
> Compiling it directly to object file results in an appropriate diagnostic:
>
> $ clang -c t.cpp
> t.cpp:5:20: error: default initialization of an object of const type
> 'const int'
>      static const T i;
>                     ^
> t.cpp:10:5: note: in instantiation of function template specialization
> 'tf<int>'
>        requested here
>      tf<int>();
>      ^
> 1 error generated.
>
>
> Emitting to an AST file and then compiling from it results in an
> assertion failure when constructing the diagnostic:
>
> $ clang -emit-ast t.cpp
> $ clang -c t.ast
> clang: lib/Frontend/TextDiagnosticPrinter.cpp:148: virtual void
> clang::TextDiagnosticPrinter::HandleDiagnostic(clang::DiagnosticsEngine::Level,
> const clang::Diagnostic&): Assertion `TextDiag && "Unexpected diagnostic
> outside source file processing"' failed.
> clang: error: unable to execute command: Segmentation fault (core dumped)
> clang: error: clang frontend command failed due to signal (use -v to see
> invocation)
> clang version 3.2 (tags/RELEASE_32/final)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> clang: note: diagnostic msg: PLEASE submit a bug report to
> http://llvm.org/bugs/ and include the crash backtrace, preprocessed
> source, and associated run script.
> clang: note: diagnostic msg: Error generating preprocessed source(s) -
> no preprocessable inputs.
>
> Backtrace and further information are available in the bug report.
>
> Tom.
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>




More information about the cfe-dev mailing list