diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java index c5243f9abe1..2f5abef4832 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java @@ -3640,9 +3640,9 @@ public class AST2Tests extends AST2BaseTest { } // void test() { - // const char d= *"b"; + // char d= *"b"; // } - public void _testBug181942() throws Exception { + public void testBug181942() throws Exception { StringBuffer buffer = getContents(1)[0]; for (int i = 0; i < LANGUAGES.length; i++) parse( buffer.toString(), LANGUAGES[i], true, true ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index c0319d45e1b..b64e22d7a2d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -2910,10 +2910,14 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { IToken mark = mark(); int offset = consume().getOffset(); IASTExpression castExpression = castExpression(); - if( castExpression instanceof IASTLiteralExpression && ( operator == IASTUnaryExpression.op_amper || operator == IASTUnaryExpression.op_star ) ) - { - backup( mark ); - throwBacktrack( mark ); + if( castExpression instanceof IASTLiteralExpression ) { + IASTLiteralExpression lit= (IASTLiteralExpression) castExpression; + if ( operator == IASTUnaryExpression.op_amper || + (operator == IASTUnaryExpression.op_star && lit.getKind() != IASTLiteralExpression.lk_string_literal) ) + { + backup( mark ); + throwBacktrack( mark ); + } } return buildUnaryExpression(operator, castExpression, offset, calculateEndOffset(castExpression)); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 1a9ba2b9ca2..ce1fd0e802b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -5460,13 +5460,15 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { IToken mark = mark(); int offset = consume().getOffset(); IASTExpression castExpression = castExpression(); - if( castExpression instanceof IASTLiteralExpression && ( operator == IASTUnaryExpression.op_amper || operator == IASTUnaryExpression.op_star ) ) - { - IASTLiteralExpression literal = (IASTLiteralExpression) castExpression; - if( literal.getKind() != ICPPASTLiteralExpression.lk_this ) - { - backup( mark ); - throwBacktrack( mark ); + if (castExpression instanceof IASTLiteralExpression) { + IASTLiteralExpression literal = (IASTLiteralExpression) castExpression; + if( literal.getKind() != ICPPASTLiteralExpression.lk_this ) { + if ( operator == IASTUnaryExpression.op_amper || + (operator == IASTUnaryExpression.op_star && + literal.getKind() != IASTLiteralExpression.lk_string_literal) ) { + backup( mark ); + throwBacktrack( mark ); + } } } return buildUnaryExpression(operator, castExpression, offset,