Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2004-07-12 18:46:41 +0000
committerAndrew Niefer2004-07-12 18:46:41 +0000
commit610efadb58fea1e77cb51cac5b6ed162fc035824 (patch)
tree9257bda81ed54f90a042b34eb7566b57b78f9b38
parent993b0299f44ba1493fe89d69a25e6c1382bff5f2 (diff)
downloadorg.eclipse.cdt-610efadb58fea1e77cb51cac5b6ed162fc035824.tar.gz
org.eclipse.cdt-610efadb58fea1e77cb51cac5b6ed162fc035824.tar.xz
org.eclipse.cdt-610efadb58fea1e77cb51cac5b6ed162fc035824.zip
fix bug 69798
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java66
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java15
2 files changed, 46 insertions, 35 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
index 9afc7f91447..92fee1ee0c2 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
@@ -1974,12 +1974,12 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
public void testUnaryAmperCast() throws Exception{
Writer writer = new StringWriter();
- writer.write( "void f( char * ); \n ");
- writer.write( "void f( char ); \n ");
- writer.write( "void main() { \n ");
- writer.write( " char * t = new char [ 5 ]; \n ");
- writer.write( " f( &t[1] ); \n ");
- writer.write( "} \n ");
+ writer.write( "void f( char * ); \r\n "); //$NON-NLS-1$
+ writer.write( "void f( char ); \n "); //$NON-NLS-1$
+ writer.write( "void main() { \n "); //$NON-NLS-1$
+ writer.write( " char * t = new char [ 5 ]; \n "); //$NON-NLS-1$
+ writer.write( " f( &t[1] ); \n "); //$NON-NLS-1$
+ writer.write( "} \n "); //$NON-NLS-1$
Iterator i = parse( writer.toString() ).getDeclarations();
IASTFunction f1 = (IASTFunction) i.next();
@@ -1993,10 +1993,10 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
public void testBug68235() throws Exception{
Writer writer = new StringWriter();
- writer.write( " struct xTag { int x; }; ");
- writer.write( " typedef xTag xType; ");
- writer.write( " typedef struct yTag { int x; } yType; ");
- writer.write( " class C1 { xType x; yType y; }; ");
+ writer.write( " struct xTag { int x; }; "); //$NON-NLS-1$
+ writer.write( " typedef xTag xType; "); //$NON-NLS-1$
+ writer.write( " typedef struct yTag { int x; } yType; "); //$NON-NLS-1$
+ writer.write( " class C1 { xType x; yType y; }; "); //$NON-NLS-1$
Iterator i = parse( writer.toString() ).getDeclarations();
@@ -2025,34 +2025,34 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
public void testBug60407() throws Exception
{
Writer writer = new StringWriter();
- writer.write( "struct ZZZ { int x, y, z; };\n" );
- writer.write( "typedef struct ZZZ _FILE;\n" );
- writer.write( "typedef _FILE FILE;\n" );
- writer.write( "static void static_function(FILE * lcd){}\n" );
- writer.write( "int main(int argc, char **argv) {\n" );
- writer.write( "FILE * file = 0;\n" );
- writer.write( "static_function( file );\n" );
- writer.write( "return 0;\n" );
- writer.write( "}\n" );
+ writer.write( "struct ZZZ { int x, y, z; };\r\n" ); //$NON-NLS-1$
+ writer.write( "typedef struct ZZZ _FILE;\n" ); //$NON-NLS-1$
+ writer.write( "typedef _FILE FILE;\n" ); //$NON-NLS-1$
+ writer.write( "static void static_function(FILE * lcd){}\n" ); //$NON-NLS-1$
+ writer.write( "int main(int argc, char **argv) {\n" ); //$NON-NLS-1$
+ writer.write( "FILE * file = 0;\n" ); //$NON-NLS-1$
+ writer.write( "static_function( file );\n" ); //$NON-NLS-1$
+ writer.write( "return 0;\n" ); //$NON-NLS-1$
+ writer.write( "}\n" ); //$NON-NLS-1$
parse( writer.toString() );
}
public void testBug68623() throws Exception{
Writer writer = new StringWriter();
- writer.write( "class A { \n" );
- writer.write( " A(); \n" );
- writer.write( " class sub{}; \n" );
- writer.write( " sub * x; \n" );
- writer.write( "}; \n" );
- writer.write( "A::A() : x( (sub *) 0 ) {} \n" );
+ writer.write( "class A { \n" ); //$NON-NLS-1$
+ writer.write( " A(); \n" ); //$NON-NLS-1$
+ writer.write( " class sub{}; \n" ); //$NON-NLS-1$
+ writer.write( " sub * x; \n" ); //$NON-NLS-1$
+ writer.write( "}; \n" ); //$NON-NLS-1$
+ writer.write( "A::A() : x( (sub *) 0 ) {} \n" ); //$NON-NLS-1$
parse( writer.toString() );
writer = new StringWriter();
- writer.write( "class A { \n" );
- writer.write( " A() : x (0) {} \n" );
- writer.write( " int x; \n" );
- writer.write( "}; \n" );
+ writer.write( "class A { \n" ); //$NON-NLS-1$
+ writer.write( " A() : x (0) {} \n" ); //$NON-NLS-1$
+ writer.write( " int x; \n" ); //$NON-NLS-1$
+ writer.write( "}; \n" ); //$NON-NLS-1$
Iterator i = parse( writer.toString() ).getDeclarations();
IASTClassSpecifier A = (IASTClassSpecifier) ((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
@@ -2063,4 +2063,12 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
assertAllReferences( 1, createTaskList( new Task( x ) ) );
}
+
+ public void testBug69798() throws Exception{
+ Writer writer = new StringWriter();
+ writer.write( "enum Flags { FLAG1, FLAG2 }; \n" ); //$NON-NLS-1$
+ writer.write( "int f() { int a, b; b = ( a ? FLAG1 : 0 ) | FLAG2; } \n" ); //$NON-NLS-1$
+
+ parse( writer.toString() );
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
index b272dd5a199..d998b5ec73a 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
@@ -1724,7 +1724,7 @@ public class ParserSymbolTable {
int mask = ITypeInfo.isShort | ITypeInfo.isLong | ITypeInfo.isUnsigned | ITypeInfo.isLongLong | ITypeInfo.isSigned;
- if( (src.isType( ITypeInfo.t__Bool, ITypeInfo.t_float ) || src.isType( ITypeInfo.t_enumeration )) &&
+ if( src.isType( ITypeInfo.t__Bool, ITypeInfo.t_float ) &&
(trg.isType( ITypeInfo.t_int ) || trg.isType( ITypeInfo.t_double )) )
{
if( src.getType() == trg.getType() && (( src.getTypeBits() & mask) == (trg.getTypeBits() & mask)) ){
@@ -1821,9 +1821,9 @@ public class ParserSymbolTable {
} else if( !src.hasPtrOperators() ) {
//4.7 An rvalue of an integer type can be converted to an rvalue of another integer type.
//An rvalue of an enumeration type can be converted to an rvalue of an integer type.
- if( src.isType( ITypeInfo.t__Bool, ITypeInfo.t_int ) ||
- src.isType( ITypeInfo.t_float, ITypeInfo.t_double ) ||
- src.isType( ITypeInfo.t_enumeration ) )
+ if( src.isType( ITypeInfo.t__Bool, ITypeInfo.t_int ) || src.isType( ITypeInfo.t_float, ITypeInfo.t_double ) ||
+ src.isType( ITypeInfo.t_enumeration ) || ( src.isType( ITypeInfo.t_type ) && src.getTypeSymbol() != null
+ && src.getTypeSymbol().isType( ITypeInfo.t_enumeration ) ) )
{
if( trg.isType( ITypeInfo.t__Bool, ITypeInfo.t_int ) ||
trg.isType( ITypeInfo.t_float, ITypeInfo.t_double ) )
@@ -2099,9 +2099,12 @@ public class ParserSymbolTable {
info = typeSymbol.getTypeInfo();
int j = 0;
- while( (info.getTypeSymbol() != null && info.getType() == ITypeInfo.t_type) ||
+ while( (info.getTypeSymbol() != null && ( info.isType( ITypeInfo.t_type ) || info.isType( ITypeInfo.t_enumerator ) ) ) ||
(typeSymbol != null && typeSymbol.isForwardDeclaration() && typeSymbol.getForwardSymbol() != null ) ){
- typeSymbol = info.isType( ITypeInfo.t_type) ? info.getTypeSymbol() : typeSymbol.getForwardSymbol();
+
+ typeSymbol = (info.isType( ITypeInfo.t_type) || info.isType(ITypeInfo.t_enumerator))
+ ? info.getTypeSymbol()
+ : typeSymbol.getForwardSymbol();
returnInfo.addPtrOperator( info.getPtrOperators() );
returnInfo.setTypeBits( ( returnInfo.getTypeBits() | info.getTypeBits() ) & ~ITypeInfo.isTypedef & ~ITypeInfo.isForward );

Back to the top