diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/GCCCompleteParseExtensionsTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/GCCCompleteParseExtensionsTest.java index f031afca0a5..54ee449ebb2 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/GCCCompleteParseExtensionsTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/GCCCompleteParseExtensionsTest.java @@ -425,4 +425,11 @@ public class GCCCompleteParseExtensionsTest extends AST2BaseTest { parseGCC(code); parseGPP(code); } + + // __float128 f; + public void test__float128() throws Exception { + String code= getAboveComment(); + parseGCC(code); + parseGPP(code); + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java index 6eb4359f1ab..c2a0031218a 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java @@ -635,6 +635,9 @@ public class ASTStringUtil { case IASTSimpleDeclSpecifier.t_double: buffer.append(Keywords.DOUBLE).append(' '); break; + case IASTSimpleDeclSpecifier.t_float128: + buffer.append(GCCKeywords.cp__float128).append(' '); + break; case IASTSimpleDeclSpecifier.t_bool: if (simpleDeclSpec instanceof ICASTSimpleDeclSpecifier) { buffer.append(Keywords.cBOOL).append(' '); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java index 8b367ba9017..d5163ef7505 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java @@ -784,6 +784,14 @@ public class ASTSignatureUtil { result.append(GCCKeywords.__INT128); needSpace = true; break; + case IASTSimpleDeclSpecifier.t_float128: + if (needSpace) { + result.append(SPACE); + needSpace = false; + } + result.append(GCCKeywords.__FLOAT128); + needSpace = true; + break; case IASTSimpleDeclSpecifier.t_void: if (needSpace) { result.append(SPACE); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTSimpleDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTSimpleDeclSpecifier.java index 8562e33e5b4..b2fae8e79c3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTSimpleDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTSimpleDeclSpecifier.java @@ -106,6 +106,12 @@ public interface IASTSimpleDeclSpecifier extends IASTDeclSpecifier { */ public static final int t_int128 = 13; + /** + * __float128 i; + * @since 5.5 + */ + public static final int t_float128 = 14; + /** * @since 5.1 */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java index e13798ce231..86a69376d77 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java @@ -23,7 +23,8 @@ public interface IBasicType extends IType { */ enum Kind { eUnspecified, eVoid, eChar, eWChar, eInt, eFloat, eDouble, - eBoolean, eChar16, eChar32, /** @since 5.4 */ eNullPtr, /** @since 5.5 */ eInt128 + eBoolean, eChar16, eChar32, /** @since 5.4 */ eNullPtr, + /** @since 5.5 */ eInt128, /** @since 5.5 */ eFloat128 } /** @since 5.2 */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/GCCScannerExtensionConfiguration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/GCCScannerExtensionConfiguration.java index fc9a3ac3758..4ffd8ac64b3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/GCCScannerExtensionConfiguration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/GCCScannerExtensionConfiguration.java @@ -68,6 +68,7 @@ public class GCCScannerExtensionConfiguration extends GNUScannerExtensionConfigu addMacro("__builtin_offsetof(T,m)", "((size_t) &((T *)0)->m)"); if (version >= VERSION_4_7) { + addKeyword(GCCKeywords.cp__float128, IGCCToken.t__float128); addKeyword(GCCKeywords.cp__int128, IGCCToken.t__int128); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/GPPScannerExtensionConfiguration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/GPPScannerExtensionConfiguration.java index b643cd4652b..ffd4111d06a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/GPPScannerExtensionConfiguration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/GPPScannerExtensionConfiguration.java @@ -104,6 +104,7 @@ public class GPPScannerExtensionConfiguration extends GNUScannerExtensionConfigu addKeyword(GCCKeywords.cp__is_trivial, IGCCToken.tTT_is_trivial); } if (version >= VERSION_4_7) { + addKeyword(GCCKeywords.cp__float128, IGCCToken.t__float128); addKeyword(GCCKeywords.cp__int128, IGCCToken.t__int128); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/GCCKeywords.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/GCCKeywords.java index 765f962c5de..a774647e288 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/GCCKeywords.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/GCCKeywords.java @@ -25,6 +25,8 @@ public class GCCKeywords { public static final String __DECLSPEC = "__declspec"; /** @since 5.5 */ public static final String __INT128 = "__int128"; + /** @since 5.5 */ + public static final String __FLOAT128 = "__float128"; public static final char[] cpTYPEOF = TYPEOF.toCharArray(), @@ -69,6 +71,7 @@ public class GCCKeywords { /** @since 5.5 */ public static final char[] + cp__float128= __FLOAT128.toCharArray(), cp__int128= __INT128.toCharArray(), cp__is_literal_type= "__is_literal_type".toCharArray(), cp__is_standard_layout= "__is_standard_layout".toCharArray(), diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IGCCToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IGCCToken.java index a1c0f9606c0..a8a5d2498f9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IGCCToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IGCCToken.java @@ -45,5 +45,6 @@ public interface IGCCToken extends IToken { /** @since 5.5 */ int tTT_is_standard_layout= FIRST_RESERVED_IGCCToken + 23; /** @since 5.5 */ int tTT_is_trivial= FIRST_RESERVED_IGCCToken + 24; - /** @since 5.5 */ int t__int128 = FIRST_RESERVED_IGCCToken + 25; + /** @since 5.5 */ int t__int128= FIRST_RESERVED_IGCCToken + 25; + /** @since 5.5 */ int t__float128= FIRST_RESERVED_IGCCToken + 26; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java index cc8f38428db..05511bf2379 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java @@ -2591,12 +2591,13 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { case IToken.t_short: case IToken.t_int: case IToken.t_long: - case IGCCToken.t__int128: case IToken.t_float: case IToken.t_double: case IToken.t__Bool: case IToken.t__Complex: case IToken.t__Imaginary: + case IGCCToken.t__int128: + case IGCCToken.t__float128: case IToken.t_signed: case IToken.t_unsigned: case IToken.t_decltype: diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/SizeofCalculator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/SizeofCalculator.java index d04bacd3eb6..a084775601e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/SizeofCalculator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/SizeofCalculator.java @@ -73,6 +73,8 @@ public class SizeofCalculator { public final SizeAndAlignment sizeof_complex_double; public final SizeAndAlignment sizeof_long_double; public final SizeAndAlignment sizeof_complex_long_double; + public final SizeAndAlignment sizeof_float128; + public final SizeAndAlignment sizeof_complex_float128; private final IASTTranslationUnit ast; @@ -135,6 +137,8 @@ public class SizeofCalculator { sizeof_complex_double = getSizeOfPair(sizeof_double); sizeof_long_double = getSize(sizeofMacros, "__SIZEOF_LONG_DOUBLE__", maxAlignment); //$NON-NLS-1$ sizeof_complex_long_double = getSizeOfPair(sizeof_long_double); + sizeof_float128 = size_16; // GCC does not define __SIZEOF_FLOAT128__ + sizeof_complex_float128 = getSizeOfPair(sizeof_float128); } private SizeofCalculator() { @@ -156,6 +160,8 @@ public class SizeofCalculator { sizeof_complex_double = null; sizeof_long_double = null; sizeof_complex_long_double = null; + sizeof_float128 = size_16; + sizeof_complex_float128 = getSizeOfPair(sizeof_float128); ast = null; } @@ -215,6 +221,8 @@ public class SizeofCalculator { return type.isComplex() ? (type.isLong() ? sizeof_long_double : sizeof_double) : (type.isLong() ? sizeof_complex_long_double : sizeof_complex_double); + case eFloat128: + return type.isComplex() ? sizeof_complex_float128 : sizeof_float128; case eWChar: return sizeof_wchar_t; case eChar16: diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclSpecifier.java index f2cf88daf27..02165d095a4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclSpecifier.java @@ -6,9 +6,9 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * John Camelon (IBM Rational Software) - Initial API and implementation - * Yuan Zhang / Beth Tibbitts (IBM Research) - * Markus Schorn (Wind River Systems) + * John Camelon (IBM Rational Software) - Initial API and implementation + * Yuan Zhang / Beth Tibbitts (IBM Research) + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.c; @@ -19,17 +19,16 @@ import org.eclipse.cdt.core.dom.ast.IBasicType.Kind; import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; -public class CASTSimpleDeclSpecifier extends CASTBaseDeclSpecifier implements ICASTSimpleDeclSpecifier, - IASTAmbiguityParent { - +public class CASTSimpleDeclSpecifier extends CASTBaseDeclSpecifier + implements ICASTSimpleDeclSpecifier, IASTAmbiguityParent { private int simpleType; private boolean isSigned; private boolean isUnsigned; private boolean isShort; private boolean isLong; private boolean longlong; - private boolean complex=false; - private boolean imaginary=false; + private boolean complex; + private boolean imaginary; private IASTExpression fDeclTypeExpression; @Override @@ -110,6 +109,8 @@ public class CASTSimpleDeclSpecifier extends CASTBaseDeclSpecifier implements IC return t_double; case eFloat: return t_float; + case eFloat128: + return t_float; case eInt: return t_int; case eInt128: diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java index 3409058e745..e94f50e43d9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java @@ -69,6 +69,8 @@ public class CBasicType implements ICBasicType, ISerializableType { return Kind.eDouble; case IASTSimpleDeclSpecifier.t_float: return Kind.eFloat; + case IASTSimpleDeclSpecifier.t_float128: + return Kind.eFloat128; case IASTSimpleDeclSpecifier.t_int: return Kind.eInt; case IASTSimpleDeclSpecifier.t_int128: 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 7aa0db02fd8..d74fefd9ea1 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 @@ -1030,6 +1030,13 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { encounteredRawType= true; endOffset= consume().getEndOffset(); break; + case IGCCToken.t__float128: + if (encounteredTypename) + break declSpecifiers; + simpleType = IASTSimpleDeclSpecifier.t_float128; + encounteredRawType= true; + endOffset= consume().getEndOffset(); + break; case IToken.t_signed: if (encounteredTypename) break declSpecifiers; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclSpecifier.java index 6c7333ffc2c..809a4b283fc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclSpecifier.java @@ -90,6 +90,8 @@ public class CPPASTSimpleDeclSpecifier extends CPPASTBaseDeclSpecifier return t_double; case eFloat: return t_float; + case eFloat128: + return t_float128; case eInt: return t_int; case eInt128: diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java index 0dd4aba9b71..ca4055b69f9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java @@ -100,6 +100,8 @@ public class CPPBasicType implements ICPPBasicType, ISerializableType { return Kind.eDouble; case IASTSimpleDeclSpecifier.t_float: return Kind.eFloat; + case IASTSimpleDeclSpecifier.t_float128: + return Kind.eFloat128; case IASTSimpleDeclSpecifier.t_int: return Kind.eInt; case IASTSimpleDeclSpecifier.t_int128: 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 a23acd37a51..b8808c96f9a 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 @@ -66,6 +66,7 @@ import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTAliasDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTAmbiguousTemplateArgument; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCapture; @@ -2851,6 +2852,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { encounteredRawType= true; endOffset= consume().getEndOffset(); break; + case IGCCToken.t__float128: + if (encounteredTypename) + break declSpecifiers; + simpleType = IASTSimpleDeclSpecifier.t_float128; + encounteredRawType= true; + endOffset= consume().getEndOffset(); + break; case IToken.t_void: if (encounteredTypename) break declSpecifiers; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java index df7e77c86cf..f4610043e90 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java @@ -87,6 +87,8 @@ public class DeclSpecWriter extends NodeWriter { return Keywords.FLOAT; case IASTSimpleDeclSpecifier.t_double: return Keywords.DOUBLE; + case IASTSimpleDeclSpecifier.t_float128: + return GCCKeywords.__FLOAT128; case IASTSimpleDeclSpecifier.t_bool: return isCpp ? Keywords.BOOL : Keywords._BOOL;