From 32f1f35b2efa25d537e6ef7d3bfde8c329e4710c Mon Sep 17 00:00:00 2001 From: manu Date: Fri, 26 Feb 2010 17:09:29 +0000 Subject: [PATCH] =?utf8?q?2010-02-26=20=20Manuel=20L=C3=B3pez-Ib=C3=A1?= =?utf8?q?=C3=B1ez=20=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit PR c/20631 * doc/cpp.texi: Use c90 instead of c89 and gnu90 instead of gnu89. * doc/standards.texi: Likewise. * doc/extend.texi: Likewise. * doc/trouble.texi: Likewise. * doc/cppopts.texi: Likewise. * doc/install.texi: Likewise. * c.opt (std=c90,std=gnu90): New options. * c-opts.c (c_common_handle_option): Handle them. testsuite/ * gcc.dg/cpp/c90-pedantic.c: New. * gcc.dg/cpp/c90.c: New. * gcc.dg/gnu90-const-expr-1.c: New. * gcc.dg/Woverlength-strings-pedantic-c90.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157096 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 12 +++++ gcc/c-opts.c | 2 + gcc/c.opt | 8 ++++ gcc/doc/cpp.texi | 8 ++-- gcc/doc/cppopts.texi | 10 ++-- gcc/doc/extend.texi | 40 ++++++++-------- gcc/doc/install.texi | 4 +- gcc/doc/invoke.texi | 25 +++++----- gcc/doc/standards.texi | 8 ++-- gcc/doc/trouble.texi | 2 +- gcc/testsuite/ChangeLog | 8 ++++ .../gcc.dg/Woverlength-strings-pedantic-c90.c | 19 ++++++++ gcc/testsuite/gcc.dg/cpp/c90-pedantic.c | 10 ++++ gcc/testsuite/gcc.dg/cpp/c90.c | 10 ++++ gcc/testsuite/gcc.dg/gnu90-const-expr-1.c | 56 ++++++++++++++++++++++ 15 files changed, 176 insertions(+), 46 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90.c create mode 100644 gcc/testsuite/gcc.dg/cpp/c90-pedantic.c create mode 100644 gcc/testsuite/gcc.dg/cpp/c90.c create mode 100644 gcc/testsuite/gcc.dg/gnu90-const-expr-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e3d5e714a92..07fae6a657b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,17 @@ 2010-02-26 Manuel López-Ibáñez + PR c/20631 + * doc/cpp.texi: Use c90 instead of c89 and gnu90 instead of gnu89. + * doc/standards.texi: Likewise. + * doc/extend.texi: Likewise. + * doc/trouble.texi: Likewise. + * doc/cppopts.texi: Likewise. + * doc/install.texi: Likewise. + * c.opt (std=c90,std=gnu90): New options. + * c-opts.c (c_common_handle_option): Handle them. + +2010-02-26 Manuel López-Ibáñez + PR c/24577 * c-decl.c (undeclared_variable): Use an informative note. diff --git a/gcc/c-opts.c b/gcc/c-opts.c index 7dfc1fb1486..47acceda386 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -952,6 +952,7 @@ c_common_handle_option (size_t scode, const char *arg, int value) break; case OPT_std_c89: + case OPT_std_c90: case OPT_std_iso9899_1990: case OPT_std_iso9899_199409: if (!preprocessing_asm_p) @@ -959,6 +960,7 @@ c_common_handle_option (size_t scode, const char *arg, int value) break; case OPT_std_gnu89: + case OPT_std_gnu90: if (!preprocessing_asm_p) set_std_c89 (false /* c94 */, false /* ISO */); break; diff --git a/gcc/c.opt b/gcc/c.opt index 1168c655519..ec600f5dc4d 100644 --- a/gcc/c.opt +++ b/gcc/c.opt @@ -965,6 +965,10 @@ std=c89 C ObjC Conform to the ISO 1990 C standard +std=c90 +C ObjC +Conform to the ISO 1990 C standard + std=c99 C ObjC Conform to the ISO 1999 C standard @@ -988,6 +992,10 @@ std=gnu89 C ObjC Conform to the ISO 1990 C standard with GNU extensions +std=gnu90 +C ObjC +Conform to the ISO 1990 C standard with GNU extensions + std=gnu99 C ObjC Conform to the ISO 1999 C standard with GNU extensions diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi index 1a322ba7aa4..a9941780755 100644 --- a/gcc/doc/cpp.texi +++ b/gcc/doc/cpp.texi @@ -215,7 +215,7 @@ Standard C@. In its default mode, the GNU C preprocessor does not do a few things required by the standard. These are features which are rarely, if ever, used, and may cause surprising changes to the meaning of a program which does not expect them. To get strict ISO Standard C, -you should use the @option{-std=c89} or @option{-std=c99} options, depending +you should use the @option{-std=c90} or @option{-std=c99} options, depending on which version of the standard you want. To get all the mandatory diagnostics, you must also use @option{-pedantic}. @xref{Invocation}. @@ -2064,7 +2064,7 @@ are defined. If they are defined, their value is 1. @item __GNUC_GNU_INLINE__ GCC defines this macro if functions declared @code{inline} will be -handled in GCC's traditional gnu89 mode. Object files will contain +handled in GCC's traditional gnu90 mode. Object files will contain externally visible definitions of all functions declared @code{inline} without @code{extern} or @code{static}. They will not contain any definitions of any functions declared @code{extern inline}. @@ -2077,10 +2077,10 @@ inline}. They will not contain definitions of any functions declared @code{inline} without @code{extern}. If this macro is defined, GCC supports the @code{gnu_inline} function -attribute as a way to always get the gnu89 behavior. Support for +attribute as a way to always get the gnu90 behavior. Support for this and @code{__GNUC_GNU_INLINE__} was added in GCC 4.1.3. If neither macro is defined, an older version of GCC is being used: -@code{inline} functions will be compiled in gnu89 mode, and the +@code{inline} functions will be compiled in gnu90 mode, and the @code{gnu_inline} function attribute will not be recognized. @item __CHAR_UNSIGNED__ diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi index 2fca3664d8f..78785e076dd 100644 --- a/gcc/doc/cppopts.texi +++ b/gcc/doc/cppopts.texi @@ -374,12 +374,13 @@ knows about C and C++ standards; others may be added in the future. @var{standard} may be one of: @table @code -@item iso9899:1990 +@item c90 @itemx c89 -The ISO C standard from 1990. @samp{c89} is the customary shorthand for +@itemx iso9899:1990 +The ISO C standard from 1990. @samp{c90} is the customary shorthand for this version of the standard. -The @option{-ansi} option is equivalent to @option{-std=c89}. +The @option{-ansi} option is equivalent to @option{-std=c90}. @item iso9899:199409 The 1990 C standard, as amended in 1994. @@ -391,7 +392,8 @@ The 1990 C standard, as amended in 1994. The revised ISO C standard, published in December 1999. Before publication, this was known as C9X@. -@item gnu89 +@item gnu90 +@itemx gnu89 The 1990 C standard plus GNU extensions. This is the default. @item gnu99 diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index ceba1054b82..f471c2318cb 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -21,8 +21,8 @@ These extensions are available in C and Objective-C@. Most of them are also available in C++. @xref{C++ Extensions,,Extensions to the C++ Language}, for extensions that apply @emph{only} to C++. -Some features that are in ISO C99 but not C89 or C++ are also, as -extensions, accepted by GCC in C89 mode and in C++. +Some features that are in ISO C99 but not C90 or C++ are also, as +extensions, accepted by GCC in C90 mode and in C++. @menu * Statement Exprs:: Putting statements and declarations inside expressions. @@ -813,7 +813,7 @@ effects of recomputing it. @cindex @code{ULL} integer suffix ISO C99 supports data types for integers that are at least 64 bits wide, -and as an extension GCC supports them in C89 mode and in C++. +and as an extension GCC supports them in C90 mode and in C++. Simply write @code{long long int} for a signed integer, or @code{unsigned long long int} for an unsigned integer. To make an integer constant of type @code{long long int}, add the suffix @samp{LL} @@ -843,7 +843,7 @@ Likewise, if the function expects @code{long long int} and you pass @cindex @code{__complex__} keyword ISO C99 supports complex floating data types, and as an extension GCC -supports them in C89 mode and in C++, and supports complex integer data +supports them in C90 mode and in C++, and supports complex integer data types which are not part of ISO C99. You can declare complex types using the keyword @code{_Complex}. As an extension, the older GNU keyword @code{__complex__} is also supported. @@ -1032,7 +1032,7 @@ are supported by the DWARF2 debug information format. ISO C99 supports floating-point numbers written not only in the usual decimal notation, such as @code{1.55e1}, but also numbers such as @code{0x1.fp3} written in hexadecimal format. As a GNU extension, GCC -supports this in C89 mode (except in some cases when strictly +supports this in C90 mode (except in some cases when strictly conforming) and in C++. In that format the @samp{0x} hex introducer and the @samp{p} or @samp{P} exponent field are mandatory. The exponent is a decimal number that indicates the power of @@ -1345,7 +1345,7 @@ member of type @code{char}. @cindex VLAs Variable-length automatic arrays are allowed in ISO C99, and as an -extension GCC accepts them in C89 mode and in C++. (However, GCC's +extension GCC accepts them in C90 mode and in C++. (However, GCC's implementation of variable-length arrays does not yet conform in detail to the ISO C99 standard.) These arrays are declared like any other automatic arrays, but with a length that is not @@ -1511,9 +1511,9 @@ In ISO C99, arrays that are not lvalues still decay to pointers, and may be subscripted, although they may not be modified or used after the next sequence point and the unary @samp{&} operator may not be applied to them. As an extension, GCC allows such arrays to be -subscripted in C89 mode, though otherwise they do not decay to +subscripted in C90 mode, though otherwise they do not decay to pointers outside C99 mode. For example, -this is valid in GNU C though not valid in C89: +this is valid in GNU C though not valid in C90: @smallexample @group @@ -1576,7 +1576,7 @@ ISO C99 supports compound literals. A compound literal looks like a cast containing an initializer. Its value is an object of the type specified in the cast, containing the elements specified in the initializer; it is an lvalue. As an extension, GCC supports -compound literals in C89 mode and in C++. +compound literals in C90 mode and in C++. Usually, the specified type is a structure. Assume that @code{struct foo} and @code{structure} are declared as shown: @@ -1646,13 +1646,13 @@ static int z[] = @{1, 0, 0@}; @cindex case labels in initializers @cindex designated initializers -Standard C89 requires the elements of an initializer to appear in a fixed +Standard C90 requires the elements of an initializer to appear in a fixed order, the same as the order of the elements in the array or structure being initialized. In ISO C99 you can give the elements in any order, specifying the array indices or structure field names they apply to, and GNU C allows this as -an extension in C89 mode as well. This extension is not +an extension in C90 mode as well. This extension is not implemented in GNU C++. To specify an array index, write @@ -1869,7 +1869,7 @@ hack ((union foo) x); ISO C99 and ISO C++ allow declarations and code to be freely mixed within compound statements. As an extension, GCC also allows this in -C89 mode. For example, you could do: +C90 mode. For example, you could do: @smallexample int i; @@ -2006,7 +2006,7 @@ if no optimization level was specified. @cindex @code{gnu_inline} function attribute This attribute should be used with a function which is also declared with the @code{inline} keyword. It directs GCC to treat the function -as if it were defined in gnu89 mode even when compiling in C99 or +as if it were defined in gnu90 mode even when compiling in C99 or gnu99 mode. If the function is declared @code{extern}, then this definition of the @@ -3837,7 +3837,7 @@ continue until the end of the line. Many other C implementations allow such comments, and they are included in the 1999 C standard. However, C++ style comments are not recognized if you specify an @option{-std} option specifying a version of ISO C before C99, or @option{-ansi} -(equivalent to @option{-std=c89}). +(equivalent to @option{-std=c90}). @node Dollar Signs @section Dollar Signs in Identifier Names @@ -4938,7 +4938,7 @@ inc (int *a) @} @end smallexample -If you are writing a header file to be included in ISO C89 programs, write +If you are writing a header file to be included in ISO C90 programs, write @code{__inline__} instead of @code{inline}. @xref{Alternate Keywords}. The three types of inlining behave similarly in two important cases: @@ -5001,7 +5001,7 @@ the @samp{always_inline} attribute for the function, like this: inline void foo (const char) __attribute__((always_inline)); @end smallexample -The remainder of this section is specific to GNU C89 inlining. +The remainder of this section is specific to GNU C90 inlining. @cindex non-static inline function When an inline function is not @code{static}, then the compiler must assume @@ -6844,7 +6844,7 @@ be emitted. @opindex ansi @opindex std -Outside strict ISO C mode (@option{-ansi}, @option{-std=c89} or +Outside strict ISO C mode (@option{-ansi}, @option{-std=c90} or @option{-std=c99}), the functions @code{_exit}, @code{alloca}, @code{bcmp}, @code{bzero}, @code{dcgettext}, @code{dgettext}, @code{dremf}, @code{dreml}, @@ -6867,7 +6867,7 @@ Outside strict ISO C mode (@option{-ansi}, @option{-std=c89} or @code{yn} may be handled as built-in functions. All these functions have corresponding versions -prefixed with @code{__builtin_}, which may be used even in strict C89 +prefixed with @code{__builtin_}, which may be used even in strict C90 mode. The ISO C99 functions @@ -6911,7 +6911,7 @@ The ISO C99 functions @code{tgamma}, @code{truncf}, @code{truncl}, @code{trunc}, @code{vfscanf}, @code{vscanf}, @code{vsnprintf} and @code{vsscanf} are handled as built-in functions -except in strict ISO C90 mode (@option{-ansi} or @option{-std=c89}). +except in strict ISO C90 mode (@option{-ansi} or @option{-std=c90}). There are also built-in versions of the ISO C99 functions @code{acosf}, @code{acosl}, @code{asinf}, @code{asinl}, @code{atan2f}, @@ -6933,7 +6933,7 @@ The ISO C94 functions @code{iswspace}, @code{iswupper}, @code{iswxdigit}, @code{towlower} and @code{towupper} are handled as built-in functions -except in strict ISO C90 mode (@option{-ansi} or @option{-std=c89}). +except in strict ISO C90 mode (@option{-ansi} or @option{-std=c90}). The ISO C90 functions @code{abort}, @code{abs}, @code{acos}, @code{asin}, @code{atan2}, diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 0a50d6a6007..5caaf9f85af 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4126,11 +4126,11 @@ release. Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or newer: @command{g++} will complain that types are missing. These headers assume that omitting the type means @code{int}; this assumption worked for -C89 but is wrong for C++, and is now wrong for C99 also. +C90 but is wrong for C++, and is now wrong for C99 also. @command{g++} accepts such (invalid) constructs with the option @option{-fpermissive}; it will assume that any missing type is @code{int} -(as defined by C89). +(as defined by C90). There are patches for Solaris 7 (108376-21 or newer for SPARC, 108377-20 for Intel), and Solaris 8 (108652-24 or newer for SPARC, diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 4067d4862ef..6a6bd92024e 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1425,7 +1425,7 @@ accepts: @cindex ISO support @item -ansi @opindex ansi -In C mode, this is equivalent to @samp{-std=c89}. In C++ mode, it is +In C mode, this is equivalent to @samp{-std=c90}. In C++ mode, it is equivalent to @samp{-std=c++98}. This turns off certain features of GCC that are incompatible with ISO @@ -1467,12 +1467,12 @@ Determine the language standard. @xref{Standards,,Language Standards Supported by GCC}, for details of these standard versions. This option is currently only supported when compiling C or C++. -The compiler can accept several base standards, such as @samp{c89} or +The compiler can accept several base standards, such as @samp{c90} or @samp{c++98}, and GNU dialects of those standards, such as -@samp{gnu89} or @samp{gnu++98}. By specifying a base standard, the +@samp{gnu90} or @samp{gnu++98}. By specifying a base standard, the compiler will accept all programs following that standard and those using GNU extensions that do not contradict it. For example, -@samp{-std=c89} turns off certain features of GCC that are +@samp{-std=c90} turns off certain features of GCC that are incompatible with ISO C90, such as the @code{asm} and @code{typeof} keywords, but not other GNU extensions that do not have a meaning in ISO C90, such as omitting the middle term of a @code{?:} @@ -1482,13 +1482,14 @@ those features change the meaning of the base standard and some strict-conforming programs may be rejected. The particular standard is used by @option{-pedantic} to identify which features are GNU extensions given that version of the standard. For example -@samp{-std=gnu89 -pedantic} would warn about C++ style @samp{//} +@samp{-std=gnu90 -pedantic} would warn about C++ style @samp{//} comments, while @samp{-std=gnu99 -pedantic} would not. A value for this option must be provided; possible values are @table @samp -@item c89 +@item c90 +@itemx c89 @itemx iso9899:1990 Support all ISO C90 programs (certain GNU extensions that conflict with ISO C90 are disabled). Same as @option{-ansi} for C code. @@ -1504,7 +1505,8 @@ ISO C99. Note that this standard is not yet fully supported; see @w{@uref{http://gcc.gnu.org/c99status.html}} for more information. The names @samp{c9x} and @samp{iso9899:199x} are deprecated. -@item gnu89 +@item gnu90 +@itemx gnu89 GNU dialect of ISO C90 (including some C99 features). This is the default for C code. @@ -1547,7 +1549,8 @@ C99 mode. Using this option is roughly equivalent to adding the The option @option{-fno-gnu89-inline} explicitly tells GCC to use the C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it specifies the default behavior). This option was first supported in -GCC 4.3. This option is not supported in C89 or gnu89 mode. +GCC 4.3. This option is not supported in @option{-std=c90} or +@option{-std=gnu90} mode. The preprocessor macros @code{__GNUC_GNU_INLINE__} and @code{__GNUC_STDC_INLINE__} may be used to check which semantics are @@ -2842,7 +2845,7 @@ be quite different from @option{-pedantic}. We don't have plans to support such a feature in the near future. Where the standard specified with @option{-std} represents a GNU -extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a +extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a corresponding @dfn{base standard}, the version of ISO C on which the GNU extended dialect is based. Warnings from @option{-pedantic} are given where they are required by the base standard. (It would not make sense @@ -4342,7 +4345,7 @@ standard's minimum limit, but very portable programs should avoid using longer strings. The limit applies @emph{after} string constant concatenation, and does -not count the trailing NUL@. In C89, the limit was 509 characters; in +not count the trailing NUL@. In C90, the limit was 509 characters; in C99, it was raised to 4095. C++98 does not specify a normative minimum maximum, so we do not diagnose overlength strings in C++@. @@ -5955,7 +5958,7 @@ release to an another. In C, emit @code{static} functions that are declared @code{inline} into the object file, even if the function has been inlined into all of its callers. This switch does not affect functions using the -@code{extern inline} extension in GNU C89@. In C++, emit any and all +@code{extern inline} extension in GNU C90@. In C++, emit any and all inline functions into the object file. @item -fkeep-static-consts diff --git a/gcc/doc/standards.texi b/gcc/doc/standards.texi index 6886dacf804..d71cc160143 100644 --- a/gcc/doc/standards.texi +++ b/gcc/doc/standards.texi @@ -63,7 +63,7 @@ This standard, in both its forms, is commonly known as @dfn{C89}, or occasionally as @dfn{C90}, from the dates of ratification. The ANSI standard, but not the ISO standard, also came with a Rationale document. To select this standard in GCC, use one of the options -@option{-ansi}, @option{-std=c89} or @option{-std=iso9899:1990}; to obtain +@option{-ansi}, @option{-std=c90} or @option{-std=iso9899:1990}; to obtain all the diagnostics required by the standard, you should also specify @option{-pedantic} (or @option{-pedantic-errors} if you want them to be errors rather than warnings). @xref{C Dialect Options,,Options @@ -99,12 +99,12 @@ Extensions,,Extensions to the C Language Family}. Use of the @option{-std} options listed above will disable these extensions where they conflict with the C standard version selected. You may also select an extended version of the C language explicitly with -@option{-std=gnu89} (for C89 with GNU extensions) or @option{-std=gnu99} +@option{-std=gnu90} (for C90 with GNU extensions) or @option{-std=gnu99} (for C99 with GNU extensions). The default, if no C language dialect -options are given, is @option{-std=gnu89}; this will change to +options are given, is @option{-std=gnu90}; this will change to @option{-std=gnu99} in some future release when the C99 support is complete. Some features that are part of the C99 standard are -accepted as extensions in C89 mode. +accepted as extensions in C90 mode. The ISO C standard defines (in clause 4) two classes of conforming implementation. A @dfn{conforming hosted implementation} supports the diff --git a/gcc/doc/trouble.texi b/gcc/doc/trouble.texi index c08e8b31b88..097946b2d49 100644 --- a/gcc/doc/trouble.texi +++ b/gcc/doc/trouble.texi @@ -467,7 +467,7 @@ requires that this be treated as erroneous. A @dfn{preprocessing token} is a @dfn{preprocessing number} if it begins with a digit and is followed by letters, underscores, digits, periods and @samp{e+}, @samp{e-}, @samp{E+}, @samp{E-}, @samp{p+}, -@samp{p-}, @samp{P+}, or @samp{P-} character sequences. (In strict C89 +@samp{p-}, @samp{P+}, or @samp{P-} character sequences. (In strict C90 mode, the sequences @samp{p+}, @samp{p-}, @samp{P+} and @samp{P-} cannot appear in preprocessing numbers.) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ea4404d6149..019a391918a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2010-02-26 Manuel López-Ibáñez + + PR c/20631 + * gcc.dg/cpp/c90-pedantic.c: New. + * gcc.dg/cpp/c90.c: New. + * gcc.dg/gnu90-const-expr-1.c: New. + * gcc.dg/Woverlength-strings-pedantic-c90.c: New. + 2010-02-26 Richard Guenther PR tree-optimization/43186 diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90.c new file mode 100644 index 00000000000..94264f3b14d --- /dev/null +++ b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90.c @@ -0,0 +1,19 @@ +/* -Woverlength-strings complains about string constants which are too long + for the C standard's "minimum maximum" limits. It is off by default, + but implied by -pedantic. */ + +/* { dg-options "-std=c90 -pedantic" } */ + +#define TEN "xxxxxxxxxx" +#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN +#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN + +/* C89's minimum-maximum is 509. */ +const char x510[] = HUN HUN HUN HUN HUN TEN; /* { dg-warning "greater than" } */ + +/* C99's minimum-maximum is 4095. */ +const char x4096[] = + THO THO THO THO /* 4000 */ + TEN TEN TEN TEN TEN /* 4050 */ + TEN TEN TEN TEN /* 4090 */ + "123456"; /* { dg-warning "greater than" } */ diff --git a/gcc/testsuite/gcc.dg/cpp/c90-pedantic.c b/gcc/testsuite/gcc.dg/cpp/c90-pedantic.c new file mode 100644 index 00000000000..3d6c82fc885 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/c90-pedantic.c @@ -0,0 +1,10 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. */ + +/* { dg-do preprocess } */ +/* { dg-options "-std=c90 -pedantic" } */ + +/* This file is for testing the preprocessor in -std=c90 -pedantic mode. + Neil Booth, 2 Dec 2000. */ + +#if 1LL /* { dg-warning "long long" } */ +#endif diff --git a/gcc/testsuite/gcc.dg/cpp/c90.c b/gcc/testsuite/gcc.dg/cpp/c90.c new file mode 100644 index 00000000000..d8656c36446 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/c90.c @@ -0,0 +1,10 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. */ + +/* { dg-do preprocess } */ +/* { dg-options "-std=c90" } */ + +/* This file is for testing the preprocessor in -std=c90 mode. + Neil Booth, 2 Dec 2000. */ + +#if 1LL +#endif diff --git a/gcc/testsuite/gcc.dg/gnu90-const-expr-1.c b/gcc/testsuite/gcc.dg/gnu90-const-expr-1.c new file mode 100644 index 00000000000..3f7f1af5de0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gnu90-const-expr-1.c @@ -0,0 +1,56 @@ +/* Test for constant expressions: GNU extensions. */ +/* Origin: Joseph Myers */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu90 -pedantic-errors" } */ + +int n; + +void +f (void) +{ + int i = 0; + int a[n]; /* { dg-error "ISO C90 forbids variable length array" } */ + enum e1 { + /* Integer constant expressions may not contain statement + expressions (not a permitted operand). */ + E1 = (1 ? 0 : ({ 0; })), /* { dg-error "constant expression" } */ + /* { dg-error "ISO C forbids braced-groups" "ISO" { target *-*-* } 16 } */ + /* Real and imaginary parts act like other arithmetic + operators. */ + E2 = __real__ (1 ? 0 : i++), /* { dg-error "constant expression" } */ + E3 = __real__ 0, + E4 = __imag__ (1 ? 0 : i++), /* { dg-error "constant" } */ + E5 = __imag__ 0, + /* __alignof__ always constant. */ + E6 = __alignof__ (int[n]), /* { dg-error "ISO C90 forbids variable length array" } */ + E7 = __alignof__ (a), + /* __extension__ ignored for constant expression purposes. */ + E8 = __extension__ (1 ? 0 : i++), /* { dg-error "constant expression" } */ + E9 = __extension__ 0, + /* Conditional expressions with omitted arguments act like the + standard type. */ + E10 = (1 ? : i++), /* { dg-error "constant expression" } */ + /* { dg-error "ISO C forbids omitting" "ISO" { target *-*-* } 32 } */ + E11 = (1 ? : 0) /* { dg-error "ISO C forbids omitting" } */ + }; + enum e2 { + /* Complex integer constants may be cast directly to integer + types, but not after further arithmetic on them. */ + F1 = (int) (_Complex int) 2i, /* { dg-error "constant expression" } */ + /* { dg-error "complex" "complex" { target *-*-* } 39 } */ + /* { dg-error "imaginary" "imaginary" { target *-*-* } 39 } */ + F2 = (int) +2i, /* { dg-error "constant expression" } */ + /* { dg-error "imaginary" "ISO" { target *-*-* } 42 } */ + F3 = (int) (1 + 2i), /* { dg-error "constant expression" } */ + /* { dg-error "imaginary" "ISO" { target *-*-* } 44 } */ + F4 = (int) 2i /* { dg-error "imaginary" } */ + }; + static double dr = __real__ (1.0 + 2.0i); + /* { dg-error "imaginary" "ISO" { target *-*-* } 48 } */ + static double di = __imag__ (1.0 + 2.0i); + /* { dg-error "imaginary" "ISO" { target *-*-* } 50 } */ + /* Statement expressions allowed in unevaluated subexpressions in + initializers in gnu99 but not gnu89. */ + static int j = (1 ? 0 : ({ 0; })); /* { dg-error "constant expression" } */ + /* { dg-error "braced" "ISO" { target *-*-* } 54 } */ +} -- 2.11.0