Bug 63216 - cpp parser breaks on compound literals
Summary: cpp parser breaks on compound literals
Status: RESOLVED DUPLICATE of bug 57156
Alias: None
Product: kdevelop
Classification: Applications
Component: Language Support: CPP (old) (show other bugs)
Version: git master
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: kdevelop-bugs-null
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-08-25 04:32 UTC by Richard Moats
Modified: 2013-03-31 00:49 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Richard Moats 2003-08-25 04:32:16 UTC
Version:           3.0 CVS (8/23/03) (using KDE Devel)
Installed from:    Compiled sources
Compiler:          i686-pc-linux-gnu-gcc (GCC) 3.3.2 20030812 (Debian prerelease) 
OS:          Linux

When the cppparser runs into a compound literal in a function/method, it hiccups and causes other function-scope variables and function calls to appear as global symbols in the class browser:

void foo( float[2] );

void compoundLiteralTest()
{
  foo( (float[]){ 0.0f, 1.0f } );
  int anotherVar; // appears as global scope in the class browser
  ...
}

This construct parsed fine until these lines were added to Parse::skip() in lib/cppparser/parser.cpp (rev 1.3):

        else if( l != '{' && (tk == '{' || tk == '}' || tk == ';') )
            return false;

which causes Parse::skip( '(', ')' ) to error out while skipping through "( (float[]){ 0.0f, 1.0f } )"

While compound literals aren't legal in ANSI C++, they are in C99 and GNU C++ extensions...
Comment 1 Matt Rogers 2004-10-27 03:14:00 UTC
confirmed with CVS from 20041026
Comment 2 Michael Duelli 2007-01-04 23:17:25 UTC
Currently the parser of kdevelop from SVN does not accept this code at all, but as of gcc it is valid code and compiles fine.
Of couse, we can not check if it still produces a global symbol until the parser accepts this correct code again.
Comment 3 Andreas Pakulat 2007-11-30 16:37:10 UTC
This is basically the same thing as 57156, the parser from kdevelop simply isn't build for C.

*** This bug has been marked as a duplicate of 57156 ***
Comment 4 Aleix Pol 2013-03-31 00:49:32 UTC
Moving all the bugs from the CPP Parser. It was not well defined the difference between it and C++ Language Support and people kept reporting in both places indistinctively