1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 23:05:47 +02:00

Testcase provided by Richard Miskin, bug 145389.

This commit is contained in:
Markus Schorn 2008-04-16 16:30:23 +00:00
parent e4f737f6b1
commit b7afd7af2c

View file

@ -710,6 +710,45 @@ public class CompleteParser2Tests extends BaseTestCase {
parse( "asm ( \"blah blah blah\" );" ); //$NON-NLS-1$ parse( "asm ( \"blah blah blah\" );" ); //$NON-NLS-1$
} }
/**
* Tests GNU extensions to asm
* e.g. asm volatile ("stuff");
* asm ("addl %%ebx,%%eax" : "=a"(foo) : "a"(foo),"b"(bar) );
*/
public void testGNUASMExtension() throws Exception
{
// volatile keyword
parse( "asm volatile( \"blah blah blah\" );", true, ParserLanguage.C, true ); //$NON-NLS-1$
parse( "asm volatile( \"blah blah blah\" );", true, ParserLanguage.CPP, true ); //$NON-NLS-1$
// Use of operands
parse( "asm (\"addl %%ebx,%%eax\" : \"=a\"(foo) :\"a\"(foo), \"b\"(bar) );", true, ParserLanguage.C, true );//$NON-NLS-1$
parse( "asm (\"addl %%ebx,%%eax\" : \"=a\"(foo) :\"a\"(foo), \"b\"(bar) );", true, ParserLanguage.CPP, true );//$NON-NLS-1$
// Invalid use of operands
parse( "asm (\"addl %%ebx,%%eax\" \"=a\"(foo) :\"a\"(foo) : \"b\"(bar) );", false, ParserLanguage.C, true );//$NON-NLS-1$
parse( "asm (\"addl %%ebx,%%eax\" \"=a\"(foo) :\"a\"(foo) : \"b\"(bar) );", false, ParserLanguage.CPP, true );//$NON-NLS-1$
// Code from bug 145389.
parse("#define mb() __asm__ __volatile__ (\"sync\" : : : \"memory\")\r\n" +
"\r\n" +
"int main(int argc, char **argv) {\r\n" +
" mb();\r\n" +
"}");
// Code from bug 117001
parse("static inline long\r\n" +
"div_ll_X_l_rem(long long divs, long div, long *rem)\r\n" +
"{\r\n" +
" long dum2;\r\n" +
" __asm__(\"divl %2\":\"=a\"(dum2), \"=d\"(*rem) // syntax error indicated at \":\"\r\n" +
" : \"rm\"(div), \"A\"(divs));\r\n" +
"\r\n" +
" return dum2;\r\n" +
"\r\n" +
"}");
}
public void testOverride() throws Exception public void testOverride() throws Exception
{ {
IASTTranslationUnit tu = parse( "void foo();\n void foo( int );\n"); //$NON-NLS-1$ IASTTranslationUnit tu = parse( "void foo();\n void foo( int );\n"); //$NON-NLS-1$