diff -Nrcpad gcc-4.0.3/boehm-gc/ChangeLog gcc-4.0.4/boehm-gc/ChangeLog
*** gcc-4.0.3/boehm-gc/ChangeLog 2006-03-09 20:45:09.000000000 +0000
--- gcc-4.0.4/boehm-gc/ChangeLog 2007-01-31 10:25:12.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/BUGS gcc-4.0.4/BUGS
*** gcc-4.0.3/BUGS 2006-03-09 20:48:44.000000000 +0000
--- gcc-4.0.4/BUGS 2007-01-31 10:32:49.000000000 +0000
***************
*** 1,7 ****
GCC Bugs
! The latest version of this document is always available at
[1]http://gcc.gnu.org/bugs.html.
_________________________________________________________________
--- 1,7 ----
GCC Bugs
! The latest version of this document is always available at
[1]http://gcc.gnu.org/bugs.html.
_________________________________________________________________
*************** Table of Contents
*** 13,19 ****
+ [5]Where to post it
+ [6]Detailed bug reporting instructions
+ [7]Detailed bug reporting instructions for GNAT
! + [8]Detailed bug reporting instructions when using a
precompiled header
* [9]Frequently Reported Bugs in GCC
+ [10]C++
--- 13,19 ----
+ [5]Where to post it
+ [6]Detailed bug reporting instructions
+ [7]Detailed bug reporting instructions for GNAT
! + [8]Detailed bug reporting instructions when using a
precompiled header
* [9]Frequently Reported Bugs in GCC
+ [10]C++
*************** Table of Contents
*** 29,65 ****
Reporting Bugs
! The main purpose of a bug report is to enable us to fix the bug. The
! most important prerequisite for this is that the report must be
complete and self-contained.
! Before you report a bug, please check the [19]list of well-known bugs
! and, if possible, try a current development snapshot. If you want to
! report a bug with versions of GCC before 3.4 we strongly recommend
upgrading to the current release first.
! Before reporting that GCC compiles your code incorrectly, please
! compile it with gcc -Wall and see whether this shows anything wrong
with your code that could be the cause instead of a bug in GCC.
Summarized bug reporting instructions
! After this summary, you'll find detailed bug reporting instructions,
! that explain how to obtain some of the information requested in this
summary.
What we need
! Please include in your bug report all of the following items, the
first three of which can be obtained from the output of gcc -v:
* the exact version of GCC;
* the system type;
* the options given when GCC was configured/built;
* the complete command line that triggers the bug;
* the compiler output (error messages, warnings, etc.); and
! * the preprocessed file (*.i*) that triggers the bug, generated by
adding -save-temps to the complete compilation command, or, in the
! case of a bug report for the GNAT front end, a complete set of
source files (see below).
What we do not want
--- 29,65 ----
Reporting Bugs
! The main purpose of a bug report is to enable us to fix the bug. The
! most important prerequisite for this is that the report must be
complete and self-contained.
! Before you report a bug, please check the [19]list of well-known bugs
! and, if possible, try a current development snapshot. If you want to
! report a bug with versions of GCC before 3.4 we strongly recommend
upgrading to the current release first.
! Before reporting that GCC compiles your code incorrectly, please
! compile it with gcc -Wall and see whether this shows anything wrong
with your code that could be the cause instead of a bug in GCC.
Summarized bug reporting instructions
! After this summary, you'll find detailed bug reporting instructions,
! that explain how to obtain some of the information requested in this
summary.
What we need
! Please include in your bug report all of the following items, the
first three of which can be obtained from the output of gcc -v:
* the exact version of GCC;
* the system type;
* the options given when GCC was configured/built;
* the complete command line that triggers the bug;
* the compiler output (error messages, warnings, etc.); and
! * the preprocessed file (*.i*) that triggers the bug, generated by
adding -save-temps to the complete compilation command, or, in the
! case of a bug report for the GNAT front end, a complete set of
source files (see below).
What we do not want
*************** Summarized bug reporting instructions
*** 67,199 ****
* A source file that #includes header files that are left out of the
bug report (see above)
* That source file and a collection of header files.
! * An attached archive (tar, zip, shar, whatever) containing all (or
some :-) of the above.
! * A code snippet that won't cause the compiler to produce the exact
! output mentioned in the bug report (e.g., a snippet with just a
! few lines around the one that apparently triggers the bug, with
! some pieces replaced with ellipses or comments for extra
obfuscation :-)
! * The location (URL) of the package that failed to build (we won't
download it, anyway, since you've already given us what we need to
duplicate the bug, haven't you? :-)
! * An error that occurs only some of the times a certain file is
! compiled, such that retrying a sufficient number of times results
! in a successful compilation; this is a symptom of a hardware
problem, not of a compiler bug (sorry)
! * Assembly files (*.s) produced by the compiler, or any binary
! files, such as object files, executables, core files, or
precompiled header files
! * Duplicate bug reports, or reports of bugs already fixed in the
development tree, especially those that have already been reported
as fixed last week :-)
! * Bugs in the assembler, the linker or the C library. These are
! separate projects, with separate mailing lists and different bug
reporting procedures
! * Bugs in releases or snapshots of GCC not issued by the GNU
Project. Report them to whoever provided you with the release
! * Questions about the correctness or the expected behavior of
certain constructs that are not GCC extensions. Ask them in forums
dedicated to the discussion of the programming language
Where to post it
! Please submit your bug report directly to the [20]GCC bug database.
! Alternatively, you can use the gccbug script that mails your bug
report to the bug database.
! Only if all this is absolutely impossible, mail all information to
[21]gcc-bugs@gcc.gnu.org.
Detailed bug reporting instructions
! Please refer to the [22]next section when reporting bugs in GNAT, the
! Ada compiler, or to the [23]one after that when reporting bugs that
appear when using a precompiled header.
! In general, all the information we need can be obtained by collecting
! the command line below, as well as its output and the preprocessed
file it generates.
gcc -v -save-temps all-your-options source-file
! The only excuses to not send us the preprocessed sources are (i) if
! you've found a bug in the preprocessor, (ii) if you've reduced the
! testcase to a small file that doesn't include any other file or (iii)
! if the bug appears only when using precompiled headers. If you can't
! post the preprocessed sources because they're proprietary code, then
try to create a small file that triggers the same problem.
! Since we're supposed to be able to re-create the assembly output
! (extension .s), you usually should not include it in the bug report,
! although you may want to post parts of it to point out assembly code
you consider to be wrong.
! Please avoid posting an archive (.tar, .shar or .zip); we generally
! need just a single file to reproduce the bug (the .i/.ii/.f
! preprocessed file), and, by storing it in an archive, you're just
making our volunteers' jobs harder. Only when your bug report requires
multiple source files to be reproduced should you use an archive. This
! is, for example, the case if you are using INCLUDE directives in
! Fortran code, which are not processed by the preprocessor, but the
! compiler. In that case, we need the main file and all INCLUDEd files.
! In any case, make sure the compiler version, error message, etc, are
! included in the body of your bug report as plain text, even if
needlessly duplicated as part of an archive.
Detailed bug reporting instructions for GNAT
! See the [24]previous section for bug reporting instructions for GCC
language implementations other than Ada.
! Bug reports have to contain at least the following information in
order to be useful:
* the exact version of GCC, as shown by "gcc -v";
* the system type;
* the options when GCC was configured/built;
! * the exact command line passed to the gcc program triggering the
! bug (not just the flags passed to gnatmake, but gnatmake prints
the parameters it passed to gcc)
* a collection of source files for reproducing the bug, preferably a
minimal set (see below);
* a description of the expected behavior;
* a description of actual behavior.
! If your code depends on additional source files (usually package
specifications), submit the source code for these compilation units in
! a single file that is acceptable input to gnatchop, i.e. contains no
! non-Ada text. If the compilation terminated normally, you can usually
obtain a list of dependencies using the "gnatls -d main_unit" command,
! where main_unit is the file name of the main compilation unit (which
is also passed to gcc).
! If you report a bug which causes the compiler to print a bug box,
include that bug box in your report, and do not forget to send all the
source files listed after the bug box along with your report.
! If you use gnatprep, be sure to send in preprocessed sources (unless
you have to report a bug in gnatprep).
! When you have checked that your report meets these criteria, please
! submit it according to our [25]generic instructions. (If you use a
! mailing list for reporting, please include an "[Ada]" tag in the
subject.)
Detailed bug reporting instructions when using a precompiled header
! If you're encountering a bug when using a precompiled header, the
first thing to do is to delete the precompiled header, and try running
! the same GCC command again. If the bug happens again, the bug doesn't
! really involve precompiled headers, please report it without using
them by following the instructions [26]above.
! If you've found a bug while building a precompiled header (for
! instance, the compiler crashes), follow the usual instructions
[27]above.
! If you've found a real precompiled header bug, what we'll need to
! reproduce it is the sources to build the precompiled header (as a
single .i file), the source file that uses the precompiled header, any
! other headers that source file includes, and the command lines that
you used to build the precompiled header and to use it.
Please don't send us the actual precompiled header. It is likely to be
--- 67,199 ----
* A source file that #includes header files that are left out of the
bug report (see above)
* That source file and a collection of header files.
! * An attached archive (tar, zip, shar, whatever) containing all (or
some :-) of the above.
! * A code snippet that won't cause the compiler to produce the exact
! output mentioned in the bug report (e.g., a snippet with just a
! few lines around the one that apparently triggers the bug, with
! some pieces replaced with ellipses or comments for extra
obfuscation :-)
! * The location (URL) of the package that failed to build (we won't
download it, anyway, since you've already given us what we need to
duplicate the bug, haven't you? :-)
! * An error that occurs only some of the times a certain file is
! compiled, such that retrying a sufficient number of times results
! in a successful compilation; this is a symptom of a hardware
problem, not of a compiler bug (sorry)
! * Assembly files (*.s) produced by the compiler, or any binary
! files, such as object files, executables, core files, or
precompiled header files
! * Duplicate bug reports, or reports of bugs already fixed in the
development tree, especially those that have already been reported
as fixed last week :-)
! * Bugs in the assembler, the linker or the C library. These are
! separate projects, with separate mailing lists and different bug
reporting procedures
! * Bugs in releases or snapshots of GCC not issued by the GNU
Project. Report them to whoever provided you with the release
! * Questions about the correctness or the expected behavior of
certain constructs that are not GCC extensions. Ask them in forums
dedicated to the discussion of the programming language
Where to post it
! Please submit your bug report directly to the [20]GCC bug database.
! Alternatively, you can use the gccbug script that mails your bug
report to the bug database.
! Only if all this is absolutely impossible, mail all information to
[21]gcc-bugs@gcc.gnu.org.
Detailed bug reporting instructions
! Please refer to the [22]next section when reporting bugs in GNAT, the
! Ada compiler, or to the [23]one after that when reporting bugs that
appear when using a precompiled header.
! In general, all the information we need can be obtained by collecting
! the command line below, as well as its output and the preprocessed
file it generates.
gcc -v -save-temps all-your-options source-file
! The only excuses to not send us the preprocessed sources are (i) if
! you've found a bug in the preprocessor, (ii) if you've reduced the
! testcase to a small file that doesn't include any other file or (iii)
! if the bug appears only when using precompiled headers. If you can't
! post the preprocessed sources because they're proprietary code, then
try to create a small file that triggers the same problem.
! Since we're supposed to be able to re-create the assembly output
! (extension .s), you usually should not include it in the bug report,
! although you may want to post parts of it to point out assembly code
you consider to be wrong.
! Please avoid posting an archive (.tar, .shar or .zip); we generally
! need just a single file to reproduce the bug (the .i/.ii/.f
! preprocessed file), and, by storing it in an archive, you're just
making our volunteers' jobs harder. Only when your bug report requires
multiple source files to be reproduced should you use an archive. This
! is, for example, the case if you are using INCLUDE directives in
! Fortran code, which are not processed by the preprocessor, but the
! compiler. In that case, we need the main file and all INCLUDEd files.
! In any case, make sure the compiler version, error message, etc, are
! included in the body of your bug report as plain text, even if
needlessly duplicated as part of an archive.
Detailed bug reporting instructions for GNAT
! See the [24]previous section for bug reporting instructions for GCC
language implementations other than Ada.
! Bug reports have to contain at least the following information in
order to be useful:
* the exact version of GCC, as shown by "gcc -v";
* the system type;
* the options when GCC was configured/built;
! * the exact command line passed to the gcc program triggering the
! bug (not just the flags passed to gnatmake, but gnatmake prints
the parameters it passed to gcc)
* a collection of source files for reproducing the bug, preferably a
minimal set (see below);
* a description of the expected behavior;
* a description of actual behavior.
! If your code depends on additional source files (usually package
specifications), submit the source code for these compilation units in
! a single file that is acceptable input to gnatchop, i.e. contains no
! non-Ada text. If the compilation terminated normally, you can usually
obtain a list of dependencies using the "gnatls -d main_unit" command,
! where main_unit is the file name of the main compilation unit (which
is also passed to gcc).
! If you report a bug which causes the compiler to print a bug box,
include that bug box in your report, and do not forget to send all the
source files listed after the bug box along with your report.
! If you use gnatprep, be sure to send in preprocessed sources (unless
you have to report a bug in gnatprep).
! When you have checked that your report meets these criteria, please
! submit it according to our [25]generic instructions. (If you use a
! mailing list for reporting, please include an "[Ada]" tag in the
subject.)
Detailed bug reporting instructions when using a precompiled header
! If you're encountering a bug when using a precompiled header, the
first thing to do is to delete the precompiled header, and try running
! the same GCC command again. If the bug happens again, the bug doesn't
! really involve precompiled headers, please report it without using
them by following the instructions [26]above.
! If you've found a bug while building a precompiled header (for
! instance, the compiler crashes), follow the usual instructions
[27]above.
! If you've found a real precompiled header bug, what we'll need to
! reproduce it is the sources to build the precompiled header (as a
single .i file), the source file that uses the precompiled header, any
! other headers that source file includes, and the command lines that
you used to build the precompiled header and to use it.
Please don't send us the actual precompiled header. It is likely to be
*************** Detailed bug reporting instructions when
*** 202,215 ****
Frequently Reported Bugs in GCC
! This is a list of bugs in GCC that are reported very often, but not
! yet fixed. While it is certainly better to fix bugs instead of
! documenting them, this document might save people the effort of
writing a bug report when the bug is already well-known.
! There are many reasons why a reported bug doesn't get fixed. It might
! be difficult to fix, or fixing it might break compatibility. Often,
! reports get a low priority when there is a simple work-around. In
particular, bugs caused by invalid code have a simple work-around: fix
the code.
_________________________________________________________________
--- 202,215 ----
Frequently Reported Bugs in GCC
! This is a list of bugs in GCC that are reported very often, but not
! yet fixed. While it is certainly better to fix bugs instead of
! documenting them, this document might save people the effort of
writing a bug report when the bug is already well-known.
! There are many reasons why a reported bug doesn't get fixed. It might
! be difficult to fix, or fixing it might break compatibility. Often,
! reports get a low priority when there is a simple work-around. In
particular, bugs caused by invalid code have a simple work-around: fix
the code.
_________________________________________________________________
*************** C++
*** 219,239 ****
Missing features
The export keyword is not implemented.
! Most C++ compilers (G++ included) do not yet implement export,
! which is necessary for separate compilation of template
! declarations and definitions. Without export, a template
! definition must be in scope to be used. The obvious workaround
! is simply to place all definitions in the header itself.
! Alternatively, the compilation unit containing template
definitions may be included from the header.
Bugs fixed in the 3.4 series
! The following bugs are present up to (and including) GCC 3.3.x. They
have been fixed in 3.4.0.
Two-stage name-lookup.
! GCC did not implement two-stage name-lookup (also see
[28]below).
Covariant return types.
--- 219,239 ----
Missing features
The export keyword is not implemented.
! Most C++ compilers (G++ included) do not yet implement export,
! which is necessary for separate compilation of template
! declarations and definitions. Without export, a template
! definition must be in scope to be used. The obvious workaround
! is simply to place all definitions in the header itself.
! Alternatively, the compilation unit containing template
definitions may be included from the header.
Bugs fixed in the 3.4 series
! The following bugs are present up to (and including) GCC 3.3.x. They
have been fixed in 3.4.0.
Two-stage name-lookup.
! GCC did not implement two-stage name-lookup (also see
[28]below).
Covariant return types.
*************** A bar()
*** 262,318 ****
return (A()); // return A temporary
}
! Although being valid code, each of the three lines with a
! comment was rejected by GCC. The work-arounds for older
compiler versions proposed below do not change the semantics of
the programs at all.
The problem in the first case was that GCC started to parse the
! declaration of b as a function called b returning B, taking a
function returning A as an argument. When it encountered the 1,
! it was too late. To show the compiler that this should be
! really an expression, a comma operator with a dummy argument
could be used:
B b((0,A()),A(1));
! The work-around for simpler cases like the second one was to
! add additional parentheses around the expressions that were
mistaken as declarations:
(B(A(2))).foo();
In the third case, however, additional parentheses were causing
! the problems: The compiler interpreted A() as a function
(taking no arguments, returning A), and (A()) as a cast lacking
! an expression to be casted, hence the parse error. The
work-around was to omit the parentheses:
return A();
! This problem occurred in a number of variants; in throw
! statements, people also frequently put the object in
parentheses.
_________________________________________________________________
Fortran
! Fortran bugs are documented in the G77 manual rather than explicitly
! listed here. Please see [29]Known Causes of Trouble with GNU Fortran
in the G77 manual.
_________________________________________________________________
Non-bugs
! The following are not actually bugs, but are reported often enough to
warrant a mention here.
! It is not always a bug in the compiler, if code which "worked" in a
! previous version, is now rejected. Earlier versions of GCC sometimes
were less picky about standard conformance and accepted invalid source
! code. In addition, programming languages themselves change, rendering
! code invalid that used to be conforming (this holds especially for
! C++). In either case, you should update your code to match recent
language standards.
_________________________________________________________________
--- 262,318 ----
return (A()); // return A temporary
}
! Although being valid code, each of the three lines with a
! comment was rejected by GCC. The work-arounds for older
compiler versions proposed below do not change the semantics of
the programs at all.
The problem in the first case was that GCC started to parse the
! declaration of b as a function called b returning B, taking a
function returning A as an argument. When it encountered the 1,
! it was too late. To show the compiler that this should be
! really an expression, a comma operator with a dummy argument
could be used:
B b((0,A()),A(1));
! The work-around for simpler cases like the second one was to
! add additional parentheses around the expressions that were
mistaken as declarations:
(B(A(2))).foo();
In the third case, however, additional parentheses were causing
! the problems: The compiler interpreted A() as a function
(taking no arguments, returning A), and (A()) as a cast lacking
! an expression to be casted, hence the parse error. The
work-around was to omit the parentheses:
return A();
! This problem occurred in a number of variants; in throw
! statements, people also frequently put the object in
parentheses.
_________________________________________________________________
Fortran
! G77 bugs are documented in the G77 manual rather than explicitly
! listed here. Please see [29]Known Causes of Trouble with GNU Fortran
in the G77 manual.
_________________________________________________________________
Non-bugs
! The following are not actually bugs, but are reported often enough to
warrant a mention here.
! It is not always a bug in the compiler, if code which "worked" in a
! previous version, is now rejected. Earlier versions of GCC sometimes
were less picky about standard conformance and accepted invalid source
! code. In addition, programming languages themselves change, rendering
! code invalid that used to be conforming (this holds especially for
! C++). In either case, you should update your code to match recent
language standards.
_________________________________________________________________
*************** General
*** 320,326 ****
Problems with floating point numbers - the [30]most often reported
non-bug.
! In a number of cases, GCC appears to perform floating point
computations incorrectly. For example, the C++ program
#include
--- 320,326 ----
Problems with floating point numbers - the [30]most often reported
non-bug.
! In a number of cases, GCC appears to perform floating point
computations incorrectly. For example, the C++ program
#include
*************** int main()
*** 333,348 ****
return 0;
}
! might print 50 on some systems and optimization levels, and 49
on others.
! This is the result of rounding: The computer cannot represent
all real numbers exactly, so it has to use approximations. When
! computing with approximation, the computer needs to round to
the nearest representable number.
! This is not a bug in the compiler, but an inherent limitation
! of the floating point types. Please study [31]this paper for
more information.
_________________________________________________________________
--- 333,348 ----
return 0;
}
! might print 50 on some systems and optimization levels, and 49
on others.
! This is the result of rounding: The computer cannot represent
all real numbers exactly, so it has to use approximations. When
! computing with approximation, the computer needs to round to
the nearest representable number.
! This is not a bug in the compiler, but an inherent limitation
! of the floating point types. Please study [31]this paper for
more information.
_________________________________________________________________
*************** foo(i,++i)
*** 357,370 ****
i*(++i) /* special case with foo=="operator*" */
std::cout << i << ++i /* foo(foo(std::cout,i),++i) */
! since the i without increment can be evaluated before or after
++i.
! The C and C++ standards have the notion of "sequence points".
! Everything that happens between two sequence points happens in
! an unspecified order, but it has to happen after the first and
! before the second sequence point. The end of a statement and a
! function call are examples for sequence points, whereas
assignments and the comma between function arguments are not.
Modifying a value twice between two sequence points as shown in
--- 357,370 ----
i*(++i) /* special case with foo=="operator*" */
std::cout << i << ++i /* foo(foo(std::cout,i),++i) */
! since the i without increment can be evaluated before or after
++i.
! The C and C++ standards have the notion of "sequence points".
! Everything that happens between two sequence points happens in
! an unspecified order, but it has to happen after the first and
! before the second sequence point. The end of a statement and a
! function call are examples for sequence points, whereas
assignments and the comma between function arguments are not.
Modifying a value twice between two sequence points as shown in
*************** foo(++i,++i)
*** 375,389 ****
(++i)*(++i) /* special case with foo=="operator*" */
std::cout << ++i << ++i /* foo(foo(std::cout,++i),++i) */
! This leads to undefined behavior (i.e. the compiler can do
anything).
Casting does not work as expected when optimization is turned on.
! This is often caused by a violation of aliasing rules, which
! are part of the ISO C standard. These rules say that a program
is invalid if you try to access a variable through a pointer of
! an incompatible type. This is happening in the following
! example where a short is accessed through a pointer to integer
(the code assumes 16-bit shorts and 32-bit ints):
#include
--- 375,389 ----
(++i)*(++i) /* special case with foo=="operator*" */
std::cout << ++i << ++i /* foo(foo(std::cout,++i),++i) */
! This leads to undefined behavior (i.e. the compiler can do
anything).
Casting does not work as expected when optimization is turned on.
! This is often caused by a violation of aliasing rules, which
! are part of the ISO C standard. These rules say that a program
is invalid if you try to access a variable through a pointer of
! an incompatible type. This is happening in the following
! example where a short is accessed through a pointer to integer
(the code assumes 16-bit shorts and 32-bit ints):
#include
*************** int main()
*** 401,435 ****
return 0;
}
! The aliasing rules were designed to allow compilers more
! aggressive optimization. Basically, a compiler can assume that
! all changes to variables happen through pointers or references
! to variables of a type compatible to the accessed variable.
! Dereferencing a pointer that violates the aliasing rules
results in undefined behavior.
! In the case above, the compiler may assume that no access
! through an integer pointer can change the array a, consisting
! of shorts. Thus, printf may be called with the original values
of a[0] and a[1]. What really happens is up to the compiler and
may change with architecture and optimization level.
! Recent versions of GCC turn on the option -fstrict-aliasing
! (which allows alias-based optimizations) by default with -O2.
And some architectures then really print "1111 1111" as result.
! Without optimization the executable will generate the
"expected" output "2222 2222".
! To disable optimizations based on alias-analysis for faulty
! legacy code, the option -fno-strict-aliasing can be used as a
work-around.
The option -Wstrict-aliasing (which is included in -Wall) warns
about some - but not all - cases of violation of aliasing rules
when -fstrict-aliasing is active.
! To fix the code above, you can use a union instead of a cast
! (note that this is a GCC extension which might not work with
other compilers):
#include
--- 401,435 ----
return 0;
}
! The aliasing rules were designed to allow compilers more
! aggressive optimization. Basically, a compiler can assume that
! all changes to variables happen through pointers or references
! to variables of a type compatible to the accessed variable.
! Dereferencing a pointer that violates the aliasing rules
results in undefined behavior.
! In the case above, the compiler may assume that no access
! through an integer pointer can change the array a, consisting
! of shorts. Thus, printf may be called with the original values
of a[0] and a[1]. What really happens is up to the compiler and
may change with architecture and optimization level.
! Recent versions of GCC turn on the option -fstrict-aliasing
! (which allows alias-based optimizations) by default with -O2.
And some architectures then really print "1111 1111" as result.
! Without optimization the executable will generate the
"expected" output "2222 2222".
! To disable optimizations based on alias-analysis for faulty
! legacy code, the option -fno-strict-aliasing can be used as a
work-around.
The option -Wstrict-aliasing (which is included in -Wall) warns
about some - but not all - cases of violation of aliasing rules
when -fstrict-aliasing is active.
! To fix the code above, you can use a union instead of a cast
! (note that this is a GCC extension which might not work with
other compilers):
#include
*************** int main()
*** 453,463 ****
Now the result will always be "2222 2222".
! For some more insight into the subject, please have a look at
[33]this article.
Cannot use preprocessor directive in macro arguments.
! Let me guess... you used an older version of GCC to compile
code that looks something like this:
memcpy(dest, src,
--- 453,463 ----
Now the result will always be "2222 2222".
! For some more insight into the subject, please have a look at
[33]this article.
Cannot use preprocessor directive in macro arguments.
! Let me guess... you used an older version of GCC to compile
code that looks something like this:
memcpy(dest, src,
*************** test.c:8: undefined or invalid # directi
*** 479,501 ****
test.c:9: parse error before `24'
test.c:10: undefined or invalid # directive
! This is because your C library's happens to define
! memcpy as a macro - which is perfectly legitimate. In recent
versions of glibc, for example, printf is among those functions
which are implemented as macros.
! Versions of GCC prior to 3.3 did not allow you to put #ifdef
(or any other preprocessor directive) inside the arguments of a
macro. The code therefore would not compile.
As of GCC 3.3 this kind of construct is always accepted and the
! preprocessor will probably do what you expect, but see the
manual for detailed semantics.
! However, this kind of code is not portable. It is "undefined
! behavior" according to the C standard; that means different
! compilers may do different things with it. It is always
! possible to rewrite code which uses conditionals inside macros
so that it doesn't. You could write the above example
#ifdef PLATFORM1
--- 479,501 ----
test.c:9: parse error before `24'
test.c:10: undefined or invalid # directive
! This is because your C library's happens to define
! memcpy as a macro - which is perfectly legitimate. In recent
versions of glibc, for example, printf is among those functions
which are implemented as macros.
! Versions of GCC prior to 3.3 did not allow you to put #ifdef
(or any other preprocessor directive) inside the arguments of a
macro. The code therefore would not compile.
As of GCC 3.3 this kind of construct is always accepted and the
! preprocessor will probably do what you expect, but see the
manual for detailed semantics.
! However, this kind of code is not portable. It is "undefined
! behavior" according to the C standard; that means different
! compilers may do different things with it. It is always
! possible to rewrite code which uses conditionals inside macros
so that it doesn't. You could write the above example
#ifdef PLATFORM1
*************** test.c:10: undefined or invalid # direct
*** 504,535 ****
memcpy(dest, src, 24);
#endif
! This is a bit more typing, but I personally think it's better
style in addition to being more portable.
Cannot initialize a static variable with stdin.
! This has nothing to do with GCC, but people ask us about it a
lot. Code like this:
#include
FILE *yyin = stdin;
! will not compile with GNU libc, because stdin is not a
! constant. This was done deliberately, to make it easier to
! maintain binary compatibility when the type FILE needs to be
changed. It is surprising for people used to traditional Unix C
libraries, but it is permitted by the C standard.
! This construct commonly occurs in code generated by old
! versions of lex or yacc. We suggest you try regenerating the
! parser with a current version of flex or bison, respectively.
! In your own code, the appropriate fix is to move the
initialization to the beginning of main.
! There is a common misconception that the GCC developers are
! responsible for GNU libc. These are in fact two entirely
! separate projects; please check the [34]GNU libc web pages for
details.
_________________________________________________________________
--- 504,535 ----
memcpy(dest, src, 24);
#endif
! This is a bit more typing, but I personally think it's better
style in addition to being more portable.
Cannot initialize a static variable with stdin.
! This has nothing to do with GCC, but people ask us about it a
lot. Code like this:
#include
FILE *yyin = stdin;
! will not compile with GNU libc, because stdin is not a
! constant. This was done deliberately, to make it easier to
! maintain binary compatibility when the type FILE needs to be
changed. It is surprising for people used to traditional Unix C
libraries, but it is permitted by the C standard.
! This construct commonly occurs in code generated by old
! versions of lex or yacc. We suggest you try regenerating the
! parser with a current version of flex or bison, respectively.
! In your own code, the appropriate fix is to move the
initialization to the beginning of main.
! There is a common misconception that the GCC developers are
! responsible for GNU libc. These are in fact two entirely
! separate projects; please check the [34]GNU libc web pages for
details.
_________________________________________________________________
*************** C++
*** 537,592 ****
Nested classes can access private members and types of the containing
class.
! Defect report 45 clarifies that nested classes are members of
! the class they are nested in, and so are granted access to
private members of that class.
G++ emits two copies of constructors and destructors.
! In general there are three types of constructors (and
destructors).
1. The complete object constructor/destructor.
2. The base object constructor/destructor.
3. The allocating constructor/deallocating destructor.
! The first two are different, when virtual base classes are
involved.
Global destructors are not run in the correct order.
! Global destructors should be run in the reverse order of their
! constructors completing. In most cases this is the same as the
! reverse order of constructors starting, but sometimes it is
! different, and that is important. You need to compile and link
! your programs with --use-cxa-atexit. We have not turned this
! switch on by default, as it requires a cxa aware runtime
library (libc, glibc, or equivalent).
Classes in exception specifiers must be complete types.
! [15.4]/1 tells you that you cannot have an incomplete type, or
! pointer to incomplete (other than cv void *) in an exception
specification.
Exceptions don't work in multithreaded applications.
! You need to rebuild g++ and libstdc++ with --enable-threads.
! Remember, C++ exceptions are not like hardware interrupts. You
! cannot throw an exception in one thread and catch it in
! another. You cannot throw an exception from a signal handler
and catch it in the main thread.
Templates, scoping, and digraphs.
! If you have a class in the global namespace, say named X, and
want to give it as a template argument to some other class, say
std::vector, then std::vector<::X> fails with a parser error.
! The reason is that the standard mandates that the sequence <:
! is treated as if it were the token [. (There are several such
! combinations of characters - they are called digraphs.)
! Depending on the version, the compiler then reports a parse
! error before the character : (the colon before X) or a missing
closing bracket ].
! The simplest way to avoid this is to write std::vector< ::X>,
! i.e. place a space between the opening angle bracket and the
scope operator.
Copy constructor access check while initializing a reference.
--- 537,592 ----
Nested classes can access private members and types of the containing
class.
! Defect report 45 clarifies that nested classes are members of
! the class they are nested in, and so are granted access to
private members of that class.
G++ emits two copies of constructors and destructors.
! In general there are three types of constructors (and
destructors).
1. The complete object constructor/destructor.
2. The base object constructor/destructor.
3. The allocating constructor/deallocating destructor.
! The first two are different, when virtual base classes are
involved.
Global destructors are not run in the correct order.
! Global destructors should be run in the reverse order of their
! constructors completing. In most cases this is the same as the
! reverse order of constructors starting, but sometimes it is
! different, and that is important. You need to compile and link
! your programs with --use-cxa-atexit. We have not turned this
! switch on by default, as it requires a cxa aware runtime
library (libc, glibc, or equivalent).
Classes in exception specifiers must be complete types.
! [15.4]/1 tells you that you cannot have an incomplete type, or
! pointer to incomplete (other than cv void *) in an exception
specification.
Exceptions don't work in multithreaded applications.
! You need to rebuild g++ and libstdc++ with --enable-threads.
! Remember, C++ exceptions are not like hardware interrupts. You
! cannot throw an exception in one thread and catch it in
! another. You cannot throw an exception from a signal handler
and catch it in the main thread.
Templates, scoping, and digraphs.
! If you have a class in the global namespace, say named X, and
want to give it as a template argument to some other class, say
std::vector, then std::vector<::X> fails with a parser error.
! The reason is that the standard mandates that the sequence <:
! is treated as if it were the token [. (There are several such
! combinations of characters - they are called digraphs.)
! Depending on the version, the compiler then reports a parse
! error before the character : (the colon before X) or a missing
closing bracket ].
! The simplest way to avoid this is to write std::vector< ::X>,
! i.e. place a space between the opening angle bracket and the
scope operator.
Copy constructor access check while initializing a reference.
*************** void bar(void)
*** 614,632 ****
}
Starting with GCC 3.4.0, binding an rvalue to a const reference
! requires an accessible copy constructor. This might be
! surprising at first sight, especially since most popular
compilers do not correctly implement this rule.
The C++ Standard says that a temporary object should be created
! in this context and its contents filled with a copy of the
! object we are trying to bind to the reference; it also says
! that the temporary copy can be elided, but the semantic
! constraints (eg. accessibility) of the copy constructor still
have to be checked.
! For further information, you can consult the following
! paragraphs of the C++ standard: [dcl.init.ref]/5, bullet 2,
sub-bullet 1, and [class.temporary]/2.
Common problems when upgrading the compiler
--- 614,632 ----
}
Starting with GCC 3.4.0, binding an rvalue to a const reference
! requires an accessible copy constructor. This might be
! surprising at first sight, especially since most popular
compilers do not correctly implement this rule.
The C++ Standard says that a temporary object should be created
! in this context and its contents filled with a copy of the
! object we are trying to bind to the reference; it also says
! that the temporary copy can be elided, but the semantic
! constraints (eg. accessibility) of the copy constructor still
have to be checked.
! For further information, you can consult the following
! paragraphs of the C++ standard: [dcl.init.ref]/5, bullet 2,
sub-bullet 1, and [class.temporary]/2.
Common problems when upgrading the compiler
*************** void bar(void)
*** 634,714 ****
ABI changes
The C++ application binary interface (ABI) consists of two components:
! the first defines how the elements of classes are laid out, how
! functions are called, how function names are mangled, etc; the second
part deals with the internals of the objects in libstdc++. Although we
! strive for a non-changing ABI, so far we have had to modify it with
! each major release. If you change your compiler to a different major
release you must recompile all libraries that contain C++ code. If you
! fail to do so you risk getting linker errors or malfunctioning
programs. Some of our Java support libraries also contain C++ code, so
you might want to recompile all libraries to be safe. It should not be
necessary to recompile if you have changed to a bug-fix release of the
! same version of the compiler; bug-fix releases are careful to avoid
ABI changes. See also the [35]compatibility section of the GCC manual.
! Remark: A major release is designated by a change to the first or
! second component of the two- or three-part version number. A minor
! (bug-fix) release is designated by a change to the third component
! only. Thus GCC 3.2 and 3.3 are major releases, while 3.3.1 and 3.3.2
! are bug-fix releases for GCC 3.3. With the 3.4 series we are
! introducing a new naming scheme; the first release of this series is
3.4.0 instead of just 3.4.
Standard conformance
! With each release, we try to make G++ conform closer to the ISO C++
! standard (available at [36]http://www.ncits.org/cplusplus.htm). We
! have also implemented some of the core and library defect reports
(available at
! [37]http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html &
[38]http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html
respectively).
! Non-conforming legacy code that worked with older versions of GCC may
! be rejected by more recent compilers. There is no command-line switch
! to ensure compatibility in general, because trying to parse
! standard-conforming and old-style code at the same time would render
! the C++ frontend unmaintainable. However, some non-conforming
! constructs are allowed when the command-line option -fpermissive is
used.
! Two milestones in standard conformance are GCC 3.0 (including a major
! overhaul of the standard library) and the 3.4.0 version (with its new
C++ parser).
New in GCC 3.0
! * The standard library is much more conformant, and uses the std::
namespace (which is now a real namespace, not an alias for ::).
* The standard header files for the c library don't end with .h, but
begin with c (i.e. rather than ). The .h names
are still available, but are deprecated.
* is deprecated, use instead.
! * streambuf::seekoff & streambuf::seekpos are private, instead use
streambuf::pubseekoff & streambuf::pubseekpos respectively.
* If std::operator << (std::ostream &, long long) doesn't exist, you
need to recompile libstdc++ with --enable-long-long.
! If you get lots of errors about things like cout not being found,
you've most likely forgotten to tell the compiler to look in the std::
namespace. There are several ways to do this:
* Say std::cout at the call. This is the most explicit way of saying
what you mean.
! * Say using std::cout; somewhere before the call. You will need to
! do this for each function or type you wish to use from the
standard library.
! * Say using namespace std; somewhere before the call. This is the
! quick-but-dirty fix. This brings the whole of the std:: namespace
! into scope. Never do this in a header file, as every user of your
header file will be affected by this decision.
New in GCC 3.4.0
! The new parser brings a lot of improvements, especially concerning
name-lookup.
! * The "implicit typename" extension got removed (it was already
! deprecated since GCC 3.1), so that the following code is now
rejected, see [14.6]:
template struct A
--- 634,714 ----
ABI changes
The C++ application binary interface (ABI) consists of two components:
! the first defines how the elements of classes are laid out, how
! functions are called, how function names are mangled, etc; the second
part deals with the internals of the objects in libstdc++. Although we
! strive for a non-changing ABI, so far we have had to modify it with
! each major release. If you change your compiler to a different major
release you must recompile all libraries that contain C++ code. If you
! fail to do so you risk getting linker errors or malfunctioning
programs. Some of our Java support libraries also contain C++ code, so
you might want to recompile all libraries to be safe. It should not be
necessary to recompile if you have changed to a bug-fix release of the
! same version of the compiler; bug-fix releases are careful to avoid
ABI changes. See also the [35]compatibility section of the GCC manual.
! Remark: A major release is designated by a change to the first or
! second component of the two- or three-part version number. A minor
! (bug-fix) release is designated by a change to the third component
! only. Thus GCC 3.2 and 3.3 are major releases, while 3.3.1 and 3.3.2
! are bug-fix releases for GCC 3.3. With the 3.4 series we are
! introducing a new naming scheme; the first release of this series is
3.4.0 instead of just 3.4.
Standard conformance
! With each release, we try to make G++ conform closer to the ISO C++
! standard (available at [36]http://www.ncits.org/cplusplus.htm). We
! have also implemented some of the core and library defect reports
(available at
! [37]http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html &
[38]http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html
respectively).
! Non-conforming legacy code that worked with older versions of GCC may
! be rejected by more recent compilers. There is no command-line switch
! to ensure compatibility in general, because trying to parse
! standard-conforming and old-style code at the same time would render
! the C++ frontend unmaintainable. However, some non-conforming
! constructs are allowed when the command-line option -fpermissive is
used.
! Two milestones in standard conformance are GCC 3.0 (including a major
! overhaul of the standard library) and the 3.4.0 version (with its new
C++ parser).
New in GCC 3.0
! * The standard library is much more conformant, and uses the std::
namespace (which is now a real namespace, not an alias for ::).
* The standard header files for the c library don't end with .h, but
begin with c (i.e. rather than ). The .h names
are still available, but are deprecated.
* is deprecated, use instead.
! * streambuf::seekoff & streambuf::seekpos are private, instead use
streambuf::pubseekoff & streambuf::pubseekpos respectively.
* If std::operator << (std::ostream &, long long) doesn't exist, you
need to recompile libstdc++ with --enable-long-long.
! If you get lots of errors about things like cout not being found,
you've most likely forgotten to tell the compiler to look in the std::
namespace. There are several ways to do this:
* Say std::cout at the call. This is the most explicit way of saying
what you mean.
! * Say using std::cout; somewhere before the call. You will need to
! do this for each function or type you wish to use from the
standard library.
! * Say using namespace std; somewhere before the call. This is the
! quick-but-dirty fix. This brings the whole of the std:: namespace
! into scope. Never do this in a header file, as every user of your
header file will be affected by this decision.
New in GCC 3.4.0
! The new parser brings a lot of improvements, especially concerning
name-lookup.
! * The "implicit typename" extension got removed (it was already
! deprecated since GCC 3.1), so that the following code is now
rejected, see [14.6]:
template struct A
*************** template struct B
*** 724,730 ****
B b;
! * For similar reasons, the following code now requires the template
keyword, see [14.2]:
template struct A
--- 724,730 ----
B b;
! * For similar reasons, the following code now requires the template
keyword, see [14.2]:
template struct A
*************** template struct B
*** 740,746 ****
B b;
! * We now have two-stage name-lookup, so that the following code is
rejected, see [14.6]/9:
template int foo()
--- 740,746 ----
B b;
! * We now have two-stage name-lookup, so that the following code is
rejected, see [14.6]/9:
template int foo()
*************** template struct B : A
*** 766,772 ****
int foo5() { return j; } // OK
};
! In addition to the problems listed above, the manual contains a
section on [39]Common Misunderstandings with GNU C++.
References
--- 766,772 ----
int foo5() { return j; } // OK
};
! In addition to the problems listed above, the manual contains a
section on [39]Common Misunderstandings with GNU C++.
References
*************** References
*** 799,805 ****
26. http://gcc.gnu.org/bugs.html#detailed
27. http://gcc.gnu.org/bugs.html#detailed
28. http://gcc.gnu.org/bugs.html#new34
! 29. http://gcc.gnu.org/onlinedocs/g77/Trouble.html
30. http://gcc.gnu.org/PR323
31. http://www.validlab.com/goldberg/paper.ps
32. http://gcc.gnu.org/PR11751
--- 799,805 ----
26. http://gcc.gnu.org/bugs.html#detailed
27. http://gcc.gnu.org/bugs.html#detailed
28. http://gcc.gnu.org/bugs.html#new34
! 29. http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/Trouble.html
30. http://gcc.gnu.org/PR323
31. http://www.validlab.com/goldberg/paper.ps
32. http://gcc.gnu.org/PR11751
diff -Nrcpad gcc-4.0.3/bugs.html gcc-4.0.4/bugs.html
*** gcc-4.0.3/bugs.html 2006-03-09 20:48:43.000000000 +0000
--- gcc-4.0.4/bugs.html 2007-01-31 10:32:46.000000000 +0000
*************** statements, people also frequently put t
*** 368,376 ****
! Fortran bugs are documented in the G77 manual rather than
explicitly listed here. Please see
! Known Causes of
Trouble with GNU Fortran in the G77 manual.
--- 368,376 ----
! G77 bugs are documented in the G77 manual rather than
explicitly listed here. Please see
! Known Causes of
Trouble with GNU Fortran in the G77 manual.
diff -Nrcpad gcc-4.0.3/ChangeLog gcc-4.0.4/ChangeLog
*** gcc-4.0.3/ChangeLog 2006-03-09 20:46:12.000000000 +0000
--- gcc-4.0.4/ChangeLog 2007-01-31 10:25:20.000000000 +0000
***************
*** 1,3 ****
--- 1,23 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
+ 2006-11-21 Kaveh R. Ghazi
+
+ * configure.in (--with-mpfr-dir): Also look in .libs and _libs for
+ libmpfr.a.
+ * configure: Regenerate.
+
+ 2006-07-04 Peter O'Gorman
+
+ * ltconfig: chmod 644 before ranlib during install.
+
+ 2006-04-04 Alex Deiter
+
+ PR bootstrap/27023
+ * Makefile.tpl (multilib.out): Remove trailing backslash.
+ * Makefile.in: Regenerate.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/config/ChangeLog gcc-4.0.4/config/ChangeLog
*** gcc-4.0.3/config/ChangeLog 2006-03-09 20:45:42.000000000 +0000
--- gcc-4.0.4/config/ChangeLog 2007-01-31 10:24:33.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/configure gcc-4.0.4/configure
*** gcc-4.0.3/configure 2005-09-13 07:01:28.000000000 +0000
--- gcc-4.0.4/configure 2006-11-21 18:02:38.000000000 +0000
*************** fi
*** 2201,2207 ****
if test "x$with_mpfr_dir" != x; then
gmpinc="-I$with_mpfr_dir"
! gmplibs="$with_mpfr_dir/libmpfr.a"
else
gmplibs="-lmpfr"
fi
--- 2201,2213 ----
if test "x$with_mpfr_dir" != x; then
gmpinc="-I$with_mpfr_dir"
! if test -f "$with_mpfr_dir/.libs/libmpfr.a"; then
! gmplibs="$with_mpfr_dir/.libs/libmpfr.a"
! elif test -f "$with_mpfr_dir/_libs/libmpfr.a"; then
! gmplibs="$with_mpfr_dir/_libs/libmpfr.a"
! else
! gmplibs="$with_mpfr_dir/libmpfr.a"
! fi
else
gmplibs="-lmpfr"
fi
*************** saved_CFLAGS="$CFLAGS"
*** 2254,2262 ****
CFLAGS="$CFLAGS $gmpinc"
# Check GMP actually works
echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6
! echo "configure:2258: checking for correct version of gmp.h" >&5
cat > conftest.$ac_ext <&6
! echo "configure:2264: checking for correct version of gmp.h" >&5
cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
--- 2273,2279 ----
; return 0; }
EOF
! if { (eval echo configure:2277: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
*************** rm -f conftest*
*** 2280,2291 ****
if test x"$have_gmp" = xyes; then
echo $ac_n "checking for MPFR""... $ac_c" 1>&6
! echo "configure:2284: checking for MPFR" >&5
saved_LIBS="$LIBS"
LIBS="$LIBS $gmplibs"
cat > conftest.$ac_ext <
#include
--- 2286,2297 ----
if test x"$have_gmp" = xyes; then
echo $ac_n "checking for MPFR""... $ac_c" 1>&6
! echo "configure:2290: checking for MPFR" >&5
saved_LIBS="$LIBS"
LIBS="$LIBS $gmplibs"
cat > conftest.$ac_ext <
#include
*************** int main() {
*** 2293,2299 ****
mpfr_t n; mpfr_init(n);
; return 0; }
EOF
! if { (eval echo configure:2297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
--- 2299,2305 ----
mpfr_t n; mpfr_init(n);
; return 0; }
EOF
! if { (eval echo configure:2303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
*************** do
*** 2789,2795 ****
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2793: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_BISON'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 2795,2801 ----
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2799: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_BISON'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** do
*** 2824,2830 ****
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2828: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_YACC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 2830,2836 ----
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2834: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_YACC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** do
*** 2859,2865 ****
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2863: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_M4'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 2865,2871 ----
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2869: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_M4'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** do
*** 2894,2900 ****
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2898: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_FLEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 2900,2906 ----
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2904: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_FLEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** do
*** 2929,2935 ****
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2933: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 2935,2941 ----
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2939: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** do
*** 2964,2970 ****
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2968: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_MAKEINFO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 2970,2976 ----
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:2974: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_MAKEINFO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** test -n "$target_alias" && ncn_target_to
*** 3611,3617 ****
# Extract the first word of "${ncn_tool_prefix}ar", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3615: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3617,3623 ----
# Extract the first word of "${ncn_tool_prefix}ar", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3621: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_AR" ; then
*** 3644,3650 ****
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3648: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3650,3656 ----
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3654: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 3683,3689 ****
# Extract the first word of "${ncn_tool_prefix}as", so it can be a program name with args.
set dummy ${ncn_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3687: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3689,3695 ----
# Extract the first word of "${ncn_tool_prefix}as", so it can be a program name with args.
set dummy ${ncn_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3693: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_AS" ; then
*** 3716,3722 ****
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3720: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3722,3728 ----
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3726: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 3755,3761 ****
# Extract the first word of "${ncn_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ncn_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3759: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3761,3767 ----
# Extract the first word of "${ncn_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ncn_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3765: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_DLLTOOL" ; then
*** 3788,3794 ****
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3792: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3794,3800 ----
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3798: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 3827,3833 ****
# Extract the first word of "${ncn_tool_prefix}ld", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3831: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3833,3839 ----
# Extract the first word of "${ncn_tool_prefix}ld", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3837: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_LD" ; then
*** 3860,3866 ****
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3864: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3866,3872 ----
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3870: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 3899,3905 ****
# Extract the first word of "${ncn_tool_prefix}nm", so it can be a program name with args.
set dummy ${ncn_tool_prefix}nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3903: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3905,3911 ----
# Extract the first word of "${ncn_tool_prefix}nm", so it can be a program name with args.
set dummy ${ncn_tool_prefix}nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3909: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_NM" ; then
*** 3932,3938 ****
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3936: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3938,3944 ----
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3942: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 3971,3977 ****
# Extract the first word of "${ncn_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3975: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 3977,3983 ----
# Extract the first word of "${ncn_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:3981: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_RANLIB" ; then
*** 4004,4010 ****
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4008: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4010,4016 ----
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4014: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4043,4049 ****
# Extract the first word of "${ncn_tool_prefix}windres", so it can be a program name with args.
set dummy ${ncn_tool_prefix}windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4047: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4049,4055 ----
# Extract the first word of "${ncn_tool_prefix}windres", so it can be a program name with args.
set dummy ${ncn_tool_prefix}windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4053: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_WINDRES" ; then
*** 4076,4082 ****
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4080: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4082,4088 ----
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4086: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4115,4121 ****
# Extract the first word of "${ncn_tool_prefix}objcopy", so it can be a program name with args.
set dummy ${ncn_tool_prefix}objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4119: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4121,4127 ----
# Extract the first word of "${ncn_tool_prefix}objcopy", so it can be a program name with args.
set dummy ${ncn_tool_prefix}objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4125: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_OBJCOPY" ; then
*** 4148,4154 ****
# Extract the first word of "objcopy", so it can be a program name with args.
set dummy objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4152: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJCOPY'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4154,4160 ----
# Extract the first word of "objcopy", so it can be a program name with args.
set dummy objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4158: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJCOPY'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4187,4193 ****
# Extract the first word of "${ncn_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ncn_tool_prefix}objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4191: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4193,4199 ----
# Extract the first word of "${ncn_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ncn_tool_prefix}objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4197: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_OBJDUMP" ; then
*** 4220,4226 ****
# Extract the first word of "objdump", so it can be a program name with args.
set dummy objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4224: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4226,4232 ----
# Extract the first word of "objdump", so it can be a program name with args.
set dummy objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4230: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4266,4272 ****
# Extract the first word of "${ncn_target_tool_prefix}ar", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4270: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4272,4278 ----
# Extract the first word of "${ncn_target_tool_prefix}ar", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4276: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_CONFIGURED_AR_FO
*** 4299,4305 ****
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4303: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4305,4311 ----
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4309: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4338,4344 ****
# Extract the first word of "${ncn_target_tool_prefix}as", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4342: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4344,4350 ----
# Extract the first word of "${ncn_target_tool_prefix}as", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4348: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_CONFIGURED_AS_FO
*** 4371,4377 ****
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4375: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4377,4383 ----
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4381: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4410,4416 ****
# Extract the first word of "${ncn_target_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4414: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4416,4422 ----
# Extract the first word of "${ncn_target_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4420: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_CONFIGURED_DLLTO
*** 4443,4449 ****
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4447: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4449,4455 ----
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4453: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4482,4488 ****
# Extract the first word of "${ncn_target_tool_prefix}ld", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4486: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4488,4494 ----
# Extract the first word of "${ncn_target_tool_prefix}ld", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4492: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_CONFIGURED_LD_FO
*** 4515,4521 ****
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4519: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4521,4527 ----
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4525: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4554,4560 ****
# Extract the first word of "${ncn_target_tool_prefix}nm", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4558: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4560,4566 ----
# Extract the first word of "${ncn_target_tool_prefix}nm", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4564: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_CONFIGURED_NM_FO
*** 4587,4593 ****
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4591: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4593,4599 ----
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4597: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4626,4632 ****
# Extract the first word of "${ncn_target_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4630: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4632,4638 ----
# Extract the first word of "${ncn_target_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4636: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_CONFIGURED_RANLI
*** 4659,4665 ****
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4663: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4665,4671 ----
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4669: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** fi
*** 4698,4704 ****
# Extract the first word of "${ncn_target_tool_prefix}windres", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4702: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4704,4710 ----
# Extract the first word of "${ncn_target_tool_prefix}windres", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4708: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** if test -z "$ac_cv_prog_CONFIGURED_WINDR
*** 4731,4737 ****
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4735: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4737,4743 ----
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:4741: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*************** RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${
*** 4816,4822 ****
NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target}
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:4820: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
--- 4822,4828 ----
NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target}
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
! echo "configure:4826: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
*************** esac
*** 4863,4869 ****
# gcc for stageN-gcc and stagePREV-gcc for stage(N-1). In case this is not
# possible, however, we can resort to mv.
echo $ac_n "checking if symbolic links between directories work""... $ac_c" 1>&6
! echo "configure:4867: checking if symbolic links between directories work" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_ln_s_dir'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
--- 4869,4875 ----
# gcc for stageN-gcc and stagePREV-gcc for stage(N-1). In case this is not
# possible, however, we can resort to mv.
echo $ac_n "checking if symbolic links between directories work""... $ac_c" 1>&6
! echo "configure:4873: checking if symbolic links between directories work" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_ln_s_dir'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
diff -Nrcpad gcc-4.0.3/configure.in gcc-4.0.4/configure.in
*** gcc-4.0.3/configure.in 2005-09-13 07:01:28.000000000 +0000
--- gcc-4.0.4/configure.in 2006-11-21 18:02:38.000000000 +0000
*************** AC_ARG_WITH(mpfr-dir, [ --with-mpfr-dir
*** 1049,1055 ****
if test "x$with_mpfr_dir" != x; then
gmpinc="-I$with_mpfr_dir"
! gmplibs="$with_mpfr_dir/libmpfr.a"
else
gmplibs="-lmpfr"
fi
--- 1049,1061 ----
if test "x$with_mpfr_dir" != x; then
gmpinc="-I$with_mpfr_dir"
! if test -f "$with_mpfr_dir/.libs/libmpfr.a"; then
! gmplibs="$with_mpfr_dir/.libs/libmpfr.a"
! elif test -f "$with_mpfr_dir/_libs/libmpfr.a"; then
! gmplibs="$with_mpfr_dir/_libs/libmpfr.a"
! else
! gmplibs="$with_mpfr_dir/libmpfr.a"
! fi
else
gmplibs="-lmpfr"
fi
diff -Nrcpad gcc-4.0.3/contrib/ChangeLog gcc-4.0.4/contrib/ChangeLog
*** gcc-4.0.3/contrib/ChangeLog 2006-03-09 20:45:39.000000000 +0000
--- gcc-4.0.4/contrib/ChangeLog 2007-01-31 10:23:22.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/contrib/reghunt/ChangeLog gcc-4.0.4/contrib/reghunt/ChangeLog
*** gcc-4.0.3/contrib/reghunt/ChangeLog 2006-03-09 20:45:35.000000000 +0000
--- gcc-4.0.4/contrib/reghunt/ChangeLog 2007-01-31 10:23:15.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/contrib/regression/btest-gcc.sh gcc-4.0.4/contrib/regression/btest-gcc.sh
*** gcc-4.0.3/contrib/regression/btest-gcc.sh 2004-10-27 18:19:41.000000000 +0000
--- gcc-4.0.4/contrib/regression/btest-gcc.sh 2006-03-31 17:42:06.000000000 +0000
***************
*** 1,7 ****
#!/bin/sh
# Test GCC.
! # Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
--- 1,7 ----
#!/bin/sh
# Test GCC.
! # Copyright (C) 1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
*************** H_REAL_TARGET=`$SOURCE/config.sub $H_TAR
*** 96,104 ****
# TESTLOGS is the list of dejagnu .sum files that the tester should
# look at.
! TESTLOGS="gcc/testsuite/gcc.sum
! gcc/testsuite/g++.sum
! gcc/testsuite/objc.sum
$H_TARGET/libstdc++-v3/testsuite/libstdc++.sum"
# Build.
--- 96,104 ----
# TESTLOGS is the list of dejagnu .sum files that the tester should
# look at.
! TESTLOGS="gcc/testsuite/gcc/gcc.sum
! gcc/testsuite/g++/g++.sum
! gcc/testsuite/objc/objc.sum
$H_TARGET/libstdc++-v3/testsuite/libstdc++.sum"
# Build.
diff -Nrcpad gcc-4.0.3/contrib/regression/ChangeLog gcc-4.0.4/contrib/regression/ChangeLog
*** gcc-4.0.3/contrib/regression/ChangeLog 2006-03-09 20:45:32.000000000 +0000
--- gcc-4.0.4/contrib/regression/ChangeLog 2007-01-31 10:23:08.000000000 +0000
***************
*** 1,3 ****
--- 1,16 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
+ 2006-03-31 H.J. Lu
+
+ Backport from mainline
+ 2006-01-18 Andrew Pinski
+
+ * btest-gcc.sh: gcc.sum has moved to gcc/testsuite/gcc/gcc.sum.
+ g++.sum has moved to gcc/testsuite/g++/g++.sum.
+ objc.sum has moved to gcc/testsuite/objc/objc.sum.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/FAQ gcc-4.0.4/FAQ
*** gcc-4.0.3/FAQ 2006-03-09 20:48:44.000000000 +0000
--- gcc-4.0.4/FAQ 2007-01-31 10:32:49.000000000 +0000
***************
*** 1,12 ****
GCC Frequently Asked Questions
! The latest version of this document is always available at
[1]http://gcc.gnu.org/faq.html.
! This FAQ tries to answer specific questions concerning GCC. For
! general information regarding C, C++, resp. Fortran please check the
! [2]comp.lang.c FAQ, [3]comp.std.c++ FAQ, and the [4]Fortran
Information page.
Other GCC-related FAQs: [5]libstdc++-v3, and [6]GCJ.
--- 1,12 ----
GCC Frequently Asked Questions
! The latest version of this document is always available at
[1]http://gcc.gnu.org/faq.html.
! This FAQ tries to answer specific questions concerning GCC. For
! general information regarding C, C++, resp. Fortran please check the
! [2]comp.lang.c FAQ, [3]comp.std.c++ FAQ, and the [4]Fortran
Information page.
Other GCC-related FAQs: [5]libstdc++-v3, and [6]GCJ.
***************
*** 15,147 ****
Questions
1. [7]General information
! 1. [8]What is the relationship between GCC and EGCS?
! 2. [9]What is an open development model?
! 3. [10]How do I get a bug fixed or a feature added?
! 4. [11]Does GCC work on my platform?
! 2. [12]Installation
! 1. [13]How to install multiple versions of GCC
! 2. [14]Dynamic linker is unable to find GCC libraries
! 3. [15]libstdc++/libio tests fail badly with --enable-shared
! 4. [16]GCC can not find GNU as/GNU ld
! 5. [17]cpp: Usage:... Error
! 6. [18]Optimizing the compiler itself
! 7. [19]Why does libiconv get linked into jc1 on Solaris?
! 3. [20]Testsuite problems
! 1. [21]How do I pass flags like -fnew-abi to the testsuite?
! 2. [22]How can I run the test suite with multiple options?
! 4. [23]Older versions of GCC
! 1. [24]Is there a stringstream / sstream for GCC 2.95.2?
! 5. [25]Miscellaneous
! 1. [26]Friend Templates
! 2. [27]dynamic_cast, throw, typeid don't work with shared
libraries
! 3. [28]Why do I need autoconf, bison, xgettext, automake, etc?
! 4. [29]Why can't I build a shared library?
! 5. [30]When building C++, the linker says my constructors,
! destructors or virtual tables are undefined, but I defined
them
! 6. [31]Will GCC someday include an incremental linker?
_________________________________________________________________
General information
- What is the relationship between GCC and EGCS?
-
- In 1990/1991 gcc version 1 had reached a point of stability. For the
- targets it could support, it worked well. It had limitations inherent
- in its design that would be difficult to resolve, so a major effort
- was made to resolve those limitations and gcc version 2 was the
- result.
-
- When we had gcc2 in a useful state, development efforts on gcc1
- stopped and we all concentrated on making gcc2 better than gcc1 could
- ever be. This is the kind of step forward we wanted to make with the
- EGCS project when it was formed in 1997.
-
- In April 1999 the Free Software Foundation officially halted
- development on the gcc2 compiler and appointed the EGCS project as the
- official GCC maintainers. The net result was a single project which
- carries forward GCC development under the ultimate control of the
- [32]GCC Steering Committee.
- _________________________________________________________________
-
What is an open development model?
! We are using a bazaar style [33][1] approach to GCC development: we
! make snapshots publicly available to anyone who wants to try them; we
! welcome anyone to join the development mailing list. All of the
discussions on the development mailing list are available via the web.
! We're going to be making releases with a much higher frequency than
they have been made in the past.
! In addition to weekly snapshots of the GCC development sources, we
have the sources readable from an SVN server by anyone. Furthermore we
are using SVN to allow maintainers write access to the sources.
! There have been many potential GCC developers who were not able to
! participate in GCC development in the past. We want these people to
! help in any way they can; we ultimately want GCC to be the best
compiler in the world.
! A compiler is a complicated piece of software, there will still be
! strong central maintainers who will reject patches, who will demand
! documentation of implementations, and who will keep the level of
! quality as high as it is today. Code that could use wider testing may
be integrated--code that is simply ill-conceived won't be.
! GCC is not the first piece of software to use this open development
! process; FreeBSD, the Emacs lisp repository, and the Linux kernel are
a few examples of the bazaar style of development.
! With GCC, we are adding new features and optimizations at a rate that
! has not been done since the creation of gcc2; these additions
! inevitably have a temporarily destabilizing effect. With the help of
! developers working together with this bazaar style development, the
! resulting stability and quality levels will be better than we've had
before.
! [1] We've been discussing different development models a lot over
the past few months. The paper which started all of this introduced
! two terms: A cathedral development model versus a bazaar
! development model. The paper is written by Eric S. Raymond, it is
! called ``The Cathedral and the Bazaar''. The paper is a useful
starting point for discussions.
_________________________________________________________________
How do I get a bug fixed or a feature added?
! There are lots of ways to get something fixed. The list below may be
! incomplete, but it covers many of the common cases. These are listed
! roughly in order of decreasing difficulty for the average GCC user,
! meaning someone who is not skilled in the internals of GCC, and where
! difficulty is measured in terms of the time required to fix the bug.
! No alternative is better than any other; each has its benefits and
disadvantages.
! * Fix it yourself. This alternative will probably bring results, if
! you work hard enough, but will probably take a lot of time, and,
! depending on the quality of your work and the perceived benefits
! of your changes, your code may or may not ever make it into an
official release of GCC.
! * [34]Report the problem to the GCC bug tracking system and hope
! that someone will be kind enough to fix it for you. While this is
! certainly possible, and often happens, there is no guarantee that
! it will. You should not expect the same response from this method
! that you would see from a commercial support organization since
! the people who read GCC bug reports, if they choose to help you,
will be volunteering their time.
! * Hire someone to fix it for you. There are various companies and
! individuals providing support for GCC. This alternative costs
money, but is relatively likely to get results.
_________________________________________________________________
Does GCC work on my platform?
! The host/target specific installation notes for GCC include
! information about known problems with installing or using GCC on
! particular platforms. These are included in the sources for a release
! in INSTALL/specific.html, and the [35]latest version is always
! available at the GCC web site. Reports of [36]successful builds for
several versions of GCC are also available at the web site.
_________________________________________________________________
--- 15,124 ----
Questions
1. [7]General information
! 1. [8]What is an open development model?
! 2. [9]How do I get a bug fixed or a feature added?
! 3. [10]Does GCC work on my platform?
! 2. [11]Installation
! 1. [12]How to install multiple versions of GCC
! 2. [13]Dynamic linker is unable to find GCC libraries
! 3. [14]libstdc++/libio tests fail badly with --enable-shared
! 4. [15]GCC can not find GNU as/GNU ld
! 5. [16]cpp: Usage:... Error
! 6. [17]Optimizing the compiler itself
! 7. [18]Why does libiconv get linked into jc1 on Solaris?
! 3. [19]Testsuite problems
! 1. [20]How do I pass flags like -fnew-abi to the testsuite?
! 2. [21]How can I run the test suite with multiple options?
! 4. [22]Miscellaneous
! 1. [23]Friend Templates
! 2. [24]dynamic_cast, throw, typeid don't work with shared
libraries
! 3. [25]Why do I need autoconf, bison, xgettext, automake, etc?
! 4. [26]Why can't I build a shared library?
! 5. [27]When building C++, the linker says my constructors,
! destructors or virtual tables are undefined, but I defined
them
! 6. [28]Will GCC someday include an incremental linker?
_________________________________________________________________
General information
What is an open development model?
! We are using a bazaar style [29][1] approach to GCC development: we
! make snapshots publicly available to anyone who wants to try them; we
! welcome anyone to join the development mailing list. All of the
discussions on the development mailing list are available via the web.
! We're going to be making releases with a much higher frequency than
they have been made in the past.
! In addition to weekly snapshots of the GCC development sources, we
have the sources readable from an SVN server by anyone. Furthermore we
are using SVN to allow maintainers write access to the sources.
! There have been many potential GCC developers who were not able to
! participate in GCC development in the past. We want these people to
! help in any way they can; we ultimately want GCC to be the best
compiler in the world.
! A compiler is a complicated piece of software, there will still be
! strong central maintainers who will reject patches, who will demand
! documentation of implementations, and who will keep the level of
! quality as high as it is today. Code that could use wider testing may
be integrated--code that is simply ill-conceived won't be.
! GCC is not the first piece of software to use this open development
! process; FreeBSD, the Emacs lisp repository, and the Linux kernel are
a few examples of the bazaar style of development.
! With GCC, we are adding new features and optimizations at a rate that
! has not been done since the creation of gcc2; these additions
! inevitably have a temporarily destabilizing effect. With the help of
! developers working together with this bazaar style development, the
! resulting stability and quality levels will be better than we've had
before.
! [1] We've been discussing different development models a lot over
the past few months. The paper which started all of this introduced
! two terms: A cathedral development model versus a bazaar
! development model. The paper is written by Eric S. Raymond, it is
! called ``The Cathedral and the Bazaar''. The paper is a useful
starting point for discussions.
_________________________________________________________________
How do I get a bug fixed or a feature added?
! There are lots of ways to get something fixed. The list below may be
! incomplete, but it covers many of the common cases. These are listed
! roughly in order of decreasing difficulty for the average GCC user,
! meaning someone who is not skilled in the internals of GCC, and where
! difficulty is measured in terms of the time required to fix the bug.
! No alternative is better than any other; each has its benefits and
disadvantages.
! * Fix it yourself. This alternative will probably bring results, if
! you work hard enough, but will probably take a lot of time, and,
! depending on the quality of your work and the perceived benefits
! of your changes, your code may or may not ever make it into an
official release of GCC.
! * [30]Report the problem to the GCC bug tracking system and hope
! that someone will be kind enough to fix it for you. While this is
! certainly possible, and often happens, there is no guarantee that
! it will. You should not expect the same response from this method
! that you would see from a commercial support organization since
! the people who read GCC bug reports, if they choose to help you,
will be volunteering their time.
! * Hire someone to fix it for you. There are various companies and
! individuals providing support for GCC. This alternative costs
money, but is relatively likely to get results.
_________________________________________________________________
Does GCC work on my platform?
! The host/target specific installation notes for GCC include
! information about known problems with installing or using GCC on
! particular platforms. These are included in the sources for a release
! in INSTALL/specific.html, and the [31]latest version is always
! available at the GCC web site. Reports of [32]successful builds for
several versions of GCC are also available at the web site.
_________________________________________________________________
*************** Does GCC work on my platform?
*** 149,199 ****
How to install multiple versions of GCC
! It may be desirable to install multiple versions of the compiler on
! the same system. This can be done by using different prefix paths at
configure time and a few symlinks.
! Basically, configure the two compilers with different --prefix
! options, then build and install each compiler. Assume you want "gcc"
to be the latest compiler and available in /usr/local/bin; also assume
! that you want "gcc2" to be the older gcc2 compiler and also available
in /usr/local/bin.
! The easiest way to do this is to configure the new GCC with
! --prefix=/usr/local/gcc and the older gcc2 with
! --prefix=/usr/local/gcc2. Build and install both compilers. Then make
! a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from
! /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links
for the "g++", "c++" and "g77" compiler drivers.
! An alternative to using symlinks is to configure with a
! --program-transform-name option. This option specifies a sed command
! to process installed program names with. Using it you can, for
instance, have all the new GCC programs installed as "new-gcc" and the
! like. You will still have to specify different --prefix options for
! new GCC and old GCC, because it is only the executable program names
that are transformed. The difference is that you (as administrator) do
! not have to set up symlinks, but must specify additional directories
in your (as a user) PATH. A complication with --program-transform-name
! is that the sed command invariably contains characters significant to
! the shell, and these have to be escaped correctly, also it is not
! possible to use "^" or "$" in the command. Here is the option to
prefix "new-" to the new GCC installed programs:
--program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'
With the above --prefix option, that will install the new GCC programs
! into /usr/local/gcc/bin with names prefixed by "new-". You can use
! --program-transform-name if you have multiple versions of GCC, and
wish to be sure about which version you are invoking.
! If you use --prefix, GCC may have difficulty locating a GNU assembler
! or linker on your system, [37]GCC can not find GNU as/GNU ld explains
how to deal with this.
! Another option that may be easier is to use the --program-prefix= or
! --program-suffix= options to configure. So if you're installing GCC
! 2.95.2 and don't want to disturb the current version of GCC in
/usr/local/bin/, you could do
configure --program-suffix=-2.95.2
--- 126,176 ----
How to install multiple versions of GCC
! It may be desirable to install multiple versions of the compiler on
! the same system. This can be done by using different prefix paths at
configure time and a few symlinks.
! Basically, configure the two compilers with different --prefix
! options, then build and install each compiler. Assume you want "gcc"
to be the latest compiler and available in /usr/local/bin; also assume
! that you want "gcc2" to be the older gcc2 compiler and also available
in /usr/local/bin.
! The easiest way to do this is to configure the new GCC with
! --prefix=/usr/local/gcc and the older gcc2 with
! --prefix=/usr/local/gcc2. Build and install both compilers. Then make
! a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from
! /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links
for the "g++", "c++" and "g77" compiler drivers.
! An alternative to using symlinks is to configure with a
! --program-transform-name option. This option specifies a sed command
! to process installed program names with. Using it you can, for
instance, have all the new GCC programs installed as "new-gcc" and the
! like. You will still have to specify different --prefix options for
! new GCC and old GCC, because it is only the executable program names
that are transformed. The difference is that you (as administrator) do
! not have to set up symlinks, but must specify additional directories
in your (as a user) PATH. A complication with --program-transform-name
! is that the sed command invariably contains characters significant to
! the shell, and these have to be escaped correctly, also it is not
! possible to use "^" or "$" in the command. Here is the option to
prefix "new-" to the new GCC installed programs:
--program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'
With the above --prefix option, that will install the new GCC programs
! into /usr/local/gcc/bin with names prefixed by "new-". You can use
! --program-transform-name if you have multiple versions of GCC, and
wish to be sure about which version you are invoking.
! If you use --prefix, GCC may have difficulty locating a GNU assembler
! or linker on your system, [33]GCC can not find GNU as/GNU ld explains
how to deal with this.
! Another option that may be easier is to use the --program-prefix= or
! --program-suffix= options to configure. So if you're installing GCC
! 2.95.2 and don't want to disturb the current version of GCC in
/usr/local/bin/, you could do
configure --program-suffix=-2.95.2
*************** How to install multiple versions of GCC
*** 205,292 ****
Dynamic linker is unable to find GCC libraries
This problem manifests itself by programs not finding shared libraries
! they depend on when the programs are started. Note this problem often
! manifests itself with failures in the libio/libstdc++ tests after
configuring with --enable-shared and building GCC.
! GCC does not specify a runpath so that the dynamic linker can find
dynamic libraries at runtime.
! The short explanation is that if you always pass a -R option to the
! linker, then your programs become dependent on directories which may
be NFS mounted, and programs may hang unnecessarily when an NFS server
goes down.
! The problem is not programs that do require the directories; those
! programs are going to hang no matter what you do. The problem is
programs that do not require the directories.
! SunOS effectively always passed a -R option for every -L option; this
! was a bad idea, and so it was removed for Solaris. We should not
recreate it.
! However, if you feel you really need such an option to be passed
! automatically to the linker, you may add it to the GCC specs file.
! This file can be found in the same directory that contains cc1 (run
gcc -print-prog-name=cc1 to find it). You may add linker flags such as
! -R or -rpath, depending on platform and linker, to the *link or *lib
specs.
! Another alternative is to install a wrapper script around gcc, g++ or
! ld that adds the appropriate directory to the environment variable
LD_RUN_PATH or equivalent (again, it's platform-dependent).
Yet another option, that works on a few platforms, is to hard-code the
! full pathname of the library into its soname. This can only be
! accomplished by modifying the appropriate .ml file within
libstdc++/config (and also libg++/config, if you are building libg++),
! so that $(libdir)/ appears just before the library name in -soname or
-h options.
_________________________________________________________________
GCC can not find GNU as/GNU ld
! GCC searches the PATH for an assembler and a loader, but it only does
so after searching a directory list hard-coded in the GCC executables.
! Since, on most platforms, the hard-coded list includes directories in
! which the system assembler and loader can be found, you may have to
! take one of the following actions to arrange that GCC uses the GNU
versions of those programs.
To ensure that GCC finds the GNU assembler (the GNU loader), which are
! required by [38]some configurations, you should configure these with
the same --prefix option as you used for GCC. Then build & install GNU
as (GNU ld) and proceed with building GCC.
! Another alternative is to create links to GNU as and ld in any of the
! directories printed by the command `gcc -print-search-dirs | grep
! '^programs:''. The link to `ld' should be named `real-ld' if `ld'
already exists. If such links do not exist while you're compiling GCC,
! you may have to create them in the build directories too, within the
gcc directory and in all the gcc/stage* subdirectories.
! GCC 2.95 allows you to specify the full pathname of the assembler and
the linker to use. The configure flags are `--with-as=/path/to/as' and
! `--with-ld=/path/to/ld'. GCC will try to use these pathnames before
! looking for `as' or `(real-)ld' in the standard search dirs. If, at
! configure-time, the specified programs are found to be GNU utilities,
`--with-gnu-as' and `--with-gnu-ld' need not be used; these flags will
! be auto-detected. One drawback of this option is that it won't allow
! you to override the search path for assembler and linker with
command-line options -B/path/ if the specified filenames exist.
_________________________________________________________________
cpp: Usage:... Error
! If you get an error like this when building GCC (particularly when
! building __mulsi3), then you likely have a problem with your
environment variables.
cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp
[switches] input output
! First look for an explicit '.' in either LIBRARY_PATH or
! GCC_EXEC_PREFIX from your environment. If you do not find an explicit
! '.', look for an empty pathname in those variables. Note that ':' at
either the start or end of these variables is an implicit '.' and will
cause problems.
--- 182,269 ----
Dynamic linker is unable to find GCC libraries
This problem manifests itself by programs not finding shared libraries
! they depend on when the programs are started. Note this problem often
! manifests itself with failures in the libio/libstdc++ tests after
configuring with --enable-shared and building GCC.
! GCC does not specify a runpath so that the dynamic linker can find
dynamic libraries at runtime.
! The short explanation is that if you always pass a -R option to the
! linker, then your programs become dependent on directories which may
be NFS mounted, and programs may hang unnecessarily when an NFS server
goes down.
! The problem is not programs that do require the directories; those
! programs are going to hang no matter what you do. The problem is
programs that do not require the directories.
! SunOS effectively always passed a -R option for every -L option; this
! was a bad idea, and so it was removed for Solaris. We should not
recreate it.
! However, if you feel you really need such an option to be passed
! automatically to the linker, you may add it to the GCC specs file.
! This file can be found in the same directory that contains cc1 (run
gcc -print-prog-name=cc1 to find it). You may add linker flags such as
! -R or -rpath, depending on platform and linker, to the *link or *lib
specs.
! Another alternative is to install a wrapper script around gcc, g++ or
! ld that adds the appropriate directory to the environment variable
LD_RUN_PATH or equivalent (again, it's platform-dependent).
Yet another option, that works on a few platforms, is to hard-code the
! full pathname of the library into its soname. This can only be
! accomplished by modifying the appropriate .ml file within
libstdc++/config (and also libg++/config, if you are building libg++),
! so that $(libdir)/ appears just before the library name in -soname or
-h options.
_________________________________________________________________
GCC can not find GNU as/GNU ld
! GCC searches the PATH for an assembler and a loader, but it only does
so after searching a directory list hard-coded in the GCC executables.
! Since, on most platforms, the hard-coded list includes directories in
! which the system assembler and loader can be found, you may have to
! take one of the following actions to arrange that GCC uses the GNU
versions of those programs.
To ensure that GCC finds the GNU assembler (the GNU loader), which are
! required by [34]some configurations, you should configure these with
the same --prefix option as you used for GCC. Then build & install GNU
as (GNU ld) and proceed with building GCC.
! Another alternative is to create links to GNU as and ld in any of the
! directories printed by the command `gcc -print-search-dirs | grep
! '^programs:''. The link to `ld' should be named `real-ld' if `ld'
already exists. If such links do not exist while you're compiling GCC,
! you may have to create them in the build directories too, within the
gcc directory and in all the gcc/stage* subdirectories.
! GCC 2.95 allows you to specify the full pathname of the assembler and
the linker to use. The configure flags are `--with-as=/path/to/as' and
! `--with-ld=/path/to/ld'. GCC will try to use these pathnames before
! looking for `as' or `(real-)ld' in the standard search dirs. If, at
! configure-time, the specified programs are found to be GNU utilities,
`--with-gnu-as' and `--with-gnu-ld' need not be used; these flags will
! be auto-detected. One drawback of this option is that it won't allow
! you to override the search path for assembler and linker with
command-line options -B/path/ if the specified filenames exist.
_________________________________________________________________
cpp: Usage:... Error
! If you get an error like this when building GCC (particularly when
! building __mulsi3), then you likely have a problem with your
environment variables.
cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp
[switches] input output
! First look for an explicit '.' in either LIBRARY_PATH or
! GCC_EXEC_PREFIX from your environment. If you do not find an explicit
! '.', look for an empty pathname in those variables. Note that ':' at
either the start or end of these variables is an implicit '.' and will
cause problems.
*************** cpp: Usage:... Error
*** 295,322 ****
Optimizing the compiler itself
! If you want to test a particular optimization option, it's useful to
! try bootstrapping the compiler with that option turned on. For
example, to test the -fssa option, you could bootstrap like this:
make BOOT_CFLAGS="-O2 -fssa" bootstrap
_________________________________________________________________
Why does libiconv get linked into jc1 on Solaris?
! The Java front end requires iconv. If the compiler used to bootstrap
! GCC finds libiconv (because the GNU version of libiconv has been
installed in the same prefix as the bootstrap compiler), but the newly
built GCC does not find the library (because it will be installed with
! a different prefix), then a link-time error will occur when building
! jc1. This problem does not show up so often on platforms that have
! libiconv in a default location (like /usr/lib) because then both
! compilers can find a library named libiconv, even though it is a
different library.
! Using --disable-nls at configure-time does not prevent this problem
! because jc1 uses iconv even in that case. Solutions include
! temporarily removing the GNU libiconv, copying it to a default
! location such as /usr/lib/, and using --enable-languages at
configure-time to disable Java.
_________________________________________________________________
--- 272,299 ----
Optimizing the compiler itself
! If you want to test a particular optimization option, it's useful to
! try bootstrapping the compiler with that option turned on. For
example, to test the -fssa option, you could bootstrap like this:
make BOOT_CFLAGS="-O2 -fssa" bootstrap
_________________________________________________________________
Why does libiconv get linked into jc1 on Solaris?
! The Java front end requires iconv. If the compiler used to bootstrap
! GCC finds libiconv (because the GNU version of libiconv has been
installed in the same prefix as the bootstrap compiler), but the newly
built GCC does not find the library (because it will be installed with
! a different prefix), then a link-time error will occur when building
! jc1. This problem does not show up so often on platforms that have
! libiconv in a default location (like /usr/lib) because then both
! compilers can find a library named libiconv, even though it is a
different library.
! Using --disable-nls at configure-time does not prevent this problem
! because jc1 uses iconv even in that case. Solutions include
! temporarily removing the GNU libiconv, copying it to a default
! location such as /usr/lib/, and using --enable-languages at
configure-time to disable Java.
_________________________________________________________________
*************** Why does libiconv get linked into jc1 on
*** 324,334 ****
How do I pass flags like -fnew-abi to the testsuite?
! If you invoke runtest directly, you can use the --tool_opts option,
e.g:
runtest --tool_opts "-fnew-abi -fno-honor-std"
! Or, if you use make check you can use the make variable RUNTESTFLAGS,
e.g:
make RUNTESTFLAGS="--tool_opts '-fnew-abi -fno-honor-std'" check-g++
_________________________________________________________________
--- 301,311 ----
How do I pass flags like -fnew-abi to the testsuite?
! If you invoke runtest directly, you can use the --tool_opts option,
e.g:
runtest --tool_opts "-fnew-abi -fno-honor-std"
! Or, if you use make check you can use the make variable RUNTESTFLAGS,
e.g:
make RUNTESTFLAGS="--tool_opts '-fnew-abi -fno-honor-std'" check-g++
_________________________________________________________________
*************** How can I run the test suite with multip
*** 339,385 ****
e.g:
runtest --target_board "unix{-fPIC,-fpic,}"
! Or, if you use make check you can use the make variable RUNTESTFLAGS,
e.g:
make RUNTESTFLAGS="--target_board 'unix{-fPIC,-fpic,}'" check-gcc
! Either of these examples will run the tests three times. Once with
-fPIC, once with -fpic, and once with no additional flags.
This technique is particularly useful on multilibbed targets.
_________________________________________________________________
- Older versions of GCC and EGCS
-
- Is there a stringstream / sstream for GCC 2.95.2?
-
- Yes, it's at:
- [39]http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream.
- _________________________________________________________________
-
Miscellaneous
Friend Templates
In order to make a specialization of a template function a friend of a
! (possibly template) class, you must explicitly state that the friend
! function is a template, by appending angle brackets to its name, and
! this template function must have been declared already. Here's an
example:
template class foo {
friend void bar(foo);
}
! The above declaration declares a non-template function named bar, so
! it must be explicitly defined for each specialization of foo. A
! template definition of bar won't do, because it is unrelated with the
non-template declaration above. So you'd have to end up writing:
void bar(foo) { /* ... */ }
void bar(foo) { /* ... */ }
! If you meant bar to be a template function, you should have
forward-declared it as follows. Note that, since the template function
! declaration refers to the template class, the template class must be
forward-declared too:
template
class foo;
--- 316,354 ----
e.g:
runtest --target_board "unix{-fPIC,-fpic,}"
! Or, if you use make check you can use the make variable RUNTESTFLAGS,
e.g:
make RUNTESTFLAGS="--target_board 'unix{-fPIC,-fpic,}'" check-gcc
! Either of these examples will run the tests three times. Once with
-fPIC, once with -fpic, and once with no additional flags.
This technique is particularly useful on multilibbed targets.
_________________________________________________________________
Miscellaneous
Friend Templates
In order to make a specialization of a template function a friend of a
! (possibly template) class, you must explicitly state that the friend
! function is a template, by appending angle brackets to its name, and
! this template function must have been declared already. Here's an
example:
template class foo {
friend void bar(foo);
}
! The above declaration declares a non-template function named bar, so
! it must be explicitly defined for each specialization of foo. A
! template definition of bar won't do, because it is unrelated with the
non-template declaration above. So you'd have to end up writing:
void bar(foo) { /* ... */ }
void bar(foo) { /* ... */ }
! If you meant bar to be a template function, you should have
forward-declared it as follows. Note that, since the template function
! declaration refers to the template class, the template class must be
forward-declared too:
template
class foo;
*************** class foo {
*** 395,410 ****
template
void bar(foo) { /* ... */ }
! In this case, the template argument list could be left empty, because
! it can be implicitly deduced from the function arguments, but the
! angle brackets must be present, otherwise the declaration will be
! taken as a non-template function. Furthermore, in some cases, you may
! have to explicitly specify the template arguments, to remove
ambiguity.
An error in the last public comment draft of the ANSI/ISO C++ Standard
! and the fact that previous releases of GCC would accept such friend
! declarations as template declarations has led people to believe that
the forward declaration was not necessary, but, according to the final
version of the Standard, it is.
_________________________________________________________________
--- 364,379 ----
template
void bar(foo) { /* ... */ }
! In this case, the template argument list could be left empty, because
! it can be implicitly deduced from the function arguments, but the
! angle brackets must be present, otherwise the declaration will be
! taken as a non-template function. Furthermore, in some cases, you may
! have to explicitly specify the template arguments, to remove
ambiguity.
An error in the last public comment draft of the ANSI/ISO C++ Standard
! and the fact that previous releases of GCC would accept such friend
! declarations as template declarations has led people to believe that
the forward declaration was not necessary, but, according to the final
version of the Standard, it is.
_________________________________________________________________
*************** dynamic_cast, throw, typeid don't work w
*** 413,510 ****
The new C++ ABI in the GCC 3.0 series uses address comparisons, rather
than string compares, to determine type equality. This leads to better
! performance. Like other objects that have to be present in the final
! executable, these std::type_info objects have what is called vague
! linkage because they are not tightly bound to any one particular
! translation unit (object file). The compiler has to emit them in any
! translation unit that requires their presence, and then rely on the
! linking and loading process to make sure that only one of them is
! active in the final executable. With static linking all of these
! symbols are resolved at link time, but with dynamic linking, further
resolution occurs at load time. You have to ensure that objects within
! a shared library are resolved against objects in the executable and
other shared libraries.
! * For a program which is linked against a shared library, no
additional precautions are needed.
! * You cannot create a shared library with the "-Bsymbolic" option,
as that prevents the resolution described above.
! * If you use dlopen to explicitly load code from a shared library,
! you must do several things. First, export global symbols from the
! executable by linking it with the "-E" flag (you will have to
! specify this as "-Wl,-E" if you are invoking the linker in the
! usual manner from the compiler driver, g++). You must also make
! the external symbols in the loaded library available for
! subsequent libraries by providing the RTLD_GLOBAL flag to dlopen.
The symbol resolution can be immediate or lazy.
! Template instantiations are another, user visible, case of objects
with vague linkage, which needs similar resolution. If you do not take
! the above precautions, you may discover that a template instantiation
! with the same argument list, but instantiated in multiple translation
! units, has several addresses, depending in which translation unit the
! address is taken. (This is not an exhaustive list of the kind of
! objects which have vague linkage and are expected to be resolved
during linking & loading.)
! If you are worried about different objects with the same name
! colliding during the linking or loading process, then you should use
! namespaces to disambiguate them. Giving distinct objects with global
! linkage the same name is a violation of the One Definition Rule (ODR)
[basic.def.odr].
For more details about the way that GCC implements these and other C++
! features, please read the [40]ABI specification. Note the
! std::type_info objects which must be resolved all begin with "_ZTS".
! Refer to ld's documentation for a description of the "-E" &
"-Bsymbolic" flags.
_________________________________________________________________
Why do I need autoconf, bison, xgettext, automake, etc?
! If you're using diffs up dated from one snapshot to the next, or if
! you're using the SVN repository, you may need several additional
programs to build GCC.
! These include, but are not necessarily limited to autoconf, automake,
bison, and xgettext.
! This is necessary because neither diff nor cvs keep timestamps
! correct. This causes problems for generated files as "make" may think
those generated files are out of date and try to regenerate them.
! An easy way to work around this problem is to use the gcc_update
! script in the contrib subdirectory of GCC, which handles this
transparently without requiring installation of any additional tools.
! When building from diffs or SVN or if you modified some sources, you
may also need to obtain development versions of some GNU tools, as the
! production versions do not necessarily handle all features needed to
rebuild GCC.
! In general, the current versions of these tools from
! [41]ftp://ftp.gnu.org/gnu/ will work. At present, Autoconf 2.50 is not
supported, and you will need to use Autoconf 2.13; work is in progress
to fix this problem. Also look at
! [42]ftp://gcc.gnu.org/pub/gcc/infrastructure/ for any special versions
of packages.
_________________________________________________________________
Why can't I build a shared library?
! When building a shared library you may get an error message from the
linker like `assert pure-text failed:' or `DP relative code in file'.
! This kind of error occurs when you've failed to provide proper flags
to gcc when linking the shared library.
You can get this error even if all the .o files for the shared library
! were compiled with the proper PIC option. When building a shared
! library, gcc will compile additional code to be included in the
! library. That additional code must also be compiled with the proper
PIC option.
! Adding the proper PIC option (-fpic or -fPIC) to the link line which
! creates the shared library will fix this problem on targets that
support PIC in this manner. For example:
gcc -c -fPIC myfile.c
gcc -shared -o libmyfile.so -fPIC myfile.o
--- 382,479 ----
The new C++ ABI in the GCC 3.0 series uses address comparisons, rather
than string compares, to determine type equality. This leads to better
! performance. Like other objects that have to be present in the final
! executable, these std::type_info objects have what is called vague
! linkage because they are not tightly bound to any one particular
! translation unit (object file). The compiler has to emit them in any
! translation unit that requires their presence, and then rely on the
! linking and loading process to make sure that only one of them is
! active in the final executable. With static linking all of these
! symbols are resolved at link time, but with dynamic linking, further
resolution occurs at load time. You have to ensure that objects within
! a shared library are resolved against objects in the executable and
other shared libraries.
! * For a program which is linked against a shared library, no
additional precautions are needed.
! * You cannot create a shared library with the "-Bsymbolic" option,
as that prevents the resolution described above.
! * If you use dlopen to explicitly load code from a shared library,
! you must do several things. First, export global symbols from the
! executable by linking it with the "-E" flag (you will have to
! specify this as "-Wl,-E" if you are invoking the linker in the
! usual manner from the compiler driver, g++). You must also make
! the external symbols in the loaded library available for
! subsequent libraries by providing the RTLD_GLOBAL flag to dlopen.
The symbol resolution can be immediate or lazy.
! Template instantiations are another, user visible, case of objects
with vague linkage, which needs similar resolution. If you do not take
! the above precautions, you may discover that a template instantiation
! with the same argument list, but instantiated in multiple translation
! units, has several addresses, depending in which translation unit the
! address is taken. (This is not an exhaustive list of the kind of
! objects which have vague linkage and are expected to be resolved
during linking & loading.)
! If you are worried about different objects with the same name
! colliding during the linking or loading process, then you should use
! namespaces to disambiguate them. Giving distinct objects with global
! linkage the same name is a violation of the One Definition Rule (ODR)
[basic.def.odr].
For more details about the way that GCC implements these and other C++
! features, please read the [35]ABI specification. Note the
! std::type_info objects which must be resolved all begin with "_ZTS".
! Refer to ld's documentation for a description of the "-E" &
"-Bsymbolic" flags.
_________________________________________________________________
Why do I need autoconf, bison, xgettext, automake, etc?
! If you're using diffs up dated from one snapshot to the next, or if
! you're using the SVN repository, you may need several additional
programs to build GCC.
! These include, but are not necessarily limited to autoconf, automake,
bison, and xgettext.
! This is necessary because neither diff nor cvs keep timestamps
! correct. This causes problems for generated files as "make" may think
those generated files are out of date and try to regenerate them.
! An easy way to work around this problem is to use the gcc_update
! script in the contrib subdirectory of GCC, which handles this
transparently without requiring installation of any additional tools.
! When building from diffs or SVN or if you modified some sources, you
may also need to obtain development versions of some GNU tools, as the
! production versions do not necessarily handle all features needed to
rebuild GCC.
! In general, the current versions of these tools from
! [36]ftp://ftp.gnu.org/gnu/ will work. At present, Autoconf 2.50 is not
supported, and you will need to use Autoconf 2.13; work is in progress
to fix this problem. Also look at
! [37]ftp://gcc.gnu.org/pub/gcc/infrastructure/ for any special versions
of packages.
_________________________________________________________________
Why can't I build a shared library?
! When building a shared library you may get an error message from the
linker like `assert pure-text failed:' or `DP relative code in file'.
! This kind of error occurs when you've failed to provide proper flags
to gcc when linking the shared library.
You can get this error even if all the .o files for the shared library
! were compiled with the proper PIC option. When building a shared
! library, gcc will compile additional code to be included in the
! library. That additional code must also be compiled with the proper
PIC option.
! Adding the proper PIC option (-fpic or -fPIC) to the link line which
! creates the shared library will fix this problem on targets that
support PIC in this manner. For example:
gcc -c -fPIC myfile.c
gcc -shared -o libmyfile.so -fPIC myfile.o
*************** Why can't I build a shared library?
*** 513,585 ****
When building C++, the linker says my constructors, destructors or virtual
tables are undefined, but I defined them
! The ISO C++ Standard specifies that all virtual methods of a class
! that are not pure-virtual must be defined, but does not require any
! diagnostic for violations of this rule [class.virtual]/8. Based on
! this assumption, GCC will only emit the implicitly defined
! constructors, the assignment operator, the destructor and the virtual
! table of a class in the translation unit that defines its first such
non-inline method.
! Therefore, if you fail to define this particular method, the linker
! may complain about the lack of definitions for apparently unrelated
! symbols. Unfortunately, in order to improve this error message, it
! might be necessary to change the linker, and this can't always be
done.
! The solution is to ensure that all virtual methods that are not pure
! are defined. Note that a destructor must be defined even if it is
declared pure-virtual [class.dtor]/7.
_________________________________________________________________
Will GCC someday include an incremental linker?
! Incremental linking is part of the linker, not the compiler. As such,
GCC doesn't have anything to do with incremental linking. Depending on
! what platform you use, it may be possible to tell GCC to use the
platform's native linker (e.g., Solaris' ild(1)).
References
1. http://gcc.gnu.org/faq.html
2. http://c-faq.com/
! 3. http://www.jamesd.demon.co.uk/csc/faq.html
4. http://www.fortran.com/fortran/info.html
5. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html
6. http://gcc.gnu.org/java/faq.html
7. http://gcc.gnu.org/faq.html#general
! 8. http://gcc.gnu.org/faq.html#gcc
! 9. http://gcc.gnu.org/faq.html#open-development
! 10. http://gcc.gnu.org/faq.html#support
! 11. http://gcc.gnu.org/faq.html#platforms
! 12. http://gcc.gnu.org/faq.html#installation
! 13. http://gcc.gnu.org/faq.html#multiple
14. http://gcc.gnu.org/faq.html#rpath
! 15. http://gcc.gnu.org/faq.html#rpath
! 16. http://gcc.gnu.org/faq.html#gas
! 17. http://gcc.gnu.org/faq.html#environ
! 18. http://gcc.gnu.org/faq.html#optimizing
! 19. http://gcc.gnu.org/faq.html#iconv
! 20. http://gcc.gnu.org/faq.html#testsuite
! 21. http://gcc.gnu.org/faq.html#testoptions
! 22. http://gcc.gnu.org/faq.html#multipletests
! 23. http://gcc.gnu.org/faq.html#old
! 24. http://gcc.gnu.org/faq.html#2.95sstream
! 25. http://gcc.gnu.org/faq.html#misc
! 26. http://gcc.gnu.org/faq.html#friend
! 27. http://gcc.gnu.org/faq.html#dso
! 28. http://gcc.gnu.org/faq.html#generated_files
! 29. http://gcc.gnu.org/faq.html#picflag-needed
! 30. http://gcc.gnu.org/faq.html#vtables
! 31. http://gcc.gnu.org/faq.html#incremental
! 32. http://gcc.gnu.org/steering.html
! 33. http://gcc.gnu.org/faq.html#cathedral-vs-bazaar
! 34. http://gcc.gnu.org/bugs.html
! 35. http://gcc.gnu.org/install/specific.html
! 36. http://gcc.gnu.org/buildstat.html
! 37. http://gcc.gnu.org/faq.html#gas
! 38. http://gcc.gnu.org/install/specific.html
! 39. http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream
! 40. http://www.codesourcery.com/cxx-abi/
! 41. ftp://ftp.gnu.org/gnu/
! 42. ftp://gcc.gnu.org/pub/gcc/infrastructure/
--- 482,549 ----
When building C++, the linker says my constructors, destructors or virtual
tables are undefined, but I defined them
! The ISO C++ Standard specifies that all virtual methods of a class
! that are not pure-virtual must be defined, but does not require any
! diagnostic for violations of this rule [class.virtual]/8. Based on
! this assumption, GCC will only emit the implicitly defined
! constructors, the assignment operator, the destructor and the virtual
! table of a class in the translation unit that defines its first such
non-inline method.
! Therefore, if you fail to define this particular method, the linker
! may complain about the lack of definitions for apparently unrelated
! symbols. Unfortunately, in order to improve this error message, it
! might be necessary to change the linker, and this can't always be
done.
! The solution is to ensure that all virtual methods that are not pure
! are defined. Note that a destructor must be defined even if it is
declared pure-virtual [class.dtor]/7.
_________________________________________________________________
Will GCC someday include an incremental linker?
! Incremental linking is part of the linker, not the compiler. As such,
GCC doesn't have anything to do with incremental linking. Depending on
! what platform you use, it may be possible to tell GCC to use the
platform's native linker (e.g., Solaris' ild(1)).
References
1. http://gcc.gnu.org/faq.html
2. http://c-faq.com/
! 3. http://www.comeaucomputing.com/csc/faq.html
4. http://www.fortran.com/fortran/info.html
5. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html
6. http://gcc.gnu.org/java/faq.html
7. http://gcc.gnu.org/faq.html#general
! 8. http://gcc.gnu.org/faq.html#open-development
! 9. http://gcc.gnu.org/faq.html#support
! 10. http://gcc.gnu.org/faq.html#platforms
! 11. http://gcc.gnu.org/faq.html#installation
! 12. http://gcc.gnu.org/faq.html#multiple
! 13. http://gcc.gnu.org/faq.html#rpath
14. http://gcc.gnu.org/faq.html#rpath
! 15. http://gcc.gnu.org/faq.html#gas
! 16. http://gcc.gnu.org/faq.html#environ
! 17. http://gcc.gnu.org/faq.html#optimizing
! 18. http://gcc.gnu.org/faq.html#iconv
! 19. http://gcc.gnu.org/faq.html#testsuite
! 20. http://gcc.gnu.org/faq.html#testoptions
! 21. http://gcc.gnu.org/faq.html#multipletests
! 22. http://gcc.gnu.org/faq.html#misc
! 23. http://gcc.gnu.org/faq.html#friend
! 24. http://gcc.gnu.org/faq.html#dso
! 25. http://gcc.gnu.org/faq.html#generated_files
! 26. http://gcc.gnu.org/faq.html#picflag-needed
! 27. http://gcc.gnu.org/faq.html#vtables
! 28. http://gcc.gnu.org/faq.html#incremental
! 29. http://gcc.gnu.org/faq.html#cathedral-vs-bazaar
! 30. http://gcc.gnu.org/bugs.html
! 31. http://gcc.gnu.org/install/specific.html
! 32. http://gcc.gnu.org/buildstat.html
! 33. http://gcc.gnu.org/faq.html#gas
! 34. http://gcc.gnu.org/install/specific.html
! 35. http://www.codesourcery.com/cxx-abi/
! 36. ftp://ftp.gnu.org/gnu/
! 37. ftp://gcc.gnu.org/pub/gcc/infrastructure/
diff -Nrcpad gcc-4.0.3/faq.html gcc-4.0.4/faq.html
*** gcc-4.0.3/faq.html 2006-03-09 20:48:44.000000000 +0000
--- gcc-4.0.4/faq.html 2007-01-31 10:32:49.000000000 +0000
***************
*** 14,20 ****
This FAQ tries to answer specific questions concerning GCC. For
general information regarding C, C++, resp. Fortran please check the
comp.lang.c FAQ,
! comp.std.c++
FAQ,
and the Fortran
Information page.
--- 14,20 ----
This FAQ tries to answer specific questions concerning GCC. For
general information regarding C, C++, resp. Fortran please check the
comp.lang.c FAQ,
! comp.std.c++
FAQ,
and the Fortran
Information page.
*************** Information page.
*** 29,35 ****
- General information
- - What is the relationship between GCC and EGCS?
- What is an open development model?
- How do I get a bug fixed or a feature added?
- Does GCC work on my platform?
--- 29,34 ----
*************** Information page.
*** 53,63 ****
- How can I run the test suite with multiple options?
- - Older versions of GCC
-
- - Is there a stringstream / sstream for GCC 2.95.2?
-
-
- Miscellaneous
- Friend Templates
--- 52,57 ----
*************** Information page.
*** 74,99 ****
General information
-
-
- In 1990/1991 gcc version 1 had reached a point of stability. For the
- targets it could support, it worked well. It had limitations inherent in
- its design that would be difficult to resolve, so a major effort was made
- to resolve those limitations and gcc version 2 was the result.
-
- When we had gcc2 in a useful state, development efforts on gcc1 stopped
- and we all concentrated on making gcc2 better than gcc1 could ever be. This
- is the kind of step forward we wanted to make with the EGCS project when it
- was formed in 1997.
-
- In April 1999 the Free Software Foundation officially halted
- development on the gcc2 compiler and appointed the EGCS project as the
- official GCC maintainers. The net result was a single project which
- carries forward GCC development under the ultimate control of the
- GCC Steering Committee.
-
-
-
We are using a bazaar style
--- 68,73 ----
*************** disadvantages.
*** 176,182 ****
-
The host/target specific installation notes for GCC include information
--- 150,155 ----
*************** no additional flags.
*** 415,429 ****
This technique is particularly useful on multilibbed targets.
-
-
- Older versions of GCC and EGCS
-
-
-
- Yes, it's at:
-
- http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream.
--- 388,393 ----
diff -Nrcpad gcc-4.0.3/fastjar/ChangeLog gcc-4.0.4/fastjar/ChangeLog
*** gcc-4.0.3/fastjar/ChangeLog 2006-03-09 20:45:24.000000000 +0000
--- gcc-4.0.4/fastjar/ChangeLog 2007-01-31 10:24:12.000000000 +0000
***************
*** 1,3 ****
--- 1,15 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
+ 2006-08-04 Matthias Klose
+
+ PR fastjar/28359 / CVE-2006-3619
+
+ 2006-07-17 Richard Guenther
+ * jartool.c (extract_jar): Do not allow directory traversal
+ to parents of the extraction root.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/fastjar/fastjar.1 gcc-4.0.4/fastjar/fastjar.1
*** gcc-4.0.3/fastjar/fastjar.1 2006-03-09 21:12:20.000000000 +0000
--- gcc-4.0.4/fastjar/fastjar.1 2007-01-31 11:48:07.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "FASTJAR 1"
! .TH FASTJAR 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
fastjar \- archive tool for Java archives
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "FASTJAR 1"
! .TH FASTJAR 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
fastjar \- archive tool for Java archives
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/fastjar/fastjar.info gcc-4.0.4/fastjar/fastjar.info
*** gcc-4.0.3/fastjar/fastjar.info 2006-03-09 21:12:18.000000000 +0000
--- gcc-4.0.4/fastjar/fastjar.info 2007-01-31 11:47:58.000000000 +0000
***************
*** 1,5 ****
This is fastjar.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/fastjar/fastjar.texi.
INFO-DIR-SECTION Programming
START-INFO-DIR-ENTRY
--- 1,5 ----
This is fastjar.info, produced by makeinfo version 4.8 from
! /home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/fastjar/fastjar.texi.
INFO-DIR-SECTION Programming
START-INFO-DIR-ENTRY
*************** GNU Library General Public License inste
*** 502,510 ****
Tag Table:
! Node: Top889
! Node: Invoking fastjar1207
! Node: Invoking grepjar2907
! Node: Copying3518
End Tag Table
--- 502,510 ----
Tag Table:
! Node: Top886
! Node: Invoking fastjar1204
! Node: Invoking grepjar2904
! Node: Copying3515
End Tag Table
diff -Nrcpad gcc-4.0.3/fastjar/grepjar.1 gcc-4.0.4/fastjar/grepjar.1
*** gcc-4.0.3/fastjar/grepjar.1 2006-03-09 21:12:20.000000000 +0000
--- gcc-4.0.4/fastjar/grepjar.1 2007-01-31 11:48:08.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GREPJAR 1"
! .TH GREPJAR 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
grepjar \- search files in a jar file for a pattern
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GREPJAR 1"
! .TH GREPJAR 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
grepjar \- search files in a jar file for a pattern
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/fastjar/jartool.c gcc-4.0.4/fastjar/jartool.c
*** gcc-4.0.3/fastjar/jartool.c 2006-02-02 00:50:08.000000000 +0000
--- gcc-4.0.4/fastjar/jartool.c 2006-08-05 09:43:02.000000000 +0000
*************** int extract_jar(int fd, char **files, in
*** 1724,1729 ****
--- 1724,1730 ----
const ub1 *start = filename;
char *tmp_buff;
struct stat sbuf;
+ int depth = 0;
tmp_buff = malloc(sizeof(char) * strlen((const char *)filename));
*************** int extract_jar(int fd, char **files, in
*** 1744,1750 ****
#ifdef DEBUG
printf("checking the existance of %s\n", tmp_buff);
#endif
!
if(stat(tmp_buff, &sbuf) < 0){
if(errno != ENOENT){
perror("stat");
--- 1745,1758 ----
#ifdef DEBUG
printf("checking the existance of %s\n", tmp_buff);
#endif
! if(strcmp(tmp_buff, "..") == 0){
! --depth;
! if (depth < 0){
! fprintf(stderr, "Traversal to parent directories during unpacking!\n");
! exit(1);
! }
! } else if (strcmp(tmp_buff, ".") != 0)
! ++depth;
if(stat(tmp_buff, &sbuf) < 0){
if(errno != ENOENT){
perror("stat");
diff -Nrcpad gcc-4.0.3/fixincludes/ChangeLog gcc-4.0.4/fixincludes/ChangeLog
*** gcc-4.0.3/fixincludes/ChangeLog 2006-03-09 20:46:06.000000000 +0000
--- gcc-4.0.4/fixincludes/ChangeLog 2007-01-31 10:25:06.000000000 +0000
***************
*** 1,3 ****
--- 1,66 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
+ 2006-10-15 John David Anglin
+
+ PR target/29300
+ * inclhack.def (hpux_pthread_initializers): New hack.
+ * tests/base/sys/pthread.h: New file.
+
+ * fixincl.x: Regenerate.
+
+ 2006-10-03 Uros Bizjak
+
+ * inclhack.def (glibc_mutex_init): Also fix
+ PTHREAD_MUTEX_(RECURSIVE|ERRORCHECK|ADAPTIVE)_NP and
+ PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP initializers.
+ * tests/base/pthread.h: Update.
+
+ * fixincl.x: Regenerate.
+
+ 2006-10-01 Uros Bizjak
+
+ * inclhack.def (glibc_mutex_init): New fix.
+ * tests/base/pthread.h: Update.
+
+ * fixincl.x: Regenerate.
+
+ 2006-09-29 Kaveh R. Ghazi
+
+ * inclhack.def (solaris_mutex_init_2): Update for Solaris9.
+ Prevent it from running on solaris10 or later.
+ (solaris_once_init_2): Fix comment.
+ * tests/base/pthread.h: Update.
+
+ * fixincl.x: Regenerate.
+
+ 2006-09-27 Kaveh R. Ghazi
+
+ * inclhack.def (solaris_once_init_2): New fix.
+ * tests/base/pthread.h: Update.
+
+ * fixincl.x: Regenerate.
+
+ 2006-09-27 Kaveh R. Ghazi
+
+ * inclhack.def (solaris_mutex_init_2): Remove test for
+ PTHREAD_RWLOCK_INITIALIZER.
+ (solaris_rwlock_init_1): New.
+ * tests/base/pthread.h: Update.
+
+ * inclhack.def (solaris_once_init_1): New.
+ * tests/base/pthread.h: Adjust for new fix.
+
+ * fixincl.x: Regenerate.
+
+ 2006-03-16 Steve Ellcey
+
+ PR target/26189
+ Backport from mainline.
+ * inclhack.def (hpux_spu_info): New.
+ * fixincl.x: Regenerate
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/fixincludes/fixincl.x gcc-4.0.4/fixincludes/fixincl.x
*** gcc-4.0.3/fixincludes/fixincl.x 2005-09-15 19:11:59.000000000 +0000
--- gcc-4.0.4/fixincludes/fixincl.x 2006-10-15 22:58:29.000000000 +0000
***************
*** 2,12 ****
*
* DO NOT EDIT THIS FILE (fixincl.x)
*
! * It has been AutoGen-ed Thursday September 15, 2005 at 07:10:16 PM UTC
* From the definitions inclhack.def
* and the template file fixincl
*/
! /* DO NOT CVS-MERGE THIS FILE, EITHER Thu Sep 15 19:10:16 UTC 2005
*
* You must regenerate it. Use the ./genfixes script.
*
--- 2,12 ----
*
* DO NOT EDIT THIS FILE (fixincl.x)
*
! * It has been AutoGen-ed Sunday October 15, 2006 at 06:57:07 PM EDT
* From the definitions inclhack.def
* and the template file fixincl
*/
! /* DO NOT CVS-MERGE THIS FILE, EITHER Sun Oct 15 18:57:08 EDT 2006
*
* You must regenerate it. Use the ./genfixes script.
*
***************
*** 15,21 ****
* certain ANSI-incompatible system header files which are fixed to work
* correctly with ANSI C and placed in a directory that GNU C will search.
*
! * This file contains 191 fixup descriptions.
*
* See README for more information.
*
--- 15,21 ----
* certain ANSI-incompatible system header files which are fixed to work
* correctly with ANSI C and placed in a directory that GNU C will search.
*
! * This file contains 197 fixup descriptions.
*
* See README for more information.
*
*************** static const char* apzFreebsd_Gcc4_Break
*** 1988,1993 ****
--- 1988,2032 ----
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
+ * Description of Glibc_Mutex_Init fix
+ */
+ tSCC zGlibc_Mutex_InitName[] =
+ "glibc_mutex_init";
+
+ /*
+ * File name selection pattern
+ */
+ tSCC zGlibc_Mutex_InitList[] =
+ "|pthread.h|";
+ /*
+ * Machine/OS name selection pattern
+ */
+ #define apzGlibc_Mutex_InitMachs (const char**)NULL
+
+ /*
+ * content selection pattern - do fix if pattern found
+ */
+ tSCC zGlibc_Mutex_InitSelect0[] =
+ "\\{ *\\{ *0, *\\} *\\}";
+
+ #define GLIBC_MUTEX_INIT_TEST_CT 1
+ static tTestDesc aGlibc_Mutex_InitTests[] = {
+ { TT_EGREP, zGlibc_Mutex_InitSelect0, (regex_t*)NULL }, };
+
+ /*
+ * Fix Command Arguments for Glibc_Mutex_Init
+ */
+ static const char* apzGlibc_Mutex_InitPatch[] = { "sed",
+ "-e", "/define[ \t]\\+PTHREAD_MUTEX_INITIALIZER[ \t]*\\\\/,+1s/{ { 0, } }/{ { 0, 0, 0, 0, 0, 0 } }/",
+ "-e", "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_\\(RECURSIVE\\|ERRORCHECK\\|ADAPTIVE\\)_NP\\) }/{ \\1, 0 }/",
+ "-e", "s/{ \\(0, 0, 0, PTHREAD_MUTEX_\\(RECURSIVE\\|ERRORCHECK\\|ADAPTIVE\\)_NP\\) }/{ \\1, 0, 0 }/",
+ "-e", "/define[ \t]\\+PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\/N;s/^[ \t]*#[ \t]*\\(define[ \t]\\+PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\\\)\\n[ \t]*{ { 0, } }/# if __WORDSIZE == 64\\n# \\1\\n { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }\\n# else\\n# \\1\\n { { 0, 0, 0, 0, 0, 0, 0, 0 } }\\n# endif/",
+ "-e", "s/{ \\(0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP\\) }/{ \\1, 0 }/",
+ "-e", "/define[ \t]\\+PTHREAD_COND_INITIALIZER/s/{ { 0, } }/{ { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }/",
+ (char*)NULL };
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
* Description of Gnu_Types fix
*/
tSCC zGnu_TypesName[] =
*************** static const char* apzHpux_SystimePatch[
*** 2765,2770 ****
--- 2804,2848 ----
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
+ * Description of Hpux_Spu_Info fix
+ */
+ tSCC zHpux_Spu_InfoName[] =
+ "hpux_spu_info";
+
+ /*
+ * File name selection pattern
+ */
+ tSCC zHpux_Spu_InfoList[] =
+ "|ia64/sys/getppdp.h|";
+ /*
+ * Machine/OS name selection pattern
+ */
+ tSCC* apzHpux_Spu_InfoMachs[] = {
+ "*-hp-hpux*",
+ (const char*)NULL };
+
+ /*
+ * content selection pattern - do fix if pattern found
+ */
+ tSCC zHpux_Spu_InfoSelect0[] =
+ "^.*extern.*spu_info.*";
+
+ #define HPUX_SPU_INFO_TEST_CT 1
+ static tTestDesc aHpux_Spu_InfoTests[] = {
+ { TT_EGREP, zHpux_Spu_InfoSelect0, (regex_t*)NULL }, };
+
+ /*
+ * Fix Command Arguments for Hpux_Spu_Info
+ */
+ static const char* apzHpux_Spu_InfoPatch[] = {
+ "format",
+ "#ifdef _KERNEL\n\
+ %0\n\
+ #endif",
+ (char*)NULL };
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
* Description of Huge_Val_Hex fix
*/
tSCC zHuge_Val_HexName[] =
*************** static const char* apzIp_Missing_SemiPat
*** 3035,3040 ****
--- 3113,3158 ----
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
+ * Description of Hpux_Pthread_Initializers fix
+ */
+ tSCC zHpux_Pthread_InitializersName[] =
+ "hpux_pthread_initializers";
+
+ /*
+ * File name selection pattern
+ */
+ tSCC zHpux_Pthread_InitializersList[] =
+ "|sys/pthread.h|";
+ /*
+ * Machine/OS name selection pattern
+ */
+ tSCC* apzHpux_Pthread_InitializersMachs[] = {
+ "*-hp-hpux11.[0-3]*",
+ (const char*)NULL };
+ #define HPUX_PTHREAD_INITIALIZERS_TEST_CT 0
+ #define aHpux_Pthread_InitializersTests (tTestDesc*)NULL
+
+ /*
+ * Fix Command Arguments for Hpux_Pthread_Initializers
+ */
+ static const char* apzHpux_Pthread_InitializersPatch[] = { "sed",
+ "-e", "s@^[ \t]*1, 1, 1, 1,[ \t]*\\\\@\t{ 1, 1, 1, 1 },\t\t\t\t\t\t\t\\\\@",
+ "-e", "s@^[ \t]*1,[ \t]*\\\\@\t{ 1, 0 }@",
+ "-e", "/^[ \t]*0$/d",
+ "-e", "s@__PTHREAD_MUTEX_VALID, 0@{ __PTHREAD_MUTEX_VALID, 0 }@",
+ "-e", "s@^[ \t]*0, 0, -1, 0,[ \t]*\\\\@\t{ 0, 0, -1, 0 },\t\t\t\t\t\t\\\\@",
+ "-e", "s@0, __LWP_MTX_VALID, 0, 1, 1, 1, 1,[ \t]*\\\\@{ 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 },\t\t\t\\\\@",
+ "-e", "s@^[ \t]*__LWP_MTX_VALID, 0, 1, 1, 1, 1,[ \t]*\\\\@\t{ 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 },\t\t\t\\\\@",
+ "-e", "s@^[ \t]*0, 0[ \t]*\\\\@\t{ 0, 0 }\t\t\t\t\t\t\t\\\\@",
+ "-e", "s@__PTHREAD_COND_VALID, 0@{ __PTHREAD_COND_VALID, 0 }@",
+ "-e", "s@__LWP_COND_VALID, 0,[ \t]*\\\\@{ __LWP_COND_VALID, 0 },\t\t\t\t\t\\\\@",
+ "-e", "s@__PTHREAD_RWLOCK_VALID, 0@{ __PTHREAD_RWLOCK_VALID, 0 }@",
+ "-e", "s@__LWP_RWLOCK_VALID, 0,[ \t]*\\\\@{ __LWP_RWLOCK_VALID, 0 },\t\t\t\t\t\\\\@",
+ "-e", "s@^[ \t]*0, 0, 0, 0, 0, 0, 0[ \t]*\\\\@\t{ 0, 0, 0, 0, 0 }, { 0, 0}\t\t\t\t\t\\\\@",
+ (char*)NULL };
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
* Description of Irix___Restrict fix
*/
tSCC zIrix___RestrictName[] =
*************** tSCC zSolaris_Mutex_Init_2List[] =
*** 5194,5200 ****
/*
* Machine/OS name selection pattern
*/
! #define apzSolaris_Mutex_Init_2Machs (const char**)NULL
/*
* content selection pattern - do fix if pattern found
--- 5312,5321 ----
/*
* Machine/OS name selection pattern
*/
! tSCC* apzSolaris_Mutex_Init_2Machs[] = {
! "*-*-solaris2.[0-9]",
! "*-*-solaris2.[0-9][!0-9]*",
! (const char*)NULL };
/*
* content selection pattern - do fix if pattern found
*************** static const char* apzSolaris_Mutex_Init
*** 5214,5222 ****
"#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n\
%0\n\
#else\n\
! %1, {0}}%3\n\
#endif",
! "(^#define[ \t]+PTHREAD_(MUTEX|COND)_INITIALIZER[ \t]+\\{.*),[ \t]*0\\}(|[ \t].*)$",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
--- 5335,5467 ----
"#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n\
%0\n\
#else\n\
! %1, {0}}%4\n\
#endif",
! "(^#define[ \t]+PTHREAD_(MUTEX|COND)_INITIALIZER[ \t]+(|/*.**/[ \t]*\\\\\n\
! [ \t]*)\\{.*),[ \t]*0\\}(|[ \t].*)$",
! (char*)NULL };
!
! /* * * * * * * * * * * * * * * * * * * * * * * * * *
! *
! * Description of Solaris_Rwlock_Init_1 fix
! */
! tSCC zSolaris_Rwlock_Init_1Name[] =
! "solaris_rwlock_init_1";
!
! /*
! * File name selection pattern
! */
! tSCC zSolaris_Rwlock_Init_1List[] =
! "|pthread.h|";
! /*
! * Machine/OS name selection pattern
! */
! tSCC* apzSolaris_Rwlock_Init_1Machs[] = {
! "*-*-solaris*",
! (const char*)NULL };
!
! /*
! * content selection pattern - do fix if pattern found
! */
! tSCC zSolaris_Rwlock_Init_1Select0[] =
! "@\\(#\\)pthread.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
!
! #define SOLARIS_RWLOCK_INIT_1_TEST_CT 1
! static tTestDesc aSolaris_Rwlock_Init_1Tests[] = {
! { TT_EGREP, zSolaris_Rwlock_Init_1Select0, (regex_t*)NULL }, };
!
! /*
! * Fix Command Arguments for Solaris_Rwlock_Init_1
! */
! static const char* apzSolaris_Rwlock_Init_1Patch[] = {
! "format",
! "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n\
! %0\n\
! #else\n\
! %1{0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}}\n\
! #endif",
! "(^#define[ \t]+PTHREAD_RWLOCK_INITIALIZER[ \t]+)\\{0, 0, 0, \\{0, 0, 0\\}, \\{0, 0\\}, \\{0, 0\\}\\}[ \t]*$",
! (char*)NULL };
!
! /* * * * * * * * * * * * * * * * * * * * * * * * * *
! *
! * Description of Solaris_Once_Init_1 fix
! */
! tSCC zSolaris_Once_Init_1Name[] =
! "solaris_once_init_1";
!
! /*
! * File name selection pattern
! */
! tSCC zSolaris_Once_Init_1List[] =
! "|pthread.h|";
! /*
! * Machine/OS name selection pattern
! */
! tSCC* apzSolaris_Once_Init_1Machs[] = {
! "*-*-solaris*",
! (const char*)NULL };
!
! /*
! * content selection pattern - do fix if pattern found
! */
! tSCC zSolaris_Once_Init_1Select0[] =
! "@\\(#\\)pthread.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
!
! #define SOLARIS_ONCE_INIT_1_TEST_CT 1
! static tTestDesc aSolaris_Once_Init_1Tests[] = {
! { TT_EGREP, zSolaris_Once_Init_1Select0, (regex_t*)NULL }, };
!
! /*
! * Fix Command Arguments for Solaris_Once_Init_1
! */
! static const char* apzSolaris_Once_Init_1Patch[] = {
! "format",
! "%1{%2}%3",
! "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{)([^}]+)(\\})[ \t]*$",
! (char*)NULL };
!
! /* * * * * * * * * * * * * * * * * * * * * * * * * *
! *
! * Description of Solaris_Once_Init_2 fix
! */
! tSCC zSolaris_Once_Init_2Name[] =
! "solaris_once_init_2";
!
! /*
! * File name selection pattern
! */
! tSCC zSolaris_Once_Init_2List[] =
! "|pthread.h|";
! /*
! * Machine/OS name selection pattern
! */
! tSCC* apzSolaris_Once_Init_2Machs[] = {
! "*-*-solaris2.[0-9]",
! "*-*-solaris2.[0-9][!0-9]*",
! (const char*)NULL };
!
! /*
! * content selection pattern - do fix if pattern found
! */
! tSCC zSolaris_Once_Init_2Select0[] =
! "@\\(#\\)pthread.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
!
! #define SOLARIS_ONCE_INIT_2_TEST_CT 1
! static tTestDesc aSolaris_Once_Init_2Tests[] = {
! { TT_EGREP, zSolaris_Once_Init_2Select0, (regex_t*)NULL }, };
!
! /*
! * Fix Command Arguments for Solaris_Once_Init_2
! */
! static const char* apzSolaris_Once_Init_2Patch[] = {
! "format",
! "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n\
! %0\n\
! #else\n\
! %1{0}, {0}, {0}, {%3}%4\n\
! #endif",
! "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{\\{)(0, 0, 0, )(PTHREAD_[A-Z_]+)(\\}\\})[ \t]*$",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*************** static const char* apzX11_SprintfPatch[]
*** 7700,7708 ****
*
* List of all fixes
*/
! #define REGEX_COUNT 233
#define MACH_LIST_SIZE_LIMIT 261
! #define FIX_COUNT 191
/*
* Enumerate the fixes
--- 7945,7953 ----
*
* List of all fixes
*/
! #define REGEX_COUNT 238
#define MACH_LIST_SIZE_LIMIT 261
! #define FIX_COUNT 197
/*
* Enumerate the fixes
*************** typedef enum {
*** 7755,7760 ****
--- 8000,8006 ----
EXCEPTION_STRUCTURE_FIXIDX,
FREEBSD_GCC3_BREAKAGE_FIXIDX,
FREEBSD_GCC4_BREAKAGE_FIXIDX,
+ GLIBC_MUTEX_INIT_FIXIDX,
GNU_TYPES_FIXIDX,
HP_INLINE_FIXIDX,
HP_SYSFILE_FIXIDX,
*************** typedef enum {
*** 7774,7779 ****
--- 8020,8026 ----
HPUX_HTONL_FIXIDX,
HPUX_LONG_DOUBLE_FIXIDX,
HPUX_SYSTIME_FIXIDX,
+ HPUX_SPU_INFO_FIXIDX,
HUGE_VAL_HEX_FIXIDX,
HUGE_VALF_HEX_FIXIDX,
HUGE_VALL_HEX_FIXIDX,
*************** typedef enum {
*** 7781,7786 ****
--- 8028,8034 ----
IO_QUOTES_DEF_FIXIDX,
IO_QUOTES_USE_FIXIDX,
IP_MISSING_SEMI_FIXIDX,
+ HPUX_PTHREAD_INITIALIZERS_FIXIDX,
IRIX___RESTRICT_FIXIDX,
IRIX___GENERIC1_FIXIDX,
IRIX___GENERIC2_FIXIDX,
*************** typedef enum {
*** 7836,7841 ****
--- 8084,8092 ----
SOLARIS_MATH_9_FIXIDX,
SOLARIS_MUTEX_INIT_1_FIXIDX,
SOLARIS_MUTEX_INIT_2_FIXIDX,
+ SOLARIS_RWLOCK_INIT_1_FIXIDX,
+ SOLARIS_ONCE_INIT_1_FIXIDX,
+ SOLARIS_ONCE_INIT_2_FIXIDX,
SOLARIS_SOCKET_FIXIDX,
SOLARIS_STDIO_TAG_FIXIDX,
SOLARIS_UNISTD_FIXIDX,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 8137,8142 ****
--- 8388,8398 ----
FREEBSD_GCC4_BREAKAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aFreebsd_Gcc4_BreakageTests, apzFreebsd_Gcc4_BreakagePatch, 0 },
+ { zGlibc_Mutex_InitName, zGlibc_Mutex_InitList,
+ apzGlibc_Mutex_InitMachs,
+ GLIBC_MUTEX_INIT_TEST_CT, FD_MACH_ONLY,
+ aGlibc_Mutex_InitTests, apzGlibc_Mutex_InitPatch, 0 },
+
{ zGnu_TypesName, zGnu_TypesList,
apzGnu_TypesMachs,
GNU_TYPES_TEST_CT, FD_MACH_IFNOT | FD_SUBROUTINE,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 8232,8237 ****
--- 8488,8498 ----
HPUX_SYSTIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aHpux_SystimeTests, apzHpux_SystimePatch, 0 },
+ { zHpux_Spu_InfoName, zHpux_Spu_InfoList,
+ apzHpux_Spu_InfoMachs,
+ HPUX_SPU_INFO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aHpux_Spu_InfoTests, apzHpux_Spu_InfoPatch, 0 },
+
{ zHuge_Val_HexName, zHuge_Val_HexList,
apzHuge_Val_HexMachs,
HUGE_VAL_HEX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 8267,8272 ****
--- 8528,8538 ----
IP_MISSING_SEMI_TEST_CT, FD_MACH_ONLY,
aIp_Missing_SemiTests, apzIp_Missing_SemiPatch, 0 },
+ { zHpux_Pthread_InitializersName, zHpux_Pthread_InitializersList,
+ apzHpux_Pthread_InitializersMachs,
+ HPUX_PTHREAD_INITIALIZERS_TEST_CT, FD_MACH_ONLY,
+ aHpux_Pthread_InitializersTests, apzHpux_Pthread_InitializersPatch, 0 },
+
{ zIrix___RestrictName, zIrix___RestrictList,
apzIrix___RestrictMachs,
IRIX___RESTRICT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 8542,8547 ****
--- 8808,8828 ----
SOLARIS_MUTEX_INIT_2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aSolaris_Mutex_Init_2Tests, apzSolaris_Mutex_Init_2Patch, 0 },
+ { zSolaris_Rwlock_Init_1Name, zSolaris_Rwlock_Init_1List,
+ apzSolaris_Rwlock_Init_1Machs,
+ SOLARIS_RWLOCK_INIT_1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aSolaris_Rwlock_Init_1Tests, apzSolaris_Rwlock_Init_1Patch, 0 },
+
+ { zSolaris_Once_Init_1Name, zSolaris_Once_Init_1List,
+ apzSolaris_Once_Init_1Machs,
+ SOLARIS_ONCE_INIT_1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aSolaris_Once_Init_1Tests, apzSolaris_Once_Init_1Patch, 0 },
+
+ { zSolaris_Once_Init_2Name, zSolaris_Once_Init_2List,
+ apzSolaris_Once_Init_2Machs,
+ SOLARIS_ONCE_INIT_2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aSolaris_Once_Init_2Tests, apzSolaris_Once_Init_2Patch, 0 },
+
{ zSolaris_SocketName, zSolaris_SocketList,
apzSolaris_SocketMachs,
SOLARIS_SOCKET_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
diff -Nrcpad gcc-4.0.3/fixincludes/inclhack.def gcc-4.0.4/fixincludes/inclhack.def
*** gcc-4.0.3/fixincludes/inclhack.def 2005-09-15 19:11:59.000000000 +0000
--- gcc-4.0.4/fixincludes/inclhack.def 2006-10-15 22:58:29.000000000 +0000
*************** fix = {
*** 1161,1166 ****
--- 1161,1229 ----
};
+ /* glibc-2.3.5 defines pthread mutex initializers incorrectly,
+ * so we replace them with versions that correspond to the
+ * definition.
+ */
+ fix = {
+ hackname = glibc_mutex_init;
+ files = pthread.h;
+ select = '\{ *\{ *0, *\} *\}';
+ sed = "/define[ \t]\\+PTHREAD_MUTEX_INITIALIZER[ \t]*\\\\/,+1"
+ "s/{ { 0, } }/{ { 0, 0, 0, 0, 0, 0 } }/";
+ sed = "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_\\(RECURSIVE\\|ERRORCHECK\\|ADAPTIVE\\)_NP\\) }/{ \\1, 0 }/";
+ sed = "s/{ \\(0, 0, 0, PTHREAD_MUTEX_\\(RECURSIVE\\|ERRORCHECK\\|ADAPTIVE\\)_NP\\) }/{ \\1, 0, 0 }/";
+ sed = "/define[ \t]\\+PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\/"
+ "N;s/^[ \t]*#[ \t]*"
+ "\\(define[ \t]\\+PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\\\)\\n"
+ "[ \t]*{ { 0, } }/# if __WORDSIZE == 64\\n"
+ "# \\1\\n"
+ " { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }\\n"
+ "# else\\n"
+ "# \\1\\n"
+ " { { 0, 0, 0, 0, 0, 0, 0, 0 } }\\n"
+ "# endif/";
+ sed = "s/{ \\(0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP\\) }/{ \\1, 0 }/";
+ sed = "/define[ \t]\\+PTHREAD_COND_INITIALIZER/"
+ "s/{ { 0, } }/{ { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }/";
+
+ test_text = <<- _EOText_
+ #define PTHREAD_MUTEX_INITIALIZER \\
+ { { 0, } }
+ #ifdef __USE_GNU
+ # if __WORDSIZE == 64
+ # define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \\
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }
+ # define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \\
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }
+ # define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \\
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }
+ # else
+ # define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \\
+ { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }
+ # define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \\
+ { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }
+ # define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \\
+ { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }
+ # endif
+ #endif
+ # define PTHREAD_RWLOCK_INITIALIZER \\
+ { { 0, } }
+ # ifdef __USE_GNU
+ # if __WORDSIZE == 64
+ # define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \\
+ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \\
+ PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
+ # else
+ # define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \\
+ { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
+ # endif
+ # endif
+ #define PTHREAD_COND_INITIALIZER { { 0, } }
+ _EOText_;
+ };
+
+
/*
* Fix these files to use the types we think they should for
* ptrdiff_t, size_t, and wchar_t.
*************** fix = {
*** 1574,1579 ****
--- 1637,1659 ----
/*
+ * Wrap spu_info in ifdef _KERNEL. GCC cannot handle an array of unknown
+ * type and mpinfou is only defined when _KERNEL is set.
+ */
+ fix = {
+ hackname = hpux_spu_info;
+ mach = "*-hp-hpux*";
+ files = ia64/sys/getppdp.h;
+ select = "^.*extern.*spu_info.*";
+
+ c_fix = format;
+ c_fix_arg = "#ifdef _KERNEL\n%0\n#endif";
+
+ test_text = "extern union mpinfou spu_info[];";
+ };
+
+
+ /*
* Fix glibc definition of HUGE_VAL in terms of hex floating point constant
*/
fix = {
*************** fix = {
*** 1697,1702 ****
--- 1777,1823 ----
"}; /* mumbled struct */\n";
};
+ /*
+ * Add missing braces to pthread initializer defines.
+ */
+ fix = {
+ hackname = hpux_pthread_initializers;
+ mach = "*-hp-hpux11.[0-3]*";
+ files = sys/pthread.h;
+ sed = "s@^[ \t]*1, 1, 1, 1,[ \t]*\\\\"
+ "@\t{ 1, 1, 1, 1 },\t\t\t\t\t\t\t\\\\@";
+ sed = "s@^[ \t]*1,[ \t]*\\\\"
+ "@\t{ 1, 0 }@";
+ sed = "/^[ \t]*0$/d";
+ sed = "s@__PTHREAD_MUTEX_VALID, 0"
+ "@{ __PTHREAD_MUTEX_VALID, 0 }@";
+ sed = "s@^[ \t]*0, 0, -1, 0,[ \t]*\\\\"
+ "@\t{ 0, 0, -1, 0 },\t\t\t\t\t\t\\\\@";
+ sed = "s@0, __LWP_MTX_VALID, 0, 1, 1, 1, 1,[ \t]*\\\\"
+ "@{ 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 },\t\t\t\\\\@";
+ sed = "s@^[ \t]*__LWP_MTX_VALID, 0, 1, 1, 1, 1,[ \t]*\\\\"
+ "@\t{ 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 },\t\t\t\\\\@";
+ sed = "s@^[ \t]*0, 0[ \t]*\\\\"
+ "@\t{ 0, 0 }\t\t\t\t\t\t\t\\\\@";
+ sed = "s@__PTHREAD_COND_VALID, 0"
+ "@{ __PTHREAD_COND_VALID, 0 }@";
+ sed = "s@__LWP_COND_VALID, 0,[ \t]*\\\\"
+ "@{ __LWP_COND_VALID, 0 },\t\t\t\t\t\\\\@";
+ sed = "s@__PTHREAD_RWLOCK_VALID, 0"
+ "@{ __PTHREAD_RWLOCK_VALID, 0 }@";
+ sed = "s@__LWP_RWLOCK_VALID, 0,[ \t]*\\\\"
+ "@{ __LWP_RWLOCK_VALID, 0 },\t\t\t\t\t\\\\@";
+ sed = "s@^[ \t]*0, 0, 0, 0, 0, 0, 0[ \t]*\\\\"
+ "@\t{ 0, 0, 0, 0, 0 }, { 0, 0}\t\t\t\t\t\\\\@";
+ test_text = "#define PTHREAD_MUTEX_INITIALIZER {\t\t\t\t\t\\\\\n"
+ "\t__PTHREAD_MUTEX_VALID, 0,\t\t\t\t\t\\\\\n"
+ "\t(PTHREAD_MUTEX_DEFAULT | PTHREAD_PROCESS_PRIVATE),\t\t\\\\\n"
+ "\t__SPNLCK_INITIALIZER,\t\t\t\t\t\t\\\\\n"
+ "\t0, 0, -1, 0,\t\t\t\t\t\t\t\\\\\n"
+ "\t0, __LWP_MTX_VALID, 0, 1, 1, 1, 1,\t\t\t\t\\\\\n"
+ "\t0, 0\t\t\t\t\t\t\t\t\\\\\n"
+ "}\n";
+ };
/*
* IRIX 6.5.1[89] unconditionally defines
*************** fix = {
*** 2817,2836 ****
hackname = solaris_mutex_init_2;
select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = pthread.h;
c_fix = format;
c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
"%0\n"
"#else\n"
! "%1, {0}}%3\n"
"#endif";
! c_fix_arg = "(^#define[ \t]+PTHREAD_(MUTEX|COND)_INITIALIZER[ \t]+\\{.*)"
",[ \t]*0\\}" "(|[ \t].*)$";
test_text =
'#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n"
"#define PTHREAD_MUTEX_INITIALIZER\t{{{0},0}, {{{0}}}, 0}\n"
"#define PTHREAD_COND_INITIALIZER\t{{{0}, 0}, 0}\t/* DEFAULTCV */\n"
! "#define PTHREAD_RWLOCK_INITIALIZER\t"
! "{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}";
};
--- 2938,3047 ----
hackname = solaris_mutex_init_2;
select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = pthread.h;
+ /*
+ * On Solaris 10, this fix is unnecessary because upad64_t is
+ * always defined correctly regardless of the definition of the
+ * __STDC__ macro. The first "mach" pattern matches up to
+ * solaris9. The second "mach" pattern will not match any two (or
+ * more) digit solaris version, but it will match e.g. 2.5.1.
+ */
+ mach = '*-*-solaris2.[0-9]', '*-*-solaris2.[0-9][!0-9]*';
c_fix = format;
c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
"%0\n"
"#else\n"
! "%1, {0}}%4\n"
"#endif";
! c_fix_arg = "(^#define[ \t]+PTHREAD_(MUTEX|COND)_INITIALIZER[ \t]+"
! "(|/\*.*\*/[ \t]*\\\\\n[ \t]*)\\{.*)"
",[ \t]*0\\}" "(|[ \t].*)$";
test_text =
'#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n"
"#define PTHREAD_MUTEX_INITIALIZER\t{{{0},0}, {{{0}}}, 0}\n"
"#define PTHREAD_COND_INITIALIZER\t{{{0}, 0}, 0}\t/* DEFAULTCV */\n"
! "#define PTHREAD_MUTEX_INITIALIZER /* = DEFAULTMUTEX */ \\\\\n"
! " {{0, 0, 0, DEFAULT_TYPE, _MUTEX_MAGIC}, {{{0}}}, 0}\n"
! "#define PTHREAD_COND_INITIALIZER /* = DEFAULTCV */ \\\\\n"
! " {{{0, 0, 0, 0}, DEFAULT_TYPE, _COND_MAGIC}, 0}";
! };
!
!
! /*
! * Sun Solaris defines PTHREAD_RWLOCK_INITIALIZER with a "0" for some
! * fields of the pthread_rwlock_t structure, which are of type
! * upad64_t, which itself is typedef'd to int64_t, but with __STDC__
! * defined (e.g. by -ansi) it is a union. So change the initializer
! * to "{0}" instead.
! */
! fix = {
! hackname = solaris_rwlock_init_1;
! select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
! files = pthread.h;
! mach = '*-*-solaris*';
! c_fix = format;
! c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
! "%0\n"
! "#else\n"
! "%1{0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}}\n"
! "#endif";
! c_fix_arg = "(^#define[ \t]+PTHREAD_RWLOCK_INITIALIZER[ \t]+)"
! "\\{0, 0, 0, \\{0, 0, 0\\}, \\{0, 0\\}, \\{0, 0\\}\\}[ \t]*$";
!
! test_text =
! '#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n"
! "#define PTHREAD_RWLOCK_INITIALIZER\t{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}";
! };
!
!
! /*
! * Sun Solaris defines PTHREAD_ONCE_INIT as an array containing a
! * structure. As such, it need two levels of brackets, but only
! * contains one. Wrap the macro definition in an extra layer.
! */
! fix = {
! hackname = solaris_once_init_1;
! select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
! files = pthread.h;
! mach = '*-*-solaris*';
! c_fix = format;
! c_fix_arg = "%1{%2}%3";
! c_fix_arg = "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{)([^}]+)(\\})[ \t]*$";
! test_text =
! '#pragma ident "@(#)pthread.h 1.37 04/09/28 SMI"'"\n"
! "#define PTHREAD_ONCE_INIT\t{0, 0, 0, PTHREAD_ONCE_NOTDONE}";
! };
!
!
! /*
! * Sun Solaris defines PTHREAD_ONCE_INIT with a "0" for some
! * fields of the pthread_once_t structure, which are of type
! * upad64_t, which itself is typedef'd to int64_t, but with __STDC__
! * defined (e.g. by -ansi) it is a union. So change the initializer
! * to "{0}" instead. This test relies on solaris_once_init_1.
! */
! fix = {
! hackname = solaris_once_init_2;
! select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
! files = pthread.h;
! /*
! * On Solaris 10, this fix is unnecessary because upad64_t is
! * always defined correctly regardless of the definition of the
! * __STDC__ macro. The first "mach" pattern matches up to
! * solaris9. The second "mach" pattern will not match any two (or
! * more) digit solaris version, but it will match e.g. 2.5.1.
! */
! mach = '*-*-solaris2.[0-9]', '*-*-solaris2.[0-9][!0-9]*';
! c_fix = format;
! c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
! "%0\n"
! "#else\n"
! "%1{0}, {0}, {0}, {%3}%4\n"
! "#endif";
! c_fix_arg = "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{\\{)"
! "(0, 0, 0, )(PTHREAD_[A-Z_]+)(\\}\\})[ \t]*$";
! test_text =
! '#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n"
! "#define PTHREAD_ONCE_INIT\t{{0, 0, 0, PTHREAD_ONCE_NOTDONE}}\n";
};
diff -Nrcpad gcc-4.0.3/fixincludes/tests/base/ia64/sys/getppdp.h gcc-4.0.4/fixincludes/tests/base/ia64/sys/getppdp.h
*** gcc-4.0.3/fixincludes/tests/base/ia64/sys/getppdp.h 1970-01-01 00:00:00.000000000 +0000
--- gcc-4.0.4/fixincludes/tests/base/ia64/sys/getppdp.h 2006-07-30 15:39:08.000000000 +0000
***************
*** 0 ****
--- 1,16 ----
+ /* DO NOT EDIT THIS FILE.
+
+ It has been auto-edited by fixincludes from:
+
+ "fixinc/tests/inc/ia64/sys/getppdp.h"
+
+ This had to be done to correct non-standard usages in the
+ original, manufacturer supplied header file. */
+
+
+
+ #if defined( HPUX_SPU_INFO_CHECK )
+ #ifdef _KERNEL
+ extern union mpinfou spu_info[];
+ #endif
+ #endif /* HPUX_SPU_INFO_CHECK */
diff -Nrcpad gcc-4.0.3/fixincludes/tests/base/pthread.h gcc-4.0.4/fixincludes/tests/base/pthread.h
*** gcc-4.0.3/fixincludes/tests/base/pthread.h 2005-03-21 16:17:54.000000000 +0000
--- gcc-4.0.4/fixincludes/tests/base/pthread.h 2006-10-03 06:42:38.000000000 +0000
***************
*** 56,61 ****
--- 56,102 ----
#endif /* ALPHA_PTHREAD_INIT_CHECK */
+ #if defined( GLIBC_MUTEX_INIT_CHECK )
+ #define PTHREAD_MUTEX_INITIALIZER \
+ { { 0, 0, 0, 0, 0, 0 } }
+ #ifdef __USE_GNU
+ # if __WORDSIZE == 64
+ # define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0 } }
+ # define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0 } }
+ # define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0 } }
+ # else
+ # define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+ { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, 0 } }
+ # define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+ { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, 0 } }
+ # define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+ { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, 0 } }
+ # endif
+ #endif
+ # if __WORDSIZE == 64
+ # define PTHREAD_RWLOCK_INITIALIZER \
+ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+ # else
+ # define PTHREAD_RWLOCK_INITIALIZER \
+ { { 0, 0, 0, 0, 0, 0, 0, 0 } }
+ # endif
+ # ifdef __USE_GNU
+ # if __WORDSIZE == 64
+ # define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
+ # else
+ # define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+ { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 0 } }
+ # endif
+ # endif
+ #define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }
+ #endif /* GLIBC_MUTEX_INIT_CHECK */
+
+
#if defined( PTHREAD_PAGE_SIZE_CHECK )
extern int __page_size;
#endif /* PTHREAD_PAGE_SIZE_CHECK */
*************** extern int __sigsetjmp (struct __jmp_buf
*** 94,103 ****
#else
#define PTHREAD_COND_INITIALIZER {{{0}, 0}, {0}} /* DEFAULTCV */
#endif
! #define PTHREAD_RWLOCK_INITIALIZER {0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}
#endif /* SOLARIS_MUTEX_INIT_2_CHECK */
#if defined( THREAD_KEYWORD_CHECK )
extern int pthread_create (pthread_t *__restrict __thr,
extern int pthread_kill (pthread_t __thr, int __signo);
--- 135,188 ----
#else
#define PTHREAD_COND_INITIALIZER {{{0}, 0}, {0}} /* DEFAULTCV */
#endif
! #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
! #define PTHREAD_MUTEX_INITIALIZER /* = DEFAULTMUTEX */ \
! {{0, 0, 0, DEFAULT_TYPE, _MUTEX_MAGIC}, {{{0}}}, 0}
! #else
! #define PTHREAD_MUTEX_INITIALIZER /* = DEFAULTMUTEX */ \
! {{0, 0, 0, DEFAULT_TYPE, _MUTEX_MAGIC}, {{{0}}}, {0}}
! #endif
! #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
! #define PTHREAD_COND_INITIALIZER /* = DEFAULTCV */ \
! {{{0, 0, 0, 0}, DEFAULT_TYPE, _COND_MAGIC}, 0}
! #else
! #define PTHREAD_COND_INITIALIZER /* = DEFAULTCV */ \
! {{{0, 0, 0, 0}, DEFAULT_TYPE, _COND_MAGIC}, {0}}
! #endif
#endif /* SOLARIS_MUTEX_INIT_2_CHECK */
+ #if defined( SOLARIS_RWLOCK_INIT_1_CHECK )
+ #ident "@(#)pthread.h 1.26 98/04/12 SMI"
+ #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+ #define PTHREAD_RWLOCK_INITIALIZER {0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}
+ #else
+ #define PTHREAD_RWLOCK_INITIALIZER {0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}}
+ #endif
+ #endif /* SOLARIS_RWLOCK_INIT_1_CHECK */
+
+
+ #if defined( SOLARIS_ONCE_INIT_1_CHECK )
+ #pragma ident "@(#)pthread.h 1.37 04/09/28 SMI"
+ #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+ #define PTHREAD_ONCE_INIT {{0, 0, 0, PTHREAD_ONCE_NOTDONE}}
+ #else
+ #define PTHREAD_ONCE_INIT {{{0}, {0}, {0}, {PTHREAD_ONCE_NOTDONE}}}
+ #endif
+ #endif /* SOLARIS_ONCE_INIT_1_CHECK */
+
+
+ #if defined( SOLARIS_ONCE_INIT_2_CHECK )
+ #ident "@(#)pthread.h 1.26 98/04/12 SMI"
+ #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+ #define PTHREAD_ONCE_INIT {{0, 0, 0, PTHREAD_ONCE_NOTDONE}}
+ #else
+ #define PTHREAD_ONCE_INIT {{{0}, {0}, {0}, {PTHREAD_ONCE_NOTDONE}}}
+ #endif
+
+ #endif /* SOLARIS_ONCE_INIT_2_CHECK */
+
+
#if defined( THREAD_KEYWORD_CHECK )
extern int pthread_create (pthread_t *__restrict __thr,
extern int pthread_kill (pthread_t __thr, int __signo);
diff -Nrcpad gcc-4.0.3/fixincludes/tests/base/string.h gcc-4.0.4/fixincludes/tests/base/string.h
*** gcc-4.0.3/fixincludes/tests/base/string.h 2004-08-31 09:27:00.000000000 +0000
--- gcc-4.0.4/fixincludes/tests/base/string.h 2006-07-30 15:39:08.000000000 +0000
***************
*** 10,13 ****
#ifndef _STRING_INCLUDED
#define _STRING_INCLUDED
#include
! #endif /* _STRING_INCLUDED */
\ No newline at end of file
--- 10,13 ----
#ifndef _STRING_INCLUDED
#define _STRING_INCLUDED
#include
! #endif /* _STRING_INCLUDED */
diff -Nrcpad gcc-4.0.3/fixincludes/tests/base/sys/pthread.h gcc-4.0.4/fixincludes/tests/base/sys/pthread.h
*** gcc-4.0.3/fixincludes/tests/base/sys/pthread.h 1970-01-01 00:00:00.000000000 +0000
--- gcc-4.0.4/fixincludes/tests/base/sys/pthread.h 2006-10-15 22:58:29.000000000 +0000
***************
*** 0 ****
--- 1,22 ----
+ /* DO NOT EDIT THIS FILE.
+
+ It has been auto-edited by fixincludes from:
+
+ "fixinc/tests/inc/sys/pthread.h"
+
+ This had to be done to correct non-standard usages in the
+ original, manufacturer supplied header file. */
+
+
+
+ #if defined( HPUX_PTHREAD_INITIALIZERS_CHECK )
+ #define PTHREAD_MUTEX_INITIALIZER { \
+ { __PTHREAD_MUTEX_VALID, 0 }, \
+ (PTHREAD_MUTEX_DEFAULT | PTHREAD_PROCESS_PRIVATE), \
+ __SPNLCK_INITIALIZER, \
+ { 0, 0, -1, 0 }, \
+ { 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 }, \
+ { 0, 0 } \
+ }
+
+ #endif /* HPUX_PTHREAD_INITIALIZERS_CHECK */
diff -Nrcpad gcc-4.0.3/gcc/ada/ChangeLog gcc-4.0.4/gcc/ada/ChangeLog
*** gcc-4.0.3/gcc/ada/ChangeLog 2006-03-09 20:44:35.000000000 +0000
--- gcc-4.0.4/gcc/ada/ChangeLog 2007-01-31 10:21:40.000000000 +0000
***************
*** 1,3 ****
--- 1,16 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
+ 2006-03-11 Eric Botcazou
+
+ Backport from mainline:
+ 2006-02-13 Ed Schonberg
+ PR ada/25885
+ * sem_res.adb (Set_Literal_String_Subtype): If the lower bound is not
+ static, wrap the literal in an unchecked conversion, because GCC 4.x
+ needs a static value for a string bound.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/gcc/ada/sem_res.adb gcc-4.0.4/gcc/ada/sem_res.adb
*** gcc-4.0.3/gcc/ada/sem_res.adb 2005-02-10 13:50:48.000000000 +0000
--- gcc-4.0.4/gcc/ada/sem_res.adb 2006-03-11 15:14:15.000000000 +0000
*************** package body Sem_Res is
*** 6734,6762 ****
--------------------------------
procedure Set_String_Literal_Subtype (N : Node_Id; Typ : Entity_Id) is
Subtype_Id : Entity_Id;
begin
if Nkind (N) /= N_String_Literal then
return;
- else
- Subtype_Id := Create_Itype (E_String_Literal_Subtype, N);
end if;
Set_String_Literal_Length (Subtype_Id, UI_From_Int
(String_Length (Strval (N))));
! Set_Etype (Subtype_Id, Base_Type (Typ));
! Set_Is_Constrained (Subtype_Id);
-- The low bound is set from the low bound of the corresponding
-- index type. Note that we do not store the high bound in the
! -- string literal subtype, but it can be deduced if necssary
-- from the length and the low bound.
! Set_String_Literal_Low_Bound
! (Subtype_Id, Type_Low_Bound (Etype (First_Index (Typ))));
! Set_Etype (N, Subtype_Id);
end Set_String_Literal_Subtype;
-----------------------------
--- 6734,6818 ----
--------------------------------
procedure Set_String_Literal_Subtype (N : Node_Id; Typ : Entity_Id) is
+ Loc : constant Source_Ptr := Sloc (N);
+ Low_Bound : constant Node_Id :=
+ Type_Low_Bound (Etype (First_Index (Typ)));
Subtype_Id : Entity_Id;
begin
if Nkind (N) /= N_String_Literal then
return;
end if;
+ Subtype_Id := Create_Itype (E_String_Literal_Subtype, N);
Set_String_Literal_Length (Subtype_Id, UI_From_Int
(String_Length (Strval (N))));
! Set_Etype (Subtype_Id, Base_Type (Typ));
! Set_Is_Constrained (Subtype_Id);
! Set_Etype (N, Subtype_Id);
!
! if Is_OK_Static_Expression (Low_Bound) then
-- The low bound is set from the low bound of the corresponding
-- index type. Note that we do not store the high bound in the
! -- string literal subtype, but it can be deduced if necessary
-- from the length and the low bound.
! Set_String_Literal_Low_Bound (Subtype_Id, Low_Bound);
! else
! Set_String_Literal_Low_Bound
! (Subtype_Id, Make_Integer_Literal (Loc, 1));
! Set_Etype (String_Literal_Low_Bound (Subtype_Id), Standard_Positive);
!
! -- Build bona fide subtypes for the string, and wrap it in an
! -- unchecked conversion, because the backend expects the
! -- String_Literal_Subtype to have a static lower bound.
!
! declare
! Index_List : constant List_Id := New_List;
! Index_Type : constant Entity_Id := Etype (First_Index (Typ));
! High_Bound : constant Node_Id :=
! Make_Op_Add (Loc,
! Left_Opnd => New_Copy_Tree (Low_Bound),
! Right_Opnd =>
! Make_Integer_Literal (Loc,
! String_Length (Strval (N)) - 1));
! Array_Subtype : Entity_Id;
! Index_Subtype : Entity_Id;
! Drange : Node_Id;
! Index : Node_Id;
!
! begin
! Index_Subtype :=
! Create_Itype (Subtype_Kind (Ekind (Index_Type)), N);
! Drange := Make_Range (Loc, Low_Bound, High_Bound);
! Set_Scalar_Range (Index_Subtype, Drange);
! Set_Parent (Drange, N);
! Analyze_And_Resolve (Drange, Index_Type);
!
! Set_Etype (Index_Subtype, Index_Type);
! Set_Size_Info (Index_Subtype, Index_Type);
! Set_RM_Size (Index_Subtype, RM_Size (Index_Type));
!
! Array_Subtype := Create_Itype (E_Array_Subtype, N);
!
! Index := New_Occurrence_Of (Index_Subtype, Loc);
! Set_Etype (Index, Index_Subtype);
! Append (Index, Index_List);
!
! Set_First_Index (Array_Subtype, Index);
! Set_Etype (Array_Subtype, Base_Type (Typ));
! Set_Is_Constrained (Array_Subtype, True);
! Init_Size_Align (Array_Subtype);
!
! Rewrite (N,
! Make_Unchecked_Type_Conversion (Loc,
! Subtype_Mark => New_Occurrence_Of (Array_Subtype, Loc),
! Expression => Relocate_Node (N)));
! Set_Etype (N, Array_Subtype);
! end;
! end if;
end Set_String_Literal_Subtype;
-----------------------------
diff -Nrcpad gcc-4.0.3/gcc/builtins.c gcc-4.0.4/gcc/builtins.c
*** gcc-4.0.3/gcc/builtins.c 2006-02-17 23:49:13.000000000 +0000
--- gcc-4.0.4/gcc/builtins.c 2006-09-21 23:38:21.000000000 +0000
*************** get_pointer_alignment (tree exp, unsigne
*** 249,262 ****
case ADDR_EXPR:
/* See what we are pointing at and look at its alignment. */
exp = TREE_OPERAND (exp, 0);
if (TREE_CODE (exp) == FUNCTION_DECL)
align = FUNCTION_BOUNDARY;
else if (DECL_P (exp))
! align = DECL_ALIGN (exp);
#ifdef CONSTANT_ALIGNMENT
else if (CONSTANT_CLASS_P (exp))
! align = CONSTANT_ALIGNMENT (exp, align);
#endif
return MIN (align, max_align);
default:
--- 249,276 ----
case ADDR_EXPR:
/* See what we are pointing at and look at its alignment. */
exp = TREE_OPERAND (exp, 0);
+ inner = max_align;
+ while (handled_component_p (exp))
+ {
+ /* Fields in a structure can be packed, honour DECL_ALIGN
+ of the FIELD_DECL. For all other references the conservative
+ alignment is the element type alignment. */
+ if (TREE_CODE (exp) == COMPONENT_REF)
+ inner = MIN (inner, DECL_ALIGN (TREE_OPERAND (exp, 1)));
+ else
+ inner = MIN (inner, TYPE_ALIGN (TREE_TYPE (exp)));
+ exp = TREE_OPERAND (exp, 0);
+ }
if (TREE_CODE (exp) == FUNCTION_DECL)
align = FUNCTION_BOUNDARY;
else if (DECL_P (exp))
! align = MIN (inner, DECL_ALIGN (exp));
#ifdef CONSTANT_ALIGNMENT
else if (CONSTANT_CLASS_P (exp))
! align = MIN (inner, (unsigned)CONSTANT_ALIGNMENT (exp, align));
#endif
+ else
+ align = MIN (align, inner);
return MIN (align, max_align);
default:
*************** expand_builtin_setjmp (tree arglist, rtx
*** 675,680 ****
--- 689,700 ----
emit_label (next_lab);
+ /* Because setjmp and longjmp are not represented in the CFG, a cfgcleanup
+ may find that the basic block starting with NEXT_LAB is unreachable.
+ The whole block, along with NEXT_LAB, would be removed (see PR26983).
+ Make sure that never happens. */
+ LABEL_PRESERVE_P (next_lab) = 1;
+
expand_builtin_setjmp_receiver (next_lab);
/* Set TARGET to one. */
*************** expand_builtin_fork_or_exec (tree fn, tr
*** 5204,5209 ****
--- 5224,5231 ----
TREE_PUBLIC (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
TREE_NOTHROW (decl) = 1;
+ DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
+ DECL_VISIBILITY_SPECIFIED (decl) = 1;
call = build_function_call_expr (decl, arglist);
return expand_call (call, target, ignore);
*************** fold_fixed_mathfn (tree exp)
*** 6252,6257 ****
--- 6274,6311 ----
return build_function_call_expr (decl, arglist);
}
}
+
+ /* Canonicalize llround (x) to lround (x) on LP64 targets where
+ sizeof (long long) == sizeof (long). */
+ if (TYPE_PRECISION (long_long_integer_type_node)
+ == TYPE_PRECISION (long_integer_type_node))
+ {
+ tree newfn = NULL_TREE;
+ switch (fcode)
+ {
+ case BUILT_IN_LLROUND:
+ case BUILT_IN_LLROUNDF:
+ case BUILT_IN_LLROUNDL:
+ newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LROUND);
+ break;
+
+ case BUILT_IN_LLRINT:
+ case BUILT_IN_LLRINTF:
+ case BUILT_IN_LLRINTL:
+ newfn = mathfn_built_in (TREE_TYPE (arg), BUILT_IN_LRINT);
+ break;
+
+ default:
+ break;
+ }
+
+ if (newfn)
+ {
+ tree newcall = build_function_call_expr (newfn, arglist);
+ return fold_convert (TREE_TYPE (TREE_TYPE (fndecl)), newcall);
+ }
+ }
+
return 0;
}
diff -Nrcpad gcc-4.0.3/gcc/builtins.def gcc-4.0.4/gcc/builtins.def
*** gcc-4.0.3/gcc/builtins.def 2005-02-10 18:59:07.000000000 +0000
--- gcc-4.0.4/gcc/builtins.def 2006-11-01 06:01:56.000000000 +0000
*************** DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODL,
*** 233,241 ****
DEF_LIB_BUILTIN (BUILT_IN_FREXP, "frexp", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPF, "frexpf", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPL, "frexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
! DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMA, "gamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
! DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMAF, "gammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
! DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMAL, "gammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_GCC_BUILTIN (BUILT_IN_HUGE_VAL, "huge_val", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LIST)
DEF_GCC_BUILTIN (BUILT_IN_HUGE_VALF, "huge_valf", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LIST)
DEF_GCC_BUILTIN (BUILT_IN_HUGE_VALL, "huge_vall", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
--- 233,241 ----
DEF_LIB_BUILTIN (BUILT_IN_FREXP, "frexp", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPF, "frexpf", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPL, "frexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
! DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMA, "gamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
! DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMAF, "gammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
! DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMAL, "gammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
DEF_GCC_BUILTIN (BUILT_IN_HUGE_VAL, "huge_val", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LIST)
DEF_GCC_BUILTIN (BUILT_IN_HUGE_VALF, "huge_valf", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LIST)
DEF_GCC_BUILTIN (BUILT_IN_HUGE_VALL, "huge_vall", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
*************** DEF_EXT_LIB_BUILTIN (BUILT_IN_JNL, "j
*** 260,268 ****
DEF_LIB_BUILTIN (BUILT_IN_LDEXP, "ldexp", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPF, "ldexpf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPL, "ldexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
! DEF_C99_BUILTIN (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
! DEF_C99_BUILTIN (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
! DEF_C99_BUILTIN (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_LLRINT, "llrint", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_LLRINTF, "llrintf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_LLRINTL, "llrintl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
--- 260,268 ----
DEF_LIB_BUILTIN (BUILT_IN_LDEXP, "ldexp", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPF, "ldexpf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPL, "ldexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
! DEF_C99_BUILTIN (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
! DEF_C99_BUILTIN (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
! DEF_C99_BUILTIN (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_BUILTIN (BUILT_IN_LLRINT, "llrint", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_LLRINTF, "llrintf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_LLRINTL, "llrintl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
diff -Nrcpad gcc-4.0.3/gcc/c-common.c gcc-4.0.4/gcc/c-common.c
*** gcc-4.0.3/gcc/c-common.c 2006-01-04 12:27:48.000000000 +0000
--- gcc-4.0.4/gcc/c-common.c 2006-06-04 23:51:52.000000000 +0000
*************** fold_offsetof_1 (tree expr)
*** 5730,5735 ****
--- 5730,5739 ----
case ERROR_MARK:
return expr;
+ case VAR_DECL:
+ error ("cannot apply % to static data member %qD", expr);
+ return error_mark_node;
+
case INDIRECT_REF:
return size_zero_node;
diff -Nrcpad gcc-4.0.3/gcc/c-decl.c gcc-4.0.4/gcc/c-decl.c
*** gcc-4.0.3/gcc/c-decl.c 2006-01-19 23:51:07.000000000 +0000
--- gcc-4.0.4/gcc/c-decl.c 2006-08-26 00:22:23.000000000 +0000
*************** grokdeclarator (const struct c_declarato
*** 3899,3904 ****
--- 3899,3912 ----
if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
warn_deprecated_use (declspecs->type);
+ if ((decl_context == NORMAL || decl_context == FIELD)
+ && current_scope == file_scope
+ && variably_modified_type_p (type, NULL_TREE))
+ {
+ error ("variably modified %qs at file scope", name);
+ type = integer_type_node;
+ }
+
typedef_type = type;
size_varies = C_TYPE_VARIABLE_SIZE (type);
*************** grokdeclarator (const struct c_declarato
*** 4163,4168 ****
--- 4171,4182 ----
size = integer_one_node;
}
}
+ else if ((decl_context == NORMAL || decl_context == FIELD)
+ && current_scope == file_scope)
+ {
+ error ("variably modified %qs at file scope", name);
+ size = integer_one_node;
+ }
else
{
/* Make sure the array size remains visibly
*************** grokdeclarator (const struct c_declarato
*** 4246,4252 ****
if (type != error_mark_node)
{
if (size_varies)
! C_TYPE_VARIABLE_SIZE (type) = 1;
/* The GCC extension for zero-length arrays differs from
ISO flexible array members in that sizeof yields
--- 4260,4271 ----
if (type != error_mark_node)
{
if (size_varies)
! {
! if (size && TREE_CODE (size) == INTEGER_CST)
! type
! = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
! C_TYPE_VARIABLE_SIZE (type) = 1;
! }
/* The GCC extension for zero-length arrays differs from
ISO flexible array members in that sizeof yields
*************** start_function (struct c_declspecs *decl
*** 5867,5872 ****
--- 5886,5893 ----
/* If this definition isn't a prototype and we had a prototype declaration
before, copy the arg type info from that prototype. */
old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
+ if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
+ old_decl = 0;
current_function_prototype_locus = UNKNOWN_LOCATION;
current_function_prototype_built_in = false;
current_function_prototype_arg_types = NULL_TREE;
diff -Nrcpad gcc-4.0.3/gcc/c-gimplify.c gcc-4.0.4/gcc/c-gimplify.c
*** gcc-4.0.3/gcc/c-gimplify.c 2005-01-27 18:22:35.000000000 +0000
--- gcc-4.0.4/gcc/c-gimplify.c 2006-08-26 00:24:31.000000000 +0000
*************** gimplify_compound_literal_expr (tree *ex
*** 482,488 ****
/* This decl isn't mentioned in the enclosing block, so add it to the
list of temps. FIXME it seems a bit of a kludge to say that
anonymous artificial vars aren't pushed, but everything else is. */
! if (DECL_NAME (decl) == NULL_TREE)
gimple_add_tmp_var (decl);
gimplify_and_add (decl_s, pre_p);
--- 482,488 ----
/* This decl isn't mentioned in the enclosing block, so add it to the
list of temps. FIXME it seems a bit of a kludge to say that
anonymous artificial vars aren't pushed, but everything else is. */
! if (DECL_NAME (decl) == NULL_TREE && !DECL_SEEN_IN_BIND_EXPR_P (decl))
gimple_add_tmp_var (decl);
gimplify_and_add (decl_s, pre_p);
diff -Nrcpad gcc-4.0.3/gcc/cgraphunit.c gcc-4.0.4/gcc/cgraphunit.c
*** gcc-4.0.3/gcc/cgraphunit.c 2005-09-02 08:12:30.000000000 +0000
--- gcc-4.0.4/gcc/cgraphunit.c 2006-08-03 11:35:52.000000000 +0000
*************** cgraph_finalize_compilation_unit (void)
*** 682,687 ****
--- 682,690 ----
{
struct cgraph_node *node;
+ if (errorcount || sorrycount)
+ return;
+
finish_aliases_1 ();
if (!flag_unit_at_a_time)
*************** cgraph_preserve_function_body_p (tree de
*** 1764,1769 ****
--- 1767,1775 ----
void
cgraph_optimize (void)
{
+ if (errorcount || sorrycount)
+ return;
+
#ifdef ENABLE_CHECKING
verify_cgraph ();
#endif
diff -Nrcpad gcc-4.0.3/gcc/ChangeLog gcc-4.0.4/gcc/ChangeLog
*** gcc-4.0.3/gcc/ChangeLog 2006-03-09 20:44:41.000000000 +0000
--- gcc-4.0.4/gcc/ChangeLog 2007-01-31 10:22:11.000000000 +0000
***************
*** 1,3 ****
--- 1,579 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
+ 2007-01-25 Richard Guenther
+
+ Backport from mainline:
+ 2006-08-11 Richard Guenther
+
+ PR middle-end/28651
+ * simplify-rtx.c (simplify_const_relational_operation):
+ Simplify A CMP B to A - B CMP 0 only for EQ and NE comparison
+ codes.
+
+ 2007-01-20 John David Anglin
+
+ * pa.c (output_move_double): Change array size of xoperands to 4.
+
+ 2007-01-17 Tom Tromey
+
+ * doc/sourcebuild.texi (libgcj Tests): Use sourceware.org.
+ * doc/install.texi (Testing): Use sourceware.org.
+ (Binaries): Likewise.
+ (Specific): Likewise.
+ * doc/contrib.texi (Contributors): Use sourceware.org.
+
+ 2007-01-11 John David Anglin
+
+ * pa-linux.h (ASM_OUTPUT_INTERNAL_LABEL): Undefine.
+ * pa.h (ASM_OUTPUT_LABEL): Output colon when using GAS.
+ (ASM_OUTPUT_INTERNAL_LABEL): Define.
+
+ 2007-01-09 Nicolas Pitre
+
+ PR target/30173
+ * arm/ieee754-df.S (Lad_s): Also test the low word of X for zero.
+
+ 2006-12-27 Ian Lance Taylor
+
+ PR debug/26964
+ * dwarf2out.c (gen_type_die): Don't write out a DIE for
+ ENUMERAL_TYPE if it was already written out.
+
+ 2006-12-08 John David Anglin
+
+ PR target/30039
+ * pa.md (high:DI and lo_sum:DI): Handle 64-bit CONST_INTs in 32-bit
+ patterns. Correct length of high:DI instruction sequence.
+
+ 2006-11-23 John David Anglin
+
+ * pa.c (return_addr_rtx): Change 0xe0400002 to -532676606.
+
+ 2006-11-19 John David Anglin
+
+ PR target/29114
+ * pa.c (emit_move_sequence): Don't split constants with PLUS for modes
+ larger than BITS_PER_WORD.
+
+ 2006-11-02 Zdenek Dvorak
+
+ PR tree-optimization/27891
+ * tree-ssa-loop-ivopts.c (rewrite_use_outer): Do not insert code
+ on abnormal edge.
+
+ 2006-11-02 Eric Botcazou
+
+ * doc/install.texi (sparc-sun-solaris2*): Update GMP/MPFR build
+ instructions.
+ (sparc64-sun-solaris2*): Likewise.
+
+ 2006-11-02 Uros Bizjak
+
+ PR target/29377
+ * config/h8300/h8300.c (h8300_emit_stack_adjustment): Change "size"
+ argument to HOST_WIDE_INT. Update function prototype.
+ (round_frame_size): Change return type to HOST_WIDE_INT. Change
+ "size" argument to HOST_WIDE_INT. Update function prototype.
+
+ 2006-11-01 Kaveh R. Ghazi
+
+ * builtins.def (gamma, lgamma): Use ATTR_MATHFN_FPROUNDING_STORE.
+
+ 2006-10-30 Jakub Jelinek
+
+ PR tree-optimization/29637
+ * tree.c (make_vector_type): Don't recurse if TYPE_MAIN_VARIANT
+ of the innertype is the innertype itself.
+
+ 2006-10-26 Paolo Bonzini
+
+ PR c/29092
+ * c-typeck.c (digest_init): Always allow initializing vectors
+ that have static storage duration with compound literals.
+ * tree.c (build_type_attribute_qual_variant): New, based on
+ build_type_attribute_variant.
+ (build_type_attribute_variant): Rewrite using the former.
+ (make_vector_type): Use build_type_attribute_qual_variant to build
+ type variants. Use type_hash_canon on the others.
+
+ 2006-10-19 Eric Botcazou
+
+ * fold-const.c (add_double): Rename to add_double_with_sign.
+ Add 'unsigned_p' parameter and take it into account for the overflow.
+ (mul_double): Rename to mul_double_with_sign.
+ Add 'unsigned_p' parameter and take it into account for the overflow.
+ (fold_div_compare): Call add_double_with_sign instead of add_double
+ and mul_double_with_sign instead of mul_double, passing them the
+ unsignedness of the type.
+ * tree.h (add_double): Macroize.
+ (add_double_with_sign): New prototype.
+ (mul_double): Macroize.
+ (mul_double_with_sign): New prototype.
+
+ 2006-10-16 Richard Guenther
+
+ PR target/25519
+ * doc/extend.texi (X86 Built-in Functions): Fix typos in
+ SSE builtin documentation. Document SSE2 builtins.
+
+ 2006-10-15 John David Anglin
+
+ * config.gcc (hppa*64*-*-hpux11*, hppa[12]*-*-hpux11*): Default to
+ posix thread support.
+
+ 2006-10-09 Steve Ellcey
+
+ PR target/28490
+ Backport from mainline
+ 2006-09-15 Jim Wilson
+ 2006-09-19 Steve Ellcey
+ * config/ia64/ia64.c (ia64_legitimate_constant_p): Allow function
+ pointers as legitimate constants. Handle symbol offsets same as
+ they are handled in ia64_expand_move and move_operand.
+
+ 2006-10-08 Andrew Pinski
+
+ PR debug/28980
+ * dwarf2out.c (loc_descriptor_from_tree_1): Handle
+ FUNCTION_DECL.
+
+ 2006-10-08 Andrew Pinski
+
+ PR middle-end/28862
+ * stor-layout.c (relayout_decl): Don't zero the alignment if it
+ was set by the user.
+
+ 2006-09-21 Steven Bosscher
+
+ PR middle-end/26983
+ Backport from mainline
+ * builtins.c (expand_builtin_setjmp): Force next_lab to be
+ preserved.
+
+ 2006-09-19 Roger Sayle
+
+ PR middle-end/4520
+ Backport from mainline
+ * cselib.c (cselib_hash_rtx): Avoid hashing on the address of labels
+ and symbols. Instead use the implementation from cse.c's hash_rtx.
+
+ 2006-09-18 Uros Bizjak
+
+ PR target/28946
+ * config/i386/i386.md ("*ashldi3_cconly_rex64", "*ashlsi3_cconly",
+ "*ashlhi3_cconly", "*ashlqi3_cconly", "*ashrdi3_one_bit_cconly_rex64",
+ "*ashrdi3_cconly_rex64", "*ashrsi3_one_bit_cconly", "*ashrsi3_cconly",
+ "*ashrhi3_one_bit_cconly", "*ashrhi3_cconly",
+ "*ashrqi3_one_bit_cconly", "*ashrqi3_cconly",
+ "*lshrdi3_cconly_one_bit_rex64", "*lshrdi3_cconly_rex64",
+ "*lshrsi3_one_bit_cconly", "*lshrsi3_cconly",
+ "*lshrhi3_one_bit_cconly", "*lshrhi3_cconly",
+ "*lshrqi2_one_bit_cconly", "*lshrqi2_cconly": New patterns to
+ implement only CC setting effects of shift instructions.
+
+ 2006-09-11 Hideki Iwamoto
+
+ * doc/cpp.texi: Fix names of charset options.
+
+ 2006-09-10 Eric Botcazou
+
+ PR rtl-optimization/28636
+ * combine.c (force_to_mode): Test for side-effects before
+ substituting by zero.
+ (simplify_shift_const): Likewise for zero or other constants.
+
+ 2006-09-10 Richard Sandiford
+
+ PR target/29006
+ * config/mips/mips-protos.h (mips_mem_fits_mode_p): Declare.
+ * config/mips/mips.c (mips_expand_unaligned_store): Use the mode
+ returned by mode_for_size, rather than the mode of src itself,
+ to choose between 32-bit and 64-bit patterns.
+ (mips_mem_fits_mode_p): New function.
+ * config/mips/mips.md (mov_l, mov_r): Use it to check
+ that the size of the source matches the size of the destination.
+ (mov_l, mov_r): Likewise.
+
+ 2006-09-06 Matthias Klose
+
+ PR bootstrap/26764
+ PR bootstrap/27334
+ * Makefile.in (s-macro_list): Conform to POSIX rules in single quoted
+ strings.
+
+ 2006-08-25 Fariborz Jahanian
+
+ PR c/28418
+ * c-gimplify.c (gimplify_compound_literal_expr): Don't add
+ variable again if DECL_SEEN_IN_BIND_EXPR_P.
+
+ 2006-08-25 Joseph S. Myers
+
+ PR c/28299
+ * c-decl.c (start_function): Don't try to process prototype
+ information from old declaration that isn't a function.
+
+ 2006-08-25 Joseph S. Myers
+
+ PR c/27893
+ * gimplify.c (gimplify_decl_expr, gimplify_init_ctor_preeval):
+ Treat sizes as variable whenever not INTEGER_CST.
+
+ 2006-08-11 Eric Botcazou
+
+ PR rtl-optimization/23454
+ Backport from mainline
+ 2005-03-07 Eric Botcazou
+
+ * reorg.c (relax_delay_slots): Check that the jump is
+ conditional before trying to invert it.
+
+ 2006-08-03 Janis Johnson
+
+ Backport from mainline
+ * doc/sourcebuild.texi (Test Directives): Document dg-shouldfail.
+
+ 2006-08-03 Volker Reichelt
+
+ PR c++/28257
+ PR c++/28259
+ PR c++/28267
+ * toplev.c (compile_file): Return early on errorcount or sorrycount.
+ * cgraphunit.c (cgraph_finalize_compilation_unit): Likewise.
+ (cgraph_optimize): Likewise.
+
+ 2006-07-30 Roger Sayle
+
+ PR middle-end/28473
+ Backport from mainline.
+ * convert.c (convert_to_integer): When transforming (T)foo(x) into
+ bar(x) check that bar's result type can represent all the values of T.
+ * builtins.c (fold_fixed_mathfn): When long and long long are the
+ same size, canonicalize llceil*, llfloor*, llround* and llrint*
+ functions to their lceil*, lfloor*, lround* and lrint* forms.
+
+ 2006-07-26 Richard Sandiford
+
+ PR middle-end/28403
+ * optabs.c (expand_doubleword_shift): Wrap the call to
+ do_compare_rtx_and_jump with NO_DEFER_POP and OK_DEFER_POP.
+
+ 2006-07-26 Richard Sandiford
+
+ PR middle-end/28402
+ * optabs.c (expand_binop): Pass next_methods rather than methods
+ to expand_doubleword_shift.
+
+ 2006-07-18 Volker Reichelt
+
+ PR c/28286
+ * c-pragma.c (handle_pragma_pack): Handle invalid constants.
+
+ 2006-07-16 Eric Botcazou
+
+ * doc/install.texi (sparc-sun-solaris2*): Add GMP version number.
+
+ 2006-07-05 Jason Merrill
+
+ PR c++/13983
+ PR c++/17519
+ * stor-layout.c (finish_record_layout): Copy TYPE_PACKED to variants.
+
+ 2006-07-04 Peter O'Gorman
+
+ * mklibgcc.in: chmod 644 before ranlib during install.
+
+ 2006-07-02 Roger Sayle
+
+ PR middle-end/27428
+ * c-lex.c (c_lex_with_flags) : Increment errorcount
+ to indicate the cpplib has issued an error message for us.
+
+ 2006-06-23 Richard Guenther
+
+ PR middle-end/28045
+ * fold-const.c (operand_equal_p): Check if the argument types
+ have the same precision before stripping NOPs.
+
+ 2006-06-22 Gerald Pfeifer
+
+ * doc/install.texi (Configuration): Remove reference to CrossGCC
+ FAQ which was gone.
+ (Building): Ditto.
+
+ 2006-06-21 Roger Sayle
+
+ PR target/27861
+ * expmed.c (expand_shift): On SHIFT_COUNT_TRUNCATED targets, we may
+ have stripped a SUBREG from the shift count, so we may need to
+ convert_to_mode back to the type's mode before calling make_tree.
+ Use new_amount instead of amount to avoid expanding a tree twice.
+
+ 2006-06-12 Volker Reichelt
+
+ PR target/27421
+ * config/i386/i386.c (classify_argument): Skip fields with invalid
+ types in unions.
+
+ 2006-06-06 Roger Sayle
+
+ PR target/26223
+ * config/i386/i386.c (construct_container): Split static issued_error
+ flag into issued_sse_arg_error, issued_sse_ret_error and
+ issued_x87_ret_error. Issue a daignostic if the x86-64 ABI
+ requires the use of x87 registers and the user explicitly
+ specified the -mno-80387 command line option.
+
+ 2006-06-05 Joseph S. Myers
+
+ PR c/25161
+ PR c/27020
+ * c-decl.c (grokdeclarator): Disallow variably modified types at
+ file scope. Avoid marking shared array type of constant size as
+ VLA.
+
+ 2006-06-04 Volker Reichelt
+
+ PR c++/27601
+ * c-common.c (fold_offsetof_1): Handle static members.
+
+ 2006-05-30 Volker Reichelt
+
+ PR c/27718
+ * c-typeck.c (c_expr_sizeof_type): Handle invalid types.
+
+ 2006-05-22 Volker Reichelt
+
+ PR c++/27451
+ * stmt.c (expand_asm_operands): Skip asm statement with erroneous
+ clobbers.
+
+ 2006-05-15 Roger Sayle
+
+ PR rtl-optimization/22563
+ Backports from mainline
+ * expmed.c (store_fixed_bit_field): When using AND and IOR to store
+ a fixed width bitfield, always force the intermediates into pseudos.
+ Also check whether the bitsize is valid for the machine's "insv"
+ instruction before moving the target into a pseudo for use with
+ the insv.
+ * config/i386/predicates.md (const8_operand): New predicate.
+ * config/i386/i386.md (extv, extzv, insv): Use the new
+ const8_operand predicate where appropriate.
+
+ 2006-05-15 Roger Sayle
+
+ PR middle-end/26729
+ * fold-const.c (fold_truthop): Check integer_nonzerop instead of
+ !integer_zerop to avoid problems with TREE_OVERFLOW.
+
+ 2005-05-13 Zdenek Dvorak
+
+ PR rtl-optimization/27335
+ * loop-unroll.c (peel_loops_completely): Use loops->parray to walk the
+ loops.
+
+ 2005-05-13 Zdenek Dvorak
+
+ PR tree-optimization/27003
+ * tree.c (build_int_cst_type): Avoid shift by size of type.
+
+ 2006-05-11 Volker Reichelt
+
+ PR target/27421
+ * config/i386/i386.c (classify_argument): Skip fields with invalid
+ types.
+
+ PR middle-end/27384
+ * fold-const.c (size_binop): Move sanity check for arguments to
+ the beginning of the function.
+
+ 2006-05-09 Richard Guenther
+
+ PR tree-optimization/27136
+ * tree-ssa-loop-niter.c (get_val_for): Correct function
+ comment, assert requirements.
+ (loop_niter_by_eval): Stop processing if the iterated
+ value did not simplify.
+
+ 2006-05-03 Roger Sayle
+
+ PR c/25309
+ * c-typeck.c (struct spelling): Make I an unsigned HOST_WIDE_INT.
+ (push_array_bounds): Delete prototype. Change BOUNDS argument to
+ an unsigned HOST_WIDE_INT.
+ (print_spelling): Use HOST_WIDE_INT_PRINT_UNSIGNED to output the
+ array index.
+ (really_start_incremental_init): No need to call convert because
+ bitsize_zero_node is already of type bitsizetype.
+ (push_init_level): Extract the value of constructor_index as an
+ unsigned HOST_WIDE_INT quantity, using tree_low_cst.
+ (process_init_element): Likewise.
+
+ 2006-05-01 Richard Guenther
+
+ PR middle-end/26565
+ * builtins.c (get_pointer_alignment): Handle component
+ references for field alignment.
+
+ 2006-04-25 Roger Sayle
+
+ PR target/26961
+ * fold-const.c (fold): When converting "A ? B : C" into either
+ "A op B" or "A op C", we may need to convert A to the type of B and C.
+
+ 2006-04-23 Eric Botcazou
+
+ * tree-tailcall.c (pass_tail_recursion): Use gate_tail_calls too.
+
+ 2006-04-14 Alexey Starovoytov
+ Eric Botcazou
+
+ * config/sparc/sparc.c (emit_and_preserve): Allocate space for the
+ register save area.
+
+ 2006-04-10 Eric Botcazou
+
+ * doc/install.texi (*-*-solaris2*): Point to the configure page.
+
+ 2006-04-04 Kazuhiro Inaoka
+
+ PR target/26775
+ PR target/26776
+ * config/m32r/m32r.c (m32r_output_function_epilogue): Case for
+ a large stack frame at epilogue. Use fp to recover a stack
+ pointer for alloca function at epilogue.
+
+ PR target/36276
+ * config/m32r/m32r.c (gen_compare): Removed a rule addsi3 codes
+ to avoid a miss optimizing at simplify_relational_operation().
+ * config/m32r/m32r.md (seq): Ditto. Changed reg_or_eq_int16_operand
+ to reg_or_uint16_operand because seq_insn has not used addsi3 already.
+ (seq_insn): Ditto. Removed operand check mode "P". Changed
+ reg_or_eq_int16_operand to reg_or_uint16_operand.
+
+ 2006-03-31 H.J. Lu
+
+ PR testsuite/25741
+ Backport from mainline
+ 2006-01-16 H.J. Lu
+
+ * Makefile.in (check-%): Depend on site.exp instead of
+ $(TESTSUITEDIR)/site.exp. Run "runtest" in separate language
+ directories.
+
+ 2006-01-17 Shantonu Sen
+
+ * Makefile.in (check-%, check-consistency): Use $${srcdir}
+ instead of $(srcdir) and ${srcdir}.
+
+ 2006-03-23 Richard Henderson
+
+ * config/alpha/alpha.c (alpha_legitimate_constant_p): Reject
+ tls symbols.
+
+ PR target/26347
+ * config/alpha/predicates.md (local_symbolic_operand): Reject
+ weak symbols.
+
+ 2006-03-21 Jason Merrill
+
+ * builtins.c (expand_builtin_fork_or_exec): Fix pasto.
+
+ PR middle-end/20297
+ * expr.c (init_block_move_fn): Force default visibility.
+ (init_block_clear_fn): Likewise.
+ * builtins.c (expand_builtin_fork_or_exec): Likewise.
+
+ 2006-03-20 Alan Modra
+
+ PR target/26453
+ * config/rs6000/rs6000.c (rs6000_output_function_epilogue): Don't
+ output traceback table for thunks. Localise rs6000_stack_info call.
+
+ 2006-03-16 Kaz Kojima
+
+ Backport from 4.1:
+ * config/sh/sh.c (prepare_move_operands): Handle the address
+ constant which is a tls symbolic address plus a constant.
+
+ 2006-03-16 Roger Sayle
+
+ PR middle-end/26379
+ Backport from mainline.
+ 2006-02-21 Jakub Jelinek
+ * combine.c (simplify_shift_const_1): Disable nested shifts
+ optimization for vector shifts.
+
+ 2006-03-16 Steve Ellcey
+
+ PR target/25917
+ Backport from mainline.
+ * config/ia64/predicates.md (extr_len_operand): New predicate.
+ * config/ia64/ia64.md (extv): Tighten constraints.
+ (extzv): Ditto.
+ (*tbit_and_2): Ditto.
+ (*tbit_and_3): Ditto.
+ (*tbit_or_2): Ditto.
+ (*tbit_or_3): Ditto.
+ (*bit_zero): Ditto.
+ (*bit_one): Ditto.
+
+ 2006-03-15 Roger Sayle
+
+ PR middle-end/26557
+ * stmt.c (emit_case_nodes): Handle the case where the index is a
+ CONST_INT, where the comparison mode is specified by the index type.
+
+ 2006-03-14 John David Anglin
+
+ * pa/pa32-linux.h (CRT_CALL_STATIC_FUNCTION): Fix typo.
+
+ 2006-03-13 John David Anglin
+
+ * pa/pa32-linux.h (CRT_CALL_STATIC_FUNCTION): Define when CRTSTUFFS_O
+ is defined.
+
+ 2006-03-13 Jie Zhang
+
+ * config/bfin/uclinux.h: Define _GNU_SOURCE in CPLUSPLUS_CPP_SPEC.
+
+ 2006-03-13 Bernd Schmidt
+
+ * config/bfin/lib1funcs.asm (___umodsi3): Use stack to save contents
+ of RETS.
+ * config/bfin/bfin.h (TARGET_CPU_CPP_BUILTINS): If
+ TARGET_ID_SHARED_LIBRARY, define __ID_SHARED_LIB__.
+ * config/bfin/crti.S: Use it instead of __PIC__.
+ * config/bfin/crtn.S: Likewise.
+
+ * config/bfin/bfin.md (call_value_symbol, sibcall_value_symbol,
+ call_symbol, sibcall_symbol): Disallow if TARGET_ID_SHARED_LIBRARY,
+ not if flag_pic.
+ Lose 'G' modifier for call operand.
+ * config/bfin/bfin.c (print_operand) : Don't
+ recognize 'G' modifier.
+
+ 2006-03-13 Eric Botcazou
+
+ PR middle-end/18859
+ * stmt.c (expand_case): Discard empty ranges.
+
+ 2006-03-11 Kaveh R. Ghazi
+
+ Backport:
+ 2005-03-31 Janis Johnson
+
+ * doc/sourcebuild.texi (Test Directives): Describe cleanup-* procs.
+
+ 2006-03-10 Mark Mitchell
+
+ * version.c: Bump version number.
+
+ * doc/include/gcc-common.texi: Bump version number.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/gcc/c-lex.c gcc-4.0.4/gcc/c-lex.c
*** gcc-4.0.3/gcc/c-lex.c 2004-10-27 17:24:20.000000000 +0000
--- gcc-4.0.4/gcc/c-lex.c 2006-07-02 16:05:28.000000000 +0000
*************** c_lex_with_flags (tree *value, unsigned
*** 362,367 ****
--- 362,368 ----
case CPP_N_INVALID:
/* cpplib has issued an error. */
*value = error_mark_node;
+ errorcount++;
break;
case CPP_N_INTEGER:
diff -Nrcpad gcc-4.0.3/gcc/combine.c gcc-4.0.4/gcc/combine.c
*** gcc-4.0.3/gcc/combine.c 2005-12-01 03:33:46.000000000 +0000
--- gcc-4.0.4/gcc/combine.c 2006-09-10 21:28:39.000000000 +0000
*************** force_to_mode (rtx x, enum machine_mode
*** 6866,6872 ****
nonzero = nonzero_bits (x, mode);
/* If none of the bits in X are needed, return a zero. */
! if (! just_select && (nonzero & mask) == 0)
x = const0_rtx;
/* If X is a CONST_INT, return a new one. Do this here since the
--- 6866,6872 ----
nonzero = nonzero_bits (x, mode);
/* If none of the bits in X are needed, return a zero. */
! if (!just_select && (nonzero & mask) == 0 && !side_effects_p (x))
x = const0_rtx;
/* If X is a CONST_INT, return a new one. Do this here since the
*************** simplify_shift_const (rtx x, enum rtx_co
*** 8644,8657 ****
== 0))
code = LSHIFTRT;
! if (code == LSHIFTRT
! && GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT
! && !(nonzero_bits (varop, shift_mode) >> count))
! varop = const0_rtx;
! if (code == ASHIFT
! && GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT
! && !((nonzero_bits (varop, shift_mode) << count)
! & GET_MODE_MASK (shift_mode)))
varop = const0_rtx;
switch (GET_CODE (varop))
--- 8644,8657 ----
== 0))
code = LSHIFTRT;
! if (((code == LSHIFTRT
! && GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT
! && !(nonzero_bits (varop, shift_mode) >> count))
! || (code == ASHIFT
! && GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT
! && !((nonzero_bits (varop, shift_mode) << count)
! & GET_MODE_MASK (shift_mode))))
! && !side_effects_p (varop))
varop = const0_rtx;
switch (GET_CODE (varop))
*************** simplify_shift_const (rtx x, enum rtx_co
*** 8790,8796 ****
&& INTVAL (XEXP (varop, 1)) >= 0
&& INTVAL (XEXP (varop, 1)) < GET_MODE_BITSIZE (GET_MODE (varop))
&& GET_MODE_BITSIZE (result_mode) <= HOST_BITS_PER_WIDE_INT
! && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
{
enum rtx_code first_code = GET_CODE (varop);
unsigned int first_count = INTVAL (XEXP (varop, 1));
--- 8790,8797 ----
&& INTVAL (XEXP (varop, 1)) >= 0
&& INTVAL (XEXP (varop, 1)) < GET_MODE_BITSIZE (GET_MODE (varop))
&& GET_MODE_BITSIZE (result_mode) <= HOST_BITS_PER_WIDE_INT
! && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT
! && !VECTOR_MODE_P (result_mode))
{
enum rtx_code first_code = GET_CODE (varop);
unsigned int first_count = INTVAL (XEXP (varop, 1));
*************** simplify_shift_const (rtx x, enum rtx_co
*** 9284,9292 ****
if (outer_op == AND)
x = simplify_and_const_int (NULL_RTX, result_mode, x, outer_const);
else if (outer_op == SET)
! /* This means that we have determined that the result is
! equivalent to a constant. This should be rare. */
! x = GEN_INT (outer_const);
else if (GET_RTX_CLASS (outer_op) == RTX_UNARY)
x = simplify_gen_unary (outer_op, result_mode, x, result_mode);
else
--- 9285,9296 ----
if (outer_op == AND)
x = simplify_and_const_int (NULL_RTX, result_mode, x, outer_const);
else if (outer_op == SET)
! {
! /* This means that we have determined that the result is
! equivalent to a constant. This should be rare. */
! if (!side_effects_p (x))
! x = GEN_INT (outer_const);
! }
else if (GET_RTX_CLASS (outer_op) == RTX_UNARY)
x = simplify_gen_unary (outer_op, result_mode, x, result_mode);
else
diff -Nrcpad gcc-4.0.3/gcc/config/alpha/alpha.c gcc-4.0.4/gcc/config/alpha/alpha.c
*** gcc-4.0.3/gcc/config/alpha/alpha.c 2005-11-03 00:33:09.000000000 +0000
--- gcc-4.0.4/gcc/config/alpha/alpha.c 2006-03-23 15:52:18.000000000 +0000
*************** alpha_legitimate_constant_p (rtx x)
*** 2114,2123 ****
{
case CONST:
case LABEL_REF:
- case SYMBOL_REF:
case HIGH:
return true;
case CONST_DOUBLE:
if (x == CONST0_RTX (mode))
return true;
--- 2114,2126 ----
{
case CONST:
case LABEL_REF:
case HIGH:
return true;
+ case SYMBOL_REF:
+ /* TLS symbols are never valid. */
+ return SYMBOL_REF_TLS_MODEL (x) == 0;
+
case CONST_DOUBLE:
if (x == CONST0_RTX (mode))
return true;
diff -Nrcpad gcc-4.0.3/gcc/config/alpha/predicates.md gcc-4.0.4/gcc/config/alpha/predicates.md
*** gcc-4.0.3/gcc/config/alpha/predicates.md 2005-01-22 12:53:25.000000000 +0000
--- gcc-4.0.4/gcc/config/alpha/predicates.md 2006-03-23 15:47:50.000000000 +0000
***************
*** 337,343 ****
if (GET_CODE (op) != SYMBOL_REF)
return 0;
! return SYMBOL_REF_LOCAL_P (op) && !SYMBOL_REF_TLS_MODEL (op);
})
;; Return true if OP is a SYMBOL_REF or CONST referencing a variable
--- 337,345 ----
if (GET_CODE (op) != SYMBOL_REF)
return 0;
! return (SYMBOL_REF_LOCAL_P (op)
! && !SYMBOL_REF_WEAK (op)
! && !SYMBOL_REF_TLS_MODEL (op));
})
;; Return true if OP is a SYMBOL_REF or CONST referencing a variable
diff -Nrcpad gcc-4.0.3/gcc/config/arm/ieee754-df.S gcc-4.0.4/gcc/config/arm/ieee754-df.S
*** gcc-4.0.3/gcc/config/arm/ieee754-df.S 2005-04-30 19:41:25.000000000 +0000
--- gcc-4.0.4/gcc/config/arm/ieee754-df.S 2007-01-09 10:17:02.000000000 +0000
*************** LSYM(Lad_s):
*** 326,332 ****
beq 1f
@ Result is x + 0.0 = x or 0.0 + y = y.
! teq r4, #0
moveq xh, yh
moveq xl, yl
RETLDM "r4, r5"
--- 326,332 ----
beq 1f
@ Result is x + 0.0 = x or 0.0 + y = y.
! orrs ip, r4, xl
moveq xh, yh
moveq xl, yl
RETLDM "r4, r5"
diff -Nrcpad gcc-4.0.3/gcc/config/bfin/bfin.c gcc-4.0.4/gcc/config/bfin/bfin.c
*** gcc-4.0.3/gcc/config/bfin/bfin.c 2005-12-09 22:46:35.000000000 +0000
--- gcc-4.0.4/gcc/config/bfin/bfin.c 2006-03-13 16:33:11.000000000 +0000
*************** print_operand (FILE *file, rtx x, char c
*** 1266,1273 ****
case SYMBOL_REF:
output_addr_const (file, x);
- if (code == 'G' && flag_pic)
- fprintf (file, "@GOT");
break;
case CONST_DOUBLE:
--- 1266,1271 ----
diff -Nrcpad gcc-4.0.3/gcc/config/bfin/bfin.h gcc-4.0.4/gcc/config/bfin/bfin.h
*** gcc-4.0.3/gcc/config/bfin/bfin.h 2005-11-16 13:26:17.000000000 +0000
--- gcc-4.0.4/gcc/config/bfin/bfin.h 2006-03-13 16:14:22.000000000 +0000
*************** extern int target_flags;
*** 46,51 ****
--- 46,53 ----
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
+ if (TARGET_ID_SHARED_LIBRARY) \
+ builtin_define ("__ID_SHARED_LIB__"); \
} \
while (0)
#endif
diff -Nrcpad gcc-4.0.3/gcc/config/bfin/bfin.md gcc-4.0.4/gcc/config/bfin/bfin.md
*** gcc-4.0.3/gcc/config/bfin/bfin.md 2005-12-08 13:45:27.000000000 +0000
--- gcc-4.0.4/gcc/config/bfin/bfin.md 2006-03-13 16:33:11.000000000 +0000
***************
*** 1268,1277 ****
(match_operand 1 "general_operand" "g"))
(use (match_operand 2 "" ""))]
"! SIBLING_CALL_P (insn)
! && !flag_pic
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
! "call %G0;"
[(set_attr "type" "call")
(set_attr "length" "4")])
--- 1268,1277 ----
(match_operand 1 "general_operand" "g"))
(use (match_operand 2 "" ""))]
"! SIBLING_CALL_P (insn)
! && !TARGET_ID_SHARED_LIBRARY
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
! "call %0;"
[(set_attr "type" "call")
(set_attr "length" "4")])
***************
*** 1281,1290 ****
(use (match_operand 2 "" ""))
(return)]
"SIBLING_CALL_P (insn)
! && !flag_pic
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
! "jump.l %G0;"
[(set_attr "type" "br")
(set_attr "length" "4")])
--- 1281,1290 ----
(use (match_operand 2 "" ""))
(return)]
"SIBLING_CALL_P (insn)
! && !TARGET_ID_SHARED_LIBRARY
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
! "jump.l %0;"
[(set_attr "type" "br")
(set_attr "length" "4")])
***************
*** 1294,1303 ****
(match_operand 2 "general_operand" "g")))
(use (match_operand 3 "" ""))]
"! SIBLING_CALL_P (insn)
! && !flag_pic
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
! "call %G1;"
[(set_attr "type" "call")
(set_attr "length" "4")])
--- 1294,1303 ----
(match_operand 2 "general_operand" "g")))
(use (match_operand 3 "" ""))]
"! SIBLING_CALL_P (insn)
! && !TARGET_ID_SHARED_LIBRARY
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
! "call %1;"
[(set_attr "type" "call")
(set_attr "length" "4")])
***************
*** 1308,1317 ****
(use (match_operand 3 "" ""))
(return)]
"SIBLING_CALL_P (insn)
! && !flag_pic
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
! "jump.l %G1;"
[(set_attr "type" "br")
(set_attr "length" "4")])
--- 1308,1317 ----
(use (match_operand 3 "" ""))
(return)]
"SIBLING_CALL_P (insn)
! && !TARGET_ID_SHARED_LIBRARY
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
! "jump.l %1;"
[(set_attr "type" "br")
(set_attr "length" "4")])
diff -Nrcpad gcc-4.0.3/gcc/config/bfin/crti.s gcc-4.0.4/gcc/config/bfin/crti.s
*** gcc-4.0.3/gcc/config/bfin/crti.s 2005-11-16 13:26:17.000000000 +0000
--- gcc-4.0.4/gcc/config/bfin/crti.s 2006-03-13 16:14:22.000000000 +0000
*************** Boston, MA 02110-1301, USA. */
*** 38,58 ****
.globl __init
.type __init,@function
__init:
! #if defined __PIC__
[--SP] = P5;
#endif
LINK 12;
! #if defined __PIC__
P5 = [P5 + _current_shared_library_p5_offset_]
#endif
.section .fini
.globl __fini
.type __fini,@function
__fini:
! #if defined __PIC__
[--SP] = P5;
#endif
LINK 12;
! #if defined __PIC__
P5 = [P5 + _current_shared_library_p5_offset_]
#endif
--- 38,58 ----
.globl __init
.type __init,@function
__init:
! #if defined __ID_SHARED_LIB__
[--SP] = P5;
#endif
LINK 12;
! #if defined __ID_SHARED_LIB__
P5 = [P5 + _current_shared_library_p5_offset_]
#endif
.section .fini
.globl __fini
.type __fini,@function
__fini:
! #if defined __ID_SHARED_LIB__
[--SP] = P5;
#endif
LINK 12;
! #if defined __ID_SHARED_LIB__
P5 = [P5 + _current_shared_library_p5_offset_]
#endif
diff -Nrcpad gcc-4.0.3/gcc/config/bfin/crtn.s gcc-4.0.4/gcc/config/bfin/crtn.s
*** gcc-4.0.3/gcc/config/bfin/crtn.s 2005-11-16 13:26:17.000000000 +0000
--- gcc-4.0.4/gcc/config/bfin/crtn.s 2006-03-13 16:14:22.000000000 +0000
*************** Boston, MA 02110-1301, USA. */
*** 36,49 ****
.section .init
unlink;
! #if defined __PIC__
P5 = [SP++];
#endif
rts;
.section .fini
unlink;
! #if defined __PIC__
P5 = [SP++];
#endif
rts;
--- 36,49 ----
.section .init
unlink;
! #if defined __ID_SHARED_LIB__
P5 = [SP++];
#endif
rts;
.section .fini
unlink;
! #if defined __ID_SHARED_LIB__
P5 = [SP++];
#endif
rts;
diff -Nrcpad gcc-4.0.3/gcc/config/bfin/lib1funcs.asm gcc-4.0.4/gcc/config/bfin/lib1funcs.asm
*** gcc-4.0.3/gcc/config/bfin/lib1funcs.asm 2005-08-09 10:57:09.000000000 +0000
--- gcc-4.0.4/gcc/config/bfin/lib1funcs.asm 2006-03-13 15:06:03.000000000 +0000
*************** ___udivsi3:
*** 111,120 ****
.type ___umodsi3, STT_FUNC;
___umodsi3:
! P1 = RETS;
! CALL ___udivsi3;
R0 = R3;
! RETS = P1;
! RTS;
#endif
--- 111,120 ----
.type ___umodsi3, STT_FUNC;
___umodsi3:
! [--SP] = RETS;
! CALL ___udivsi3;
R0 = R3;
! RETS = [SP++];
! RTS;
#endif
diff -Nrcpad gcc-4.0.3/gcc/config/bfin/uclinux.h gcc-4.0.4/gcc/config/bfin/uclinux.h
*** gcc-4.0.3/gcc/config/bfin/uclinux.h 2005-11-17 22:04:14.000000000 +0000
--- gcc-4.0.4/gcc/config/bfin/uclinux.h 2006-03-13 18:02:09.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ /* The GNU C++ standard library requires that these macros be defined. */
+ #undef CPLUSPLUS_CPP_SPEC
+ #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
+
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
"crt1%O%s crti%O%s crtbegin%O%s crtlibid%O%s"
diff -Nrcpad gcc-4.0.3/gcc/config/h8300/h8300.c gcc-4.0.4/gcc/config/h8300/h8300.c
*** gcc-4.0.3/gcc/config/h8300/h8300.c 2004-11-09 10:13:30.000000000 +0000
--- gcc-4.0.4/gcc/config/h8300/h8300.c 2006-11-02 07:55:35.000000000 +0000
*************** static int h8300_interrupt_function_p (t
*** 103,110 ****
static int h8300_saveall_function_p (tree);
static int h8300_monitor_function_p (tree);
static int h8300_os_task_function_p (tree);
! static void h8300_emit_stack_adjustment (int, unsigned int);
! static int round_frame_size (int);
static unsigned int compute_saved_regs (void);
static void push (int);
static void pop (int);
--- 103,110 ----
static int h8300_saveall_function_p (tree);
static int h8300_monitor_function_p (tree);
static int h8300_os_task_function_p (tree);
! static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT);
! static HOST_WIDE_INT round_frame_size (HOST_WIDE_INT);
static unsigned int compute_saved_regs (void);
static void push (int);
static void pop (int);
*************** byte_reg (rtx x, int b)
*** 538,544 ****
SIZE to adjust the stack pointer. */
static void
! h8300_emit_stack_adjustment (int sign, unsigned int size)
{
/* If the frame size is 0, we don't have anything to do. */
if (size == 0)
--- 538,544 ----
SIZE to adjust the stack pointer. */
static void
! h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size)
{
/* If the frame size is 0, we don't have anything to do. */
if (size == 0)
*************** h8300_emit_stack_adjustment (int sign, u
*** 574,581 ****
/* Round up frame size SIZE. */
! static int
! round_frame_size (int size)
{
return ((size + STACK_BOUNDARY / BITS_PER_UNIT - 1)
& -STACK_BOUNDARY / BITS_PER_UNIT);
--- 574,581 ----
/* Round up frame size SIZE. */
! static HOST_WIDE_INT
! round_frame_size (HOST_WIDE_INT size)
{
return ((size + STACK_BOUNDARY / BITS_PER_UNIT - 1)
& -STACK_BOUNDARY / BITS_PER_UNIT);
diff -Nrcpad gcc-4.0.3/gcc/config/i386/i386.c gcc-4.0.4/gcc/config/i386/i386.c
*** gcc-4.0.3/gcc/config/i386/i386.c 2005-12-15 19:04:04.000000000 +0000
--- gcc-4.0.4/gcc/config/i386/i386.c 2006-06-12 21:39:10.000000000 +0000
*************** classify_argument (enum machine_mode mod
*** 2257,2262 ****
--- 2257,2265 ----
{
int num;
+ if (TREE_TYPE (field) == error_mark_node)
+ continue;
+
/* Bitfields are always classified as integer. Handle them
early, since later code would consider them to be
misaligned integers. */
*************** classify_argument (enum machine_mode mod
*** 2342,2347 ****
--- 2345,2354 ----
if (TREE_CODE (field) == FIELD_DECL)
{
int num;
+
+ if (TREE_TYPE (field) == error_mark_node)
+ continue;
+
num = classify_argument (TYPE_MODE (TREE_TYPE (field)),
TREE_TYPE (field), subclasses,
bit_offset);
*************** construct_container (enum machine_mode m
*** 2536,2541 ****
--- 2543,2553 ----
tree type, int in_return, int nintregs, int nsseregs,
const int *intreg, int sse_regno)
{
+ /* The following variables hold the static issued_error state. */
+ static bool issued_sse_arg_error;
+ static bool issued_sse_ret_error;
+ static bool issued_x87_ret_error;
+
enum machine_mode tmpmode;
int bytes =
(mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode);
*************** construct_container (enum machine_mode m
*** 2574,2591 ****
some less clueful developer tries to use floating-point anyway. */
if (needed_sseregs && !TARGET_SSE)
{
! static bool issued_error;
! if (!issued_error)
{
! issued_error = true;
! if (in_return)
! error ("SSE register return with SSE disabled");
! else
! error ("SSE register argument with SSE disabled");
}
return NULL;
}
/* First construct simple cases. Avoid SCmode, since we want to use
single register to pass this type. */
if (n == 1 && mode != SCmode)
--- 2586,2623 ----
some less clueful developer tries to use floating-point anyway. */
if (needed_sseregs && !TARGET_SSE)
{
! if (in_return)
{
! if (!issued_sse_ret_error)
! {
! error ("SSE register return with SSE disabled");
! issued_sse_ret_error = true;
! }
! }
! else if (!issued_sse_arg_error)
! {
! error ("SSE register argument with SSE disabled");
! issued_sse_arg_error = true;
}
return NULL;
}
+ /* Likewise, error if the ABI requires us to return values in the
+ x87 registers and the user specified -mno-80387. */
+ if (!TARGET_80387 && in_return)
+ for (i = 0; i < n; i++)
+ if (class[i] == X86_64_X87_CLASS
+ || class[i] == X86_64_X87UP_CLASS
+ || class[i] == X86_64_COMPLEX_X87_CLASS)
+ {
+ if (!issued_x87_ret_error)
+ {
+ error ("x87 register return with x87 disabled");
+ issued_x87_ret_error = true;
+ }
+ return NULL;
+ }
+
/* First construct simple cases. Avoid SCmode, since we want to use
single register to pass this type. */
if (n == 1 && mode != SCmode)
diff -Nrcpad gcc-4.0.3/gcc/config/i386/i386.md gcc-4.0.4/gcc/config/i386/i386.md
*** gcc-4.0.3/gcc/config/i386/i386.md 2006-01-04 12:29:14.000000000 +0000
--- gcc-4.0.4/gcc/config/i386/i386.md 2006-09-18 10:14:53.000000000 +0000
***************
*** 10244,10249 ****
--- 10244,10285 ----
(const_string "ishift")))
(set_attr "mode" "DI")])
+ (define_insn "*ashldi3_cconly_rex64"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashift:DI (match_operand:DI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "immediate_operand" "e"))
+ (const_int 0)))
+ (clobber (match_scratch:DI 0 "=r"))]
+ "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (ASHIFT, DImode, operands)"
+ {
+ switch (get_attr_type (insn))
+ {
+ case TYPE_ALU:
+ gcc_assert (operands[2] == const1_rtx);
+ return "add{q}\t{%0, %0|%0, %0}";
+
+ default:
+ if (REG_P (operands[2]))
+ return "sal{q}\t{%b2, %0|%0, %b2}";
+ else if (operands[2] == const1_rtx
+ && (TARGET_SHIFT1 || optimize_size))
+ return "sal{q}\t%0";
+ else
+ return "sal{q}\t{%2, %0|%0, %2}";
+ }
+ }
+ [(set (attr "type")
+ (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD")
+ (const_int 0))
+ (match_operand 0 "register_operand" ""))
+ (match_operand 2 "const1_operand" ""))
+ (const_string "alu")
+ ]
+ (const_string "ishift")))
+ (set_attr "mode" "DI")])
+
(define_insn "*ashldi3_1"
[(set (match_operand:DI 0 "register_operand" "=&r,r")
(ashift:DI (match_operand:DI 1 "reg_or_pm1_operand" "n,0")
***************
*** 10529,10534 ****
--- 10565,10606 ----
(const_string "ishift")))
(set_attr "mode" "SI")])
+ (define_insn "*ashlsi3_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:SI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (ASHIFT, SImode, operands)"
+ {
+ switch (get_attr_type (insn))
+ {
+ case TYPE_ALU:
+ gcc_assert (operands[2] == const1_rtx);
+ return "add{l}\t{%0, %0|%0, %0}";
+
+ default:
+ if (REG_P (operands[2]))
+ return "sal{l}\t{%b2, %0|%0, %b2}";
+ else if (operands[2] == const1_rtx
+ && (TARGET_SHIFT1 || optimize_size))
+ return "sal{l}\t%0";
+ else
+ return "sal{l}\t{%2, %0|%0, %2}";
+ }
+ }
+ [(set (attr "type")
+ (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD")
+ (const_int 0))
+ (match_operand 0 "register_operand" ""))
+ (match_operand 2 "const1_operand" ""))
+ (const_string "alu")
+ ]
+ (const_string "ishift")))
+ (set_attr "mode" "SI")])
+
(define_insn "*ashlsi3_cmp_zext"
[(set (reg FLAGS_REG)
(compare
***************
*** 10689,10694 ****
--- 10761,10802 ----
(const_string "ishift")))
(set_attr "mode" "HI")])
+ (define_insn "*ashlhi3_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashift:HI (match_operand:HI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:HI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (ASHIFT, HImode, operands)"
+ {
+ switch (get_attr_type (insn))
+ {
+ case TYPE_ALU:
+ gcc_assert (operands[2] == const1_rtx);
+ return "add{w}\t{%0, %0|%0, %0}";
+
+ default:
+ if (REG_P (operands[2]))
+ return "sal{w}\t{%b2, %0|%0, %b2}";
+ else if (operands[2] == const1_rtx
+ && (TARGET_SHIFT1 || optimize_size))
+ return "sal{w}\t%0";
+ else
+ return "sal{w}\t{%2, %0|%0, %2}";
+ }
+ }
+ [(set (attr "type")
+ (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD")
+ (const_int 0))
+ (match_operand 0 "register_operand" ""))
+ (match_operand 2 "const1_operand" ""))
+ (const_string "alu")
+ ]
+ (const_string "ishift")))
+ (set_attr "mode" "HI")])
+
(define_expand "ashlqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "")
***************
*** 10850,10855 ****
--- 10958,10999 ----
(const_string "ishift")))
(set_attr "mode" "QI")])
+ (define_insn "*ashlqi3_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashift:QI (match_operand:QI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:QI 0 "=q"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (ASHIFT, QImode, operands)"
+ {
+ switch (get_attr_type (insn))
+ {
+ case TYPE_ALU:
+ gcc_assert (operands[2] == const1_rtx);
+ return "add{b}\t{%0, %0|%0, %0}";
+
+ default:
+ if (REG_P (operands[2]))
+ return "sal{b}\t{%b2, %0|%0, %b2}";
+ else if (operands[2] == const1_rtx
+ && (TARGET_SHIFT1 || optimize_size))
+ return "sal{b}\t%0";
+ else
+ return "sal{b}\t{%2, %0|%0, %2}";
+ }
+ }
+ [(set (attr "type")
+ (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD")
+ (const_int 0))
+ (match_operand 0 "register_operand" ""))
+ (match_operand 2 "const1_operand" ""))
+ (const_string "alu")
+ ]
+ (const_string "ishift")))
+ (set_attr "mode" "QI")])
+
;; See comment above `ashldi3' about how this works.
(define_expand "ashrdi3"
***************
*** 10923,10928 ****
--- 11067,11086 ----
(const_string "2")
(const_string "*")))])
+ (define_insn "*ashrdi3_one_bit_cconly_rex64"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const1_operand" ""))
+ (const_int 0)))
+ (clobber (match_scratch:DI 0 "=r"))]
+ "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+ && (TARGET_SHIFT1 || optimize_size)
+ && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)"
+ "sar{q}\t%0"
+ [(set_attr "type" "ishift")
+ (set_attr "length" "2")])
+
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
***************
*** 10940,10945 ****
--- 11098,11116 ----
[(set_attr "type" "ishift")
(set_attr "mode" "DI")])
+ (define_insn "*ashrdi3_cconly_rex64"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_int_operand" "n"))
+ (const_int 0)))
+ (clobber (match_scratch:DI 0 "=r"))]
+ "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)"
+ "sar{q}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ishift")
+ (set_attr "mode" "DI")])
+
(define_insn "*ashrdi3_1"
[(set (match_operand:DI 0 "register_operand" "=r")
(ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
***************
*** 11128,11133 ****
--- 11299,11318 ----
(const_string "2")
(const_string "*")))])
+ (define_insn "*ashrsi3_one_bit_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const1_operand" ""))
+ (const_int 0)))
+ (clobber (match_scratch:SI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && (TARGET_SHIFT1 || optimize_size)
+ && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
+ "sar{l}\t%0"
+ [(set_attr "type" "ishift")
+ (set_attr "length" "2")])
+
(define_insn "*ashrsi3_one_bit_cmp_zext"
[(set (reg FLAGS_REG)
(compare
***************
*** 11160,11165 ****
--- 11345,11363 ----
[(set_attr "type" "ishift")
(set_attr "mode" "SI")])
+ (define_insn "*ashrsi3_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:SI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
+ "sar{l}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ishift")
+ (set_attr "mode" "SI")])
+
(define_insn "*ashrsi3_cmp_zext"
[(set (reg FLAGS_REG)
(compare
***************
*** 11229,11234 ****
--- 11427,11446 ----
(const_string "2")
(const_string "*")))])
+ (define_insn "*ashrhi3_one_bit_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const1_operand" ""))
+ (const_int 0)))
+ (clobber (match_scratch:HI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && (TARGET_SHIFT1 || optimize_size)
+ && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)"
+ "sar{w}\t%0"
+ [(set_attr "type" "ishift")
+ (set_attr "length" "2")])
+
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
***************
*** 11246,11251 ****
--- 11458,11476 ----
[(set_attr "type" "ishift")
(set_attr "mode" "HI")])
+ (define_insn "*ashrhi3_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:HI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)"
+ "sar{w}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ishift")
+ (set_attr "mode" "HI")])
+
(define_expand "ashrqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "")
***************
*** 11329,11334 ****
--- 11554,11573 ----
(const_string "2")
(const_string "*")))])
+ (define_insn "*ashrqi3_one_bit_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const1_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:QI 0 "=q"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && (TARGET_SHIFT1 || optimize_size)
+ && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)"
+ "sar{b}\t%0"
+ [(set_attr "type" "ishift")
+ (set_attr "length" "2")])
+
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
***************
*** 11345,11350 ****
--- 11584,11603 ----
"sar{b}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "QI")])
+
+ (define_insn "*ashrqi3_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:QI 0 "=q"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)"
+ "sar{b}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ishift")
+ (set_attr "mode" "QI")])
+
;; Logical shift instructions
***************
*** 11404,11409 ****
--- 11657,11676 ----
(const_string "2")
(const_string "*")))])
+ (define_insn "*lshrdi3_cconly_one_bit_rex64"
+ [(set (reg FLAGS_REG)
+ (compare
+ (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const1_operand" ""))
+ (const_int 0)))
+ (clobber (match_scratch:DI 0 "=r"))]
+ "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+ && (TARGET_SHIFT1 || optimize_size)
+ && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
+ "shr{q}\t%0"
+ [(set_attr "type" "ishift")
+ (set_attr "length" "2")])
+
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
***************
*** 11421,11426 ****
--- 11688,11706 ----
[(set_attr "type" "ishift")
(set_attr "mode" "DI")])
+ (define_insn "*lshrdi3_cconly_rex64"
+ [(set (reg FLAGS_REG)
+ (compare
+ (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_int_operand" "e"))
+ (const_int 0)))
+ (clobber (match_scratch:DI 0 "=r"))]
+ "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
+ "shr{q}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ishift")
+ (set_attr "mode" "DI")])
+
(define_insn "*lshrdi3_1"
[(set (match_operand:DI 0 "register_operand" "=r")
(lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
***************
*** 11533,11538 ****
--- 11813,11832 ----
(const_string "2")
(const_string "*")))])
+ (define_insn "*lshrsi3_one_bit_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const1_operand" ""))
+ (const_int 0)))
+ (clobber (match_scratch:SI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && (TARGET_SHIFT1 || optimize_size)
+ && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
+ "shr{l}\t%0"
+ [(set_attr "type" "ishift")
+ (set_attr "length" "2")])
+
(define_insn "*lshrsi3_cmp_one_bit_zext"
[(set (reg FLAGS_REG)
(compare
***************
*** 11565,11570 ****
--- 11859,11877 ----
[(set_attr "type" "ishift")
(set_attr "mode" "SI")])
+ (define_insn "*lshrsi3_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:SI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
+ "shr{l}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ishift")
+ (set_attr "mode" "SI")])
+
(define_insn "*lshrsi3_cmp_zext"
[(set (reg FLAGS_REG)
(compare
***************
*** 11634,11639 ****
--- 11941,11960 ----
(const_string "2")
(const_string "*")))])
+ (define_insn "*lshrhi3_one_bit_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const1_operand" ""))
+ (const_int 0)))
+ (clobber (match_scratch:HI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && (TARGET_SHIFT1 || optimize_size)
+ && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
+ "shr{w}\t%0"
+ [(set_attr "type" "ishift")
+ (set_attr "length" "2")])
+
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
***************
*** 11651,11656 ****
--- 11972,11990 ----
[(set_attr "type" "ishift")
(set_attr "mode" "HI")])
+ (define_insn "*lshrhi3_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:HI 0 "=r"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
+ "shr{w}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ishift")
+ (set_attr "mode" "HI")])
+
(define_expand "lshrqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "")
***************
*** 11733,11738 ****
--- 12067,12086 ----
(const_string "2")
(const_string "*")))])
+ (define_insn "*lshrqi2_one_bit_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const1_operand" ""))
+ (const_int 0)))
+ (clobber (match_scratch:QI 0 "=q"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && (TARGET_SHIFT1 || optimize_size)
+ && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)"
+ "shr{b}\t%0"
+ [(set_attr "type" "ishift")
+ (set_attr "length" "2")])
+
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
***************
*** 11749,11754 ****
--- 12097,12115 ----
"shr{b}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "QI")])
+
+ (define_insn "*lshrqi2_cconly"
+ [(set (reg FLAGS_REG)
+ (compare
+ (lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
+ (match_operand:QI 2 "const_1_to_31_operand" "I"))
+ (const_int 0)))
+ (clobber (match_scratch:QI 0 "=q"))]
+ "ix86_match_ccmode (insn, CCGOCmode)
+ && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)"
+ "shr{b}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ishift")
+ (set_attr "mode" "QI")])
;; Rotate instructions
***************
*** 12136,12143 ****
(define_expand "extv"
[(set (match_operand:SI 0 "register_operand" "")
(sign_extract:SI (match_operand:SI 1 "register_operand" "")
! (match_operand:SI 2 "immediate_operand" "")
! (match_operand:SI 3 "immediate_operand" "")))]
""
{
/* Handle extractions from %ah et al. */
--- 12497,12504 ----
(define_expand "extv"
[(set (match_operand:SI 0 "register_operand" "")
(sign_extract:SI (match_operand:SI 1 "register_operand" "")
! (match_operand:SI 2 "const8_operand" "")
! (match_operand:SI 3 "const8_operand" "")))]
""
{
/* Handle extractions from %ah et al. */
***************
*** 12153,12160 ****
(define_expand "extzv"
[(set (match_operand:SI 0 "register_operand" "")
(zero_extract:SI (match_operand 1 "ext_register_operand" "")
! (match_operand:SI 2 "immediate_operand" "")
! (match_operand:SI 3 "immediate_operand" "")))]
""
{
/* Handle extractions from %ah et al. */
--- 12514,12521 ----
(define_expand "extzv"
[(set (match_operand:SI 0 "register_operand" "")
(zero_extract:SI (match_operand 1 "ext_register_operand" "")
! (match_operand:SI 2 "const8_operand" "")
! (match_operand:SI 3 "const8_operand" "")))]
""
{
/* Handle extractions from %ah et al. */
***************
*** 12169,12180 ****
(define_expand "insv"
[(set (zero_extract (match_operand 0 "ext_register_operand" "")
! (match_operand 1 "immediate_operand" "")
! (match_operand 2 "immediate_operand" ""))
(match_operand 3 "register_operand" ""))]
""
{
! /* Handle extractions from %ah et al. */
if (INTVAL (operands[1]) != 8 || INTVAL (operands[2]) != 8)
FAIL;
--- 12530,12541 ----
(define_expand "insv"
[(set (zero_extract (match_operand 0 "ext_register_operand" "")
! (match_operand 1 "const8_operand" "")
! (match_operand 2 "const8_operand" ""))
(match_operand 3 "register_operand" ""))]
""
{
! /* Handle insertions to %ah et al. */
if (INTVAL (operands[1]) != 8 || INTVAL (operands[2]) != 8)
FAIL;
diff -Nrcpad gcc-4.0.3/gcc/config/i386/predicates.md gcc-4.0.4/gcc/config/i386/predicates.md
*** gcc-4.0.3/gcc/config/i386/predicates.md 2005-12-02 22:58:33.000000000 +0000
--- gcc-4.0.4/gcc/config/i386/predicates.md 2006-05-16 01:17:13.000000000 +0000
***************
*** 501,506 ****
--- 501,511 ----
(and (match_code "const_int")
(match_test "op == const1_rtx")))
+ ;; Match exactly eight.
+ (define_predicate "const8_operand"
+ (and (match_code "const_int")
+ (match_test "INTVAL (op) == 8")))
+
;; Match 2, 4, or 8. Used for leal multiplicands.
(define_predicate "const248_operand"
(match_code "const_int")
diff -Nrcpad gcc-4.0.3/gcc/config/ia64/hpux.h gcc-4.0.4/gcc/config/ia64/hpux.h
*** gcc-4.0.3/gcc/config/ia64/hpux.h 2005-03-07 03:29:38.000000000 +0000
--- gcc-4.0.4/gcc/config/ia64/hpux.h 2006-10-25 23:03:33.000000000 +0000
*************** do { \
*** 53,58 ****
--- 53,59 ----
builtin_define("_HPUX_SOURCE"); \
builtin_define("__STDC_EXT__"); \
builtin_define("__STDCPP__"); \
+ builtin_define("_INCLUDE__STDC_A1_SOURCE"); \
} \
if (TARGET_ILP32) \
builtin_define("_ILP32"); \
*************** do { \
*** 71,77 ****
#undef ENDFILE_SPEC
#undef STARTFILE_SPEC
! #define STARTFILE_SPEC "%{!shared:%{static:crt0%O%s}}"
#undef LINK_SPEC
#define LINK_SPEC \
--- 72,80 ----
#undef ENDFILE_SPEC
#undef STARTFILE_SPEC
! #define STARTFILE_SPEC "%{!shared:%{static:crt0%O%s} \
! %{mlp64:/usr/lib/hpux64/unix98%O%s} \
! %{!mlp64:/usr/lib/hpux32/unix98%O%s}}"
#undef LINK_SPEC
#define LINK_SPEC \
diff -Nrcpad gcc-4.0.3/gcc/config/ia64/ia64.c gcc-4.0.4/gcc/config/ia64/ia64.c
*** gcc-4.0.3/gcc/config/ia64/ia64.c 2005-11-30 08:38:06.000000000 +0000
--- gcc-4.0.4/gcc/config/ia64/ia64.c 2006-10-09 18:26:35.000000000 +0000
*************** ia64_legitimate_constant_p (rtx x)
*** 741,747 ****
case CONST:
case SYMBOL_REF:
! return tls_symbolic_operand_type (x) == 0;
default:
return false;
--- 741,770 ----
case CONST:
case SYMBOL_REF:
! /* ??? Short term workaround for PR 28490. We must make the code here
! match the code in ia64_expand_move and move_operand, even though they
! are both technically wrong. */
! if (tls_symbolic_operand_type (x) == 0)
! {
! HOST_WIDE_INT addend = 0;
! rtx op = x;
!
! if (GET_CODE (op) == CONST
! && GET_CODE (XEXP (op, 0)) == PLUS
! && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT)
! {
! addend = INTVAL (XEXP (XEXP (op, 0), 1));
! op = XEXP (XEXP (op, 0), 0);
! }
!
! if (any_offset_symbol_operand (op, GET_MODE (op))
! || function_operand (op, GET_MODE (op)))
! return true;
! if (aligned_offset_symbol_operand (op, GET_MODE (op)))
! return (addend & 0x3fff) == 0;
! return false;
! }
! return false;
default:
return false;
diff -Nrcpad gcc-4.0.3/gcc/config/ia64/ia64.md gcc-4.0.4/gcc/config/ia64/ia64.md
*** gcc-4.0.3/gcc/config/ia64/ia64.md 2005-05-16 18:25:45.000000000 +0000
--- gcc-4.0.4/gcc/config/ia64/ia64.md 2006-03-16 18:42:18.000000000 +0000
***************
*** 1119,1126 ****
(define_insn "extv"
[(set (match_operand:DI 0 "gr_register_operand" "=r")
(sign_extract:DI (match_operand:DI 1 "gr_register_operand" "r")
! (match_operand:DI 2 "const_int_operand" "n")
! (match_operand:DI 3 "const_int_operand" "n")))]
""
"extr %0 = %1, %3, %2"
[(set_attr "itanium_class" "ishf")])
--- 1119,1126 ----
(define_insn "extv"
[(set (match_operand:DI 0 "gr_register_operand" "=r")
(sign_extract:DI (match_operand:DI 1 "gr_register_operand" "r")
! (match_operand:DI 2 "extr_len_operand" "n")
! (match_operand:DI 3 "shift_count_operand" "M")))]
""
"extr %0 = %1, %3, %2"
[(set_attr "itanium_class" "ishf")])
***************
*** 1128,1135 ****
(define_insn "extzv"
[(set (match_operand:DI 0 "gr_register_operand" "=r")
(zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r")
! (match_operand:DI 2 "const_int_operand" "n")
! (match_operand:DI 3 "const_int_operand" "n")))]
""
"extr.u %0 = %1, %3, %2"
[(set_attr "itanium_class" "ishf")])
--- 1128,1135 ----
(define_insn "extzv"
[(set (match_operand:DI 0 "gr_register_operand" "=r")
(zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r")
! (match_operand:DI 2 "extr_len_operand" "n")
! (match_operand:DI 3 "shift_count_operand" "M")))]
""
"extr.u %0 = %1, %3, %2"
[(set_attr "itanium_class" "ishf")])
***************
*** 1525,1531 ****
(and:BI (ne:BI (zero_extract:DI
(match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "const_int_operand" "n"))
(const_int 0))
(match_operand:BI 3 "register_operand" "0")))]
""
--- 1525,1531 ----
(and:BI (ne:BI (zero_extract:DI
(match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "shift_count_operand" "M"))
(const_int 0))
(match_operand:BI 3 "register_operand" "0")))]
""
***************
*** 1537,1543 ****
(and:BI (eq:BI (zero_extract:DI
(match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "const_int_operand" "n"))
(const_int 0))
(match_operand:BI 3 "register_operand" "0")))]
""
--- 1537,1543 ----
(and:BI (eq:BI (zero_extract:DI
(match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "shift_count_operand" "M"))
(const_int 0))
(match_operand:BI 3 "register_operand" "0")))]
""
***************
*** 1649,1655 ****
(ior:BI (ne:BI (zero_extract:DI
(match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "const_int_operand" "n"))
(const_int 0))
(match_operand:BI 3 "register_operand" "0")))]
""
--- 1649,1655 ----
(ior:BI (ne:BI (zero_extract:DI
(match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "shift_count_operand" "M"))
(const_int 0))
(match_operand:BI 3 "register_operand" "0")))]
""
***************
*** 1661,1667 ****
(ior:BI (eq:BI (zero_extract:DI
(match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "const_int_operand" "n"))
(const_int 0))
(match_operand:BI 3 "register_operand" "0")))]
""
--- 1661,1667 ----
(ior:BI (eq:BI (zero_extract:DI
(match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "shift_count_operand" "M"))
(const_int 0))
(match_operand:BI 3 "register_operand" "0")))]
""
***************
*** 4853,4859 ****
[(set (match_operand:BI 0 "register_operand" "=c")
(eq:BI (zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "immediate_operand" "n"))
(const_int 0)))]
""
"tbit.z %0, %I0 = %1, %2"
--- 4853,4859 ----
[(set (match_operand:BI 0 "register_operand" "=c")
(eq:BI (zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "shift_count_operand" "M"))
(const_int 0)))]
""
"tbit.z %0, %I0 = %1, %2"
***************
*** 4863,4869 ****
[(set (match_operand:BI 0 "register_operand" "=c")
(ne:BI (zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "immediate_operand" "n"))
(const_int 0)))]
""
"tbit.nz %0, %I0 = %1, %2"
--- 4863,4869 ----
[(set (match_operand:BI 0 "register_operand" "=c")
(ne:BI (zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r")
(const_int 1)
! (match_operand:DI 2 "shift_count_operand" "M"))
(const_int 0)))]
""
"tbit.nz %0, %I0 = %1, %2"
diff -Nrcpad gcc-4.0.3/gcc/config/ia64/predicates.md gcc-4.0.4/gcc/config/ia64/predicates.md
*** gcc-4.0.3/gcc/config/ia64/predicates.md 2005-05-12 17:50:25.000000000 +0000
--- gcc-4.0.4/gcc/config/ia64/predicates.md 2006-03-16 18:42:18.000000000 +0000
***************
*** 486,491 ****
--- 486,496 ----
(and (match_code "const_int")
(match_test "CONST_OK_FOR_M (INTVAL (op))")))
+ ;; True if OP-1 is a 6 bit immediate operand, used in extr instruction.
+ (define_predicate "extr_len_operand"
+ (and (match_code "const_int")
+ (match_test "CONST_OK_FOR_M (INTVAL (op) - 1)")))
+
;; True if OP is a 5 bit immediate operand.
(define_predicate "shift_32bit_count_operand"
(and (match_code "const_int")
diff -Nrcpad gcc-4.0.3/gcc/config/m32r/initfini.c gcc-4.0.4/gcc/config/m32r/initfini.c
*** gcc-4.0.3/gcc/config/m32r/initfini.c 2003-09-27 04:48:30.000000000 +0000
--- gcc-4.0.4/gcc/config/m32r/initfini.c 2006-04-04 09:18:38.000000000 +0000
*************** static void __do_global_dtors (void)
*** 72,78 ****
asm ("__do_global_dtors") __attribute__ ((used, section (".text")));
static void
! __do_global_dtors ()
{
func_ptr *p;
--- 72,78 ----
asm ("__do_global_dtors") __attribute__ ((used, section (".text")));
static void
! __do_global_dtors (void)
{
func_ptr *p;
*************** static void __do_global_ctors (void)
*** 137,143 ****
asm ("__do_global_ctors") __attribute__ ((used, section (".text")));
static void
! __do_global_ctors ()
{
func_ptr *p;
--- 137,143 ----
asm ("__do_global_ctors") __attribute__ ((used, section (".text")));
static void
! __do_global_ctors (void)
{
func_ptr *p;
diff -Nrcpad gcc-4.0.3/gcc/config/m32r/m32r.c gcc-4.0.4/gcc/config/m32r/m32r.c
*** gcc-4.0.3/gcc/config/m32r/m32r.c 2005-08-10 08:21:09.000000000 +0000
--- gcc-4.0.4/gcc/config/m32r/m32r.c 2006-04-04 09:31:50.000000000 +0000
*************** gen_compare (enum rtx_code code, rtx x,
*** 1031,1042 ****
{
case EQ:
if (GET_CODE (y) == CONST_INT
! && CMP_INT16_P (INTVAL (y)) /* Reg equal to small const. */
! && y != const0_rtx)
{
rtx tmp = gen_reg_rtx (SImode);
! emit_insn (gen_addsi3 (tmp, x, GEN_INT (-INTVAL (y))));
x = tmp;
y = const0_rtx;
}
--- 1031,1041 ----
{
case EQ:
if (GET_CODE (y) == CONST_INT
! && UINT16_P (INTVAL (y)))
{
rtx tmp = gen_reg_rtx (SImode);
! emit_insn (gen_xorsi3 (tmp, x, GEN_INT (INTVAL (y))));
x = tmp;
y = const0_rtx;
}
*************** gen_compare (enum rtx_code code, rtx x,
*** 1154,1164 ****
/* Reg/smallconst equal comparison. */
if (compare_code == EQ
&& GET_CODE (y) == CONST_INT
! && CMP_INT16_P (INTVAL (y)))
{
rtx tmp = gen_reg_rtx (SImode);
! emit_insn (gen_addsi3 (tmp, x, GEN_INT (-INTVAL (y))));
return gen_rtx_fmt_ee (code, CCmode, tmp, const0_rtx);
}
--- 1153,1163 ----
/* Reg/smallconst equal comparison. */
if (compare_code == EQ
&& GET_CODE (y) == CONST_INT
! && UINT16_P (INTVAL (y)))
{
rtx tmp = gen_reg_rtx (SImode);
! emit_insn (gen_xorsi3 (tmp, x, GEN_INT (INTVAL (y))));
return gen_rtx_fmt_ee (code, CCmode, tmp, const0_rtx);
}
*************** m32r_output_function_epilogue (FILE * fi
*** 1872,1882 ****
else if (reg_offset < 32768)
fprintf (file, "\tadd3 %s,%s,%s%d\n",
sp_str, sp_str, IMMEDIATE_PREFIX, reg_offset);
! else
fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n",
reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset,
sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
}
else if (frame_pointer_needed)
{
--- 1871,1889 ----
else if (reg_offset < 32768)
fprintf (file, "\tadd3 %s,%s,%s%d\n",
sp_str, sp_str, IMMEDIATE_PREFIX, reg_offset);
! else if (reg_offset <= 0xffffff)
fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n",
reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset,
sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
+ else
+ fprintf (file, "\tseth %s,%shigh(%d)\n\tor3 %s,%s,%slow(%d)\n\tadd %s,%s\n",
+ reg_names[PROLOGUE_TMP_REGNUM],
+ IMMEDIATE_PREFIX, reg_offset,
+ reg_names[PROLOGUE_TMP_REGNUM],
+ reg_names[PROLOGUE_TMP_REGNUM],
+ IMMEDIATE_PREFIX, reg_offset,
+ sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
}
else if (frame_pointer_needed)
{
*************** m32r_output_function_epilogue (FILE * fi
*** 1887,1896 ****
else if (reg_offset < 32768)
fprintf (file, "\tadd3 %s,%s,%s%d\n",
sp_str, fp_str, IMMEDIATE_PREFIX, reg_offset);
else
! fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n",
reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset,
sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
}
else
--- 1894,1913 ----
else if (reg_offset < 32768)
fprintf (file, "\tadd3 %s,%s,%s%d\n",
sp_str, fp_str, IMMEDIATE_PREFIX, reg_offset);
+ else if (reg_offset <= 0xffffff)
+ fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n\tmv %s,%s\n",
+ reg_names[PROLOGUE_TMP_REGNUM],
+ IMMEDIATE_PREFIX, reg_offset,
+ reg_names[PROLOGUE_TMP_REGNUM], fp_str,
+ sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
else
! fprintf (file, "\tseth %s,%shigh(%d)\nor3 %s,%s,%slow(%d)\n\tadd %s,%s\n\tmv %s,%s\n",
reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset,
+ reg_names[PROLOGUE_TMP_REGNUM],
+ reg_names[PROLOGUE_TMP_REGNUM],
+ IMMEDIATE_PREFIX, reg_offset,
+ reg_names[PROLOGUE_TMP_REGNUM], fp_str,
sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
}
else
*************** m32r_output_function_epilogue (FILE * fi
*** 1912,1919 ****
/* Remove varargs area if present. */
if (current_frame_info.pretend_size != 0)
! fprintf (file, "\taddi %s,%s%d\n",
! sp_str, IMMEDIATE_PREFIX, current_frame_info.pretend_size);
/* Emit the return instruction. */
if (M32R_INTERRUPT_P (fn_type))
--- 1929,1954 ----
/* Remove varargs area if present. */
if (current_frame_info.pretend_size != 0)
! if (current_frame_info.pretend_size < 128)
! fprintf (file, "\taddi %s,%s%d\n",
! sp_str, IMMEDIATE_PREFIX, current_frame_info.pretend_size);
! else if (current_frame_info.pretend_size < 32768)
! fprintf (file, "\tadd3 %s,%s,%s%d\n",
! sp_str, sp_str, IMMEDIATE_PREFIX,
! current_frame_info.pretend_size);
! else if (current_frame_info.pretend_size <= 0xffffff)
! fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n",
! reg_names[PROLOGUE_TMP_REGNUM],
! IMMEDIATE_PREFIX, current_frame_info.pretend_size,
! sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
! else
! fprintf (file, "\tseth %s,%shigh(%d)\n\tor3 %s,%s,%slow(%d)\n\tadd %s,%s\n",
! reg_names[PROLOGUE_TMP_REGNUM],
! IMMEDIATE_PREFIX, current_frame_info.pretend_size,
! reg_names[PROLOGUE_TMP_REGNUM],
! reg_names[PROLOGUE_TMP_REGNUM],
! IMMEDIATE_PREFIX, current_frame_info.pretend_size,
! sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
/* Emit the return instruction. */
if (M32R_INTERRUPT_P (fn_type))
diff -Nrcpad gcc-4.0.3/gcc/config/m32r/m32r.md gcc-4.0.4/gcc/config/m32r/m32r.md
*** gcc-4.0.3/gcc/config/m32r/m32r.md 2005-09-07 12:04:41.000000000 +0000
--- gcc-4.0.4/gcc/config/m32r/m32r.md 2006-04-04 09:31:50.000000000 +0000
***************
*** 1609,1615 ****
DONE;
}
! if (! reg_or_eq_int16_operand (op2, mode))
op2 = force_reg (mode, op2);
emit_insn (gen_seq_insn (op0, op1, op2));
--- 1609,1615 ----
DONE;
}
! if (! reg_or_uint16_operand (op2, mode))
op2 = force_reg (mode, op2);
emit_insn (gen_seq_insn (op0, op1, op2));
***************
*** 1671,1677 ****
(define_insn "seq_insn"
[(set (match_operand:SI 0 "register_operand" "=r,r,??r,r")
(eq:SI (match_operand:SI 1 "register_operand" "r,r,r,r")
! (match_operand:SI 2 "reg_or_eq_int16_operand" "r,r,r,PK")))
(clobber (reg:CC 17))
(clobber (match_scratch:SI 3 "=1,2,&r,r"))]
"TARGET_M32R"
--- 1671,1677 ----
(define_insn "seq_insn"
[(set (match_operand:SI 0 "register_operand" "=r,r,??r,r")
(eq:SI (match_operand:SI 1 "register_operand" "r,r,r,r")
! (match_operand:SI 2 "reg_or_uint16_operand" "r,r,r,K")))
(clobber (reg:CC 17))
(clobber (match_scratch:SI 3 "=1,2,&r,r"))]
"TARGET_M32R"
***************
*** 1682,1688 ****
(define_split
[(set (match_operand:SI 0 "register_operand" "")
(eq:SI (match_operand:SI 1 "register_operand" "")
! (match_operand:SI 2 "reg_or_eq_int16_operand" "")))
(clobber (reg:CC 17))
(clobber (match_scratch:SI 3 ""))]
"TARGET_M32R && reload_completed"
--- 1682,1688 ----
(define_split
[(set (match_operand:SI 0 "register_operand" "")
(eq:SI (match_operand:SI 1 "register_operand" "")
! (match_operand:SI 2 "reg_or_uint16_operand" "")))
(clobber (reg:CC 17))
(clobber (match_scratch:SI 3 ""))]
"TARGET_M32R && reload_completed"
***************
*** 1710,1720 ****
op1 = op3;
}
! if (GET_CODE (op2) == CONST_INT && (value = INTVAL (op2)) != 0
! && CMP_INT16_P (value))
! emit_insn (gen_addsi3 (op3, op1, GEN_INT (-value)));
! else
! emit_insn (gen_xorsi3 (op3, op1, op2));
emit_insn (gen_cmp_ltusi_insn (op3, const1_rtx));
emit_insn (gen_movcc_insn (op0));
--- 1710,1716 ----
op1 = op3;
}
! emit_insn (gen_xorsi3 (op3, op1, op2));
emit_insn (gen_cmp_ltusi_insn (op3, const1_rtx));
emit_insn (gen_movcc_insn (op0));
diff -Nrcpad gcc-4.0.3/gcc/config/mips/mips.c gcc-4.0.4/gcc/config/mips/mips.c
*** gcc-4.0.3/gcc/config/mips/mips.c 2005-12-09 08:13:51.000000000 +0000
--- gcc-4.0.4/gcc/config/mips/mips.c 2006-09-10 19:36:20.000000000 +0000
*************** bool
*** 3950,3962 ****
mips_expand_unaligned_store (rtx dest, rtx src, unsigned int width, int bitpos)
{
rtx left, right;
if (!mips_get_unaligned_mem (&dest, width, bitpos, &left, &right))
return false;
! src = gen_lowpart (mode_for_size (width, MODE_INT, 0), src);
! if (GET_MODE (src) == DImode)
{
emit_insn (gen_mov_sdl (dest, src, left));
emit_insn (gen_mov_sdr (copy_rtx (dest), copy_rtx (src), right));
--- 3950,3964 ----
mips_expand_unaligned_store (rtx dest, rtx src, unsigned int width, int bitpos)
{
rtx left, right;
+ enum machine_mode mode;
if (!mips_get_unaligned_mem (&dest, width, bitpos, &left, &right))
return false;
! mode = mode_for_size (width, MODE_INT, 0);
! src = gen_lowpart (mode, src);
! if (mode == DImode)
{
emit_insn (gen_mov_sdl (dest, src, left));
emit_insn (gen_mov_sdr (copy_rtx (dest), copy_rtx (src), right));
*************** mips_expand_unaligned_store (rtx dest, r
*** 3968,3973 ****
--- 3970,3989 ----
}
return true;
}
+
+ /* Return true if X is a MEM with the same size as MODE. */
+
+ bool
+ mips_mem_fits_mode_p (enum machine_mode mode, rtx x)
+ {
+ rtx size;
+
+ if (!MEM_P (x))
+ return false;
+
+ size = MEM_SIZE (x);
+ return size && INTVAL (size) == GET_MODE_SIZE (mode);
+ }
/* Set up globals to generate code for the ISA or processor
described by INFO. */
diff -Nrcpad gcc-4.0.3/gcc/config/mips/mips.md gcc-4.0.4/gcc/config/mips/mips.md
*** gcc-4.0.3/gcc/config/mips/mips.md 2005-05-08 11:56:58.000000000 +0000
--- gcc-4.0.4/gcc/config/mips/mips.md 2006-09-10 19:36:20.000000000 +0000
*************** beq\t%2,%.,1b\;\
*** 2835,2841 ****
(unspec:GPR [(match_operand:BLK 1 "memory_operand" "m")
(match_operand:QI 2 "memory_operand" "m")]
UNSPEC_LOAD_LEFT))]
! "!TARGET_MIPS16"
"l\t%0,%2"
[(set_attr "type" "load")
(set_attr "mode" "")])
--- 2835,2841 ----
(unspec:GPR [(match_operand:BLK 1 "memory_operand" "m")
(match_operand:QI 2 "memory_operand" "m")]
UNSPEC_LOAD_LEFT))]
! "!TARGET_MIPS16 && mips_mem_fits_mode_p (mode, operands[1])"
"l\t%0,%2"
[(set_attr "type" "load")
(set_attr "mode" "")])
*************** beq\t%2,%.,1b\;\
*** 2846,2852 ****
(match_operand:QI 2 "memory_operand" "m")
(match_operand:GPR 3 "register_operand" "0")]
UNSPEC_LOAD_RIGHT))]
! "!TARGET_MIPS16"
"r\t%0,%2"
[(set_attr "type" "load")
(set_attr "mode" "")])
--- 2846,2852 ----
(match_operand:QI 2 "memory_operand" "m")
(match_operand:GPR 3 "register_operand" "0")]
UNSPEC_LOAD_RIGHT))]
! "!TARGET_MIPS16 && mips_mem_fits_mode_p (mode, operands[1])"
"r\t%0,%2"
[(set_attr "type" "load")
(set_attr "mode" "")])
*************** beq\t%2,%.,1b\;\
*** 2856,2862 ****
(unspec:BLK [(match_operand:GPR 1 "reg_or_0_operand" "dJ")
(match_operand:QI 2 "memory_operand" "m")]
UNSPEC_STORE_LEFT))]
! "!TARGET_MIPS16"
"l\t%z1,%2"
[(set_attr "type" "store")
(set_attr "mode" "")])
--- 2856,2862 ----
(unspec:BLK [(match_operand:GPR 1 "reg_or_0_operand" "dJ")
(match_operand:QI 2 "memory_operand" "m")]
UNSPEC_STORE_LEFT))]
! "!TARGET_MIPS16 && mips_mem_fits_mode_p (mode, operands[0])"
"l\t%z1,%2"
[(set_attr "type" "store")
(set_attr "mode" "")])
*************** beq\t%2,%.,1b\;\
*** 2867,2873 ****
(match_operand:QI 2 "memory_operand" "m")
(match_dup 0)]
UNSPEC_STORE_RIGHT))]
! "!TARGET_MIPS16"
"r\t%z1,%2"
[(set_attr "type" "store")
(set_attr "mode" "")])
--- 2867,2873 ----
(match_operand:QI 2 "memory_operand" "m")
(match_dup 0)]
UNSPEC_STORE_RIGHT))]
! "!TARGET_MIPS16 && mips_mem_fits_mode_p (mode, operands[0])"
"r\t%z1,%2"
[(set_attr "type" "store")
(set_attr "mode" "")])
diff -Nrcpad gcc-4.0.3/gcc/config/mips/mips-protos.h gcc-4.0.4/gcc/config/mips/mips-protos.h
*** gcc-4.0.3/gcc/config/mips/mips-protos.h 2004-12-30 03:08:18.000000000 +0000
--- gcc-4.0.4/gcc/config/mips/mips-protos.h 2006-09-10 19:36:20.000000000 +0000
*************** extern void mips_va_start (tree, rtx);
*** 148,153 ****
--- 148,154 ----
extern bool mips_expand_unaligned_load (rtx, rtx, unsigned int, int);
extern bool mips_expand_unaligned_store (rtx, rtx, unsigned int, int);
+ extern bool mips_mem_fits_mode_p (enum machine_mode mode, rtx x);
extern void override_options (void);
extern void mips_conditional_register_usage (void);
extern void mips_order_regs_for_local_alloc (void);
diff -Nrcpad gcc-4.0.3/gcc/config/pa/pa32-linux.h gcc-4.0.4/gcc/config/pa/pa32-linux.h
*** gcc-4.0.3/gcc/config/pa/pa32-linux.h 2004-10-17 18:09:48.000000000 +0000
--- gcc-4.0.4/gcc/config/pa/pa32-linux.h 2006-03-14 15:10:20.000000000 +0000
***************
*** 1,5 ****
/* Definitions for PA_RISC with ELF-32 format
! Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc.
This file is part of GCC.
--- 1,5 ----
/* Definitions for PA_RISC with ELF-32 format
! Copyright (C) 2000, 2002, 2004, 2006 Free Software Foundation, Inc.
This file is part of GCC.
*************** Boston, MA 02111-1307, USA. */
*** 36,39 ****
--- 36,61 ----
aligned(sizeof(func_ptr)))) \
= { (func_ptr) (-1) }
+ /* This is a PIC version of CRT_CALL_STATIC_FUNCTION. The PIC
+ register has to be saved before the call and restored after
+ the call. We assume that register %r4 is available for this
+ purpose. The hack prevents GCC from deleting the restore. */
+ #ifdef CRTSTUFFS_O
+ #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
+ static void __attribute__((__used__)) \
+ call_ ## FUNC (void) \
+ { \
+ asm (SECTION_OP); \
+ asm volatile ("bl " #FUNC ",%%r2\n\t" \
+ "copy %%r19,%%r4\n\t" \
+ "copy %%r4,%%r19\n" \
+ : \
+ : \
+ : "r1", "r2", "r4", "r20", "r21", \
+ "r22", "r23", "r24", "r25", "r26", \
+ "r27", "r28", "r29", "r31"); \
+ asm (TEXT_SECTION_ASM_OP); \
+ }
+ #endif
+
#define MD_UNWIND_SUPPORT "config/pa/linux-unwind.h"
diff -Nrcpad gcc-4.0.3/gcc/config/pa/pa.c gcc-4.0.4/gcc/config/pa/pa.c
*** gcc-4.0.3/gcc/config/pa/pa.c 2006-02-07 22:13:22.000000000 +0000
--- gcc-4.0.4/gcc/config/pa/pa.c 2007-01-20 16:39:21.000000000 +0000
*************** emit_move_sequence (rtx *operands, enum
*** 2233,2238 ****
--- 2233,2239 ----
because PLUS uses an 11-bit immediate and the insn sequence
generated is not as efficient as the one using HIGH/LO_SUM. */
if (GET_CODE (operand1) == CONST_INT
+ && GET_MODE_BITSIZE (mode) <= BITS_PER_WORD
&& GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT
&& !insert)
{
*************** output_move_double (rtx *operands)
*** 2686,2697 ****
else if (GET_CODE (addr) == PLUS
&& GET_CODE (XEXP (addr, 0)) == MULT)
{
rtx high_reg = gen_rtx_SUBREG (SImode, operands[0], 0);
if (!reg_overlap_mentioned_p (high_reg, addr))
{
- rtx xoperands[3];
-
xoperands[0] = high_reg;
xoperands[1] = XEXP (addr, 1);
xoperands[2] = XEXP (XEXP (addr, 0), 0);
--- 2687,2697 ----
else if (GET_CODE (addr) == PLUS
&& GET_CODE (XEXP (addr, 0)) == MULT)
{
+ rtx xoperands[4];
rtx high_reg = gen_rtx_SUBREG (SImode, operands[0], 0);
if (!reg_overlap_mentioned_p (high_reg, addr))
{
xoperands[0] = high_reg;
xoperands[1] = XEXP (addr, 1);
xoperands[2] = XEXP (XEXP (addr, 0), 0);
*************** output_move_double (rtx *operands)
*** 2702,2709 ****
}
else
{
- rtx xoperands[3];
-
xoperands[0] = high_reg;
xoperands[1] = XEXP (addr, 1);
xoperands[2] = XEXP (XEXP (addr, 0), 0);
--- 2702,2707 ----
*************** return_addr_rtx (int count, rtx frameadd
*** 4681,4688 ****
GEN_INT (0x00011820), NE, NULL_RTX, SImode, 1);
emit_jump_insn (gen_bne (label));
emit_cmp_insn (gen_rtx_MEM (SImode, plus_constant (ins, 12)),
! GEN_INT (0xe0400002), NE, NULL_RTX, SImode, 1);
/* If there is no export stub then just use the value saved from
the return pointer register. */
--- 4679,4688 ----
GEN_INT (0x00011820), NE, NULL_RTX, SImode, 1);
emit_jump_insn (gen_bne (label));
+ /* 0xe0400002 must be specified as -532676606 so that it won't be
+ rejected as an invalid immediate operand on 64-bit hosts. */
emit_cmp_insn (gen_rtx_MEM (SImode, plus_constant (ins, 12)),
! GEN_INT (-532676606), NE, NULL_RTX, SImode, 1);
/* If there is no export stub then just use the value saved from
the return pointer register. */
diff -Nrcpad gcc-4.0.3/gcc/config/pa/pa.h gcc-4.0.4/gcc/config/pa/pa.h
*** gcc-4.0.3/gcc/config/pa/pa.h 2006-02-18 16:17:46.000000000 +0000
--- gcc-4.0.4/gcc/config/pa/pa.h 2007-01-12 02:27:01.000000000 +0000
*************** forget_section (void) \
*** 1948,1956 ****
/* This is how to output the definition of a user-level label named NAME,
such as the label on a static function or variable NAME. */
! #define ASM_OUTPUT_LABEL(FILE, NAME) \
! do { assemble_name (FILE, NAME); \
! fputc ('\n', FILE); } while (0)
/* This is how to output a reference to a user-level label named NAME.
`assemble_name' uses this. */
--- 1948,1961 ----
/* This is how to output the definition of a user-level label named NAME,
such as the label on a static function or variable NAME. */
! #define ASM_OUTPUT_LABEL(FILE,NAME) \
! do { \
! assemble_name ((FILE), (NAME)); \
! if (TARGET_GAS) \
! fputs (":\n", (FILE)); \
! else \
! fputc ('\n', (FILE)); \
! } while (0)
/* This is how to output a reference to a user-level label named NAME.
`assemble_name' uses this. */
*************** forget_section (void) \
*** 1983,1988 ****
--- 1988,2004 ----
#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
sprintf (LABEL, "*%c$%s%04ld", (PREFIX)[0], (PREFIX) + 1, (long)(NUM))
+ /* Output the definition of a compiler-generated label named NAME. */
+
+ #define ASM_OUTPUT_INTERNAL_LABEL(FILE,NAME) \
+ do { \
+ assemble_name_raw ((FILE), (NAME)); \
+ if (TARGET_GAS) \
+ fputs (":\n", (FILE)); \
+ else \
+ fputc ('\n', (FILE)); \
+ } while (0)
+
#define TARGET_ASM_GLOBALIZE_LABEL pa_globalize_label
#define ASM_OUTPUT_ASCII(FILE, P, SIZE) \
diff -Nrcpad gcc-4.0.3/gcc/config/pa/pa-linux.h gcc-4.0.4/gcc/config/pa/pa-linux.h
*** gcc-4.0.3/gcc/config/pa/pa-linux.h 2004-11-11 03:18:02.000000000 +0000
--- gcc-4.0.4/gcc/config/pa/pa-linux.h 2007-01-12 02:27:01.000000000 +0000
*************** Boston, MA 02111-1307, USA. */
*** 141,146 ****
--- 141,149 ----
ASM_GENERATE_INTERNAL_LABEL(), so do not define it here. */
/* Use the default. */
+ #undef ASM_OUTPUT_INTERNAL_LABEL
+
+ /* Use the default. */
#undef TARGET_ASM_GLOBALIZE_LABEL
/* Globalizing directive for a label. */
#define GLOBAL_ASM_OP ".globl "
diff -Nrcpad gcc-4.0.3/gcc/config/pa/pa.md gcc-4.0.4/gcc/config/pa/pa.md
*** gcc-4.0.3/gcc/config/pa/pa.md 2006-02-16 13:08:01.000000000 +0000
--- gcc-4.0.4/gcc/config/pa/pa.md 2006-12-09 03:35:43.000000000 +0000
***************
*** 4199,4204 ****
--- 4199,4205 ----
if (GET_CODE (op1) == CONST_INT)
{
+ #if HOST_BITS_PER_WIDE_INT <= 32
operands[0] = operand_subword (op0, 1, 0, DImode);
output_asm_insn (\"ldil L'%1,%0\", operands);
***************
*** 4208,4213 ****
--- 4209,4224 ----
else
output_asm_insn (\"ldi 0,%0\", operands);
return \"\";
+ #else
+ operands[0] = operand_subword (op0, 1, 0, DImode);
+ operands[1] = GEN_INT (INTVAL (op1) & 0xffffffff));
+ output_asm_insn (\"ldil L'%1,%0\", operands);
+
+ operands[0] = operand_subword (op0, 0, 0, DImode);
+ operands[1] = GEN_INT (INTVAL (op1) >> 32);
+ output_asm_insn (singlemove_string (operands), operands);
+ return \"\";
+ #endif
}
else if (GET_CODE (op1) == CONST_DOUBLE)
{
***************
*** 4224,4230 ****
abort ();
}"
[(set_attr "type" "move")
! (set_attr "length" "8")])
(define_insn ""
[(set (match_operand:DI 0 "move_dest_operand"
--- 4235,4241 ----
abort ();
}"
[(set_attr "type" "move")
! (set_attr "length" "12")])
(define_insn ""
[(set (match_operand:DI 0 "move_dest_operand"
***************
*** 4384,4389 ****
--- 4395,4403 ----
handle it correctly. */
if (GET_CODE (operands[2]) == CONST_DOUBLE)
operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[2]));
+ else if (HOST_BITS_PER_WIDE_INT > 32
+ && GET_CODE (operands[2]) == CONST_INT)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 0xffffffff);
if (which_alternative == 1)
output_asm_insn (\"copy %1,%0\", operands);
return \"ldo R'%G2(%R1),%R0\";
diff -Nrcpad gcc-4.0.3/gcc/config/rs6000/rs6000.c gcc-4.0.4/gcc/config/rs6000/rs6000.c
*** gcc-4.0.3/gcc/config/rs6000/rs6000.c 2005-12-29 01:20:15.000000000 +0000
--- gcc-4.0.4/gcc/config/rs6000/rs6000.c 2006-03-19 22:26:37.000000000 +0000
*************** static void
*** 15207,15214 ****
rs6000_output_function_epilogue (FILE *file,
HOST_WIDE_INT size ATTRIBUTE_UNUSED)
{
- rs6000_stack_t *info = rs6000_stack_info ();
-
if (! HAVE_epilogue)
{
rtx insn = get_last_insn ();
--- 15207,15212 ----
*************** rs6000_output_function_epilogue (FILE *f
*** 15279,15291 ****
System V.4 Powerpc's (and the embedded ABI derived from it) use a
different traceback table. */
if (DEFAULT_ABI == ABI_AIX && ! flag_inhibit_size_directive
! && rs6000_traceback != traceback_none)
{
const char *fname = NULL;
const char *language_string = lang_hooks.name;
int fixed_parms = 0, float_parms = 0, parm_info = 0;
int i;
int optional_tbtab;
if (rs6000_traceback == traceback_full)
optional_tbtab = 1;
--- 15277,15290 ----
System V.4 Powerpc's (and the embedded ABI derived from it) use a
different traceback table. */
if (DEFAULT_ABI == ABI_AIX && ! flag_inhibit_size_directive
! && rs6000_traceback != traceback_none && !current_function_is_thunk)
{
const char *fname = NULL;
const char *language_string = lang_hooks.name;
int fixed_parms = 0, float_parms = 0, parm_info = 0;
int i;
int optional_tbtab;
+ rs6000_stack_t *info = rs6000_stack_info ();
if (rs6000_traceback == traceback_full)
optional_tbtab = 1;
diff -Nrcpad gcc-4.0.3/gcc/config/sh/sh.c gcc-4.0.4/gcc/config/sh/sh.c
*** gcc-4.0.3/gcc/config/sh/sh.c 2005-10-03 22:25:06.000000000 +0000
--- gcc-4.0.4/gcc/config/sh/sh.c 2006-03-16 22:27:37.000000000 +0000
*************** prepare_move_operands (rtx operands[], e
*** 1010,1020 ****
if (mode == Pmode || mode == ptr_mode)
{
! rtx op0, op1;
enum tls_model tls_kind;
op0 = operands[0];
op1 = operands[1];
if ((tls_kind = tls_symbolic_operand (op1, Pmode)))
{
rtx tga_op1, tga_ret, tmp, tmp2;
--- 1010,1030 ----
if (mode == Pmode || mode == ptr_mode)
{
! rtx op0, op1, opc;
enum tls_model tls_kind;
op0 = operands[0];
op1 = operands[1];
+ if (GET_CODE (op1) == CONST
+ && GET_CODE (XEXP (op1, 0)) == PLUS
+ && tls_symbolic_operand (XEXP (XEXP (op1, 0), 0), Pmode))
+ {
+ opc = XEXP (XEXP (op1, 0), 1);
+ op1 = XEXP (XEXP (op1, 0), 0);
+ }
+ else
+ opc = NULL_RTX;
+
if ((tls_kind = tls_symbolic_operand (op1, Pmode)))
{
rtx tga_op1, tga_ret, tmp, tmp2;
*************** prepare_move_operands (rtx operands[], e
*** 1080,1085 ****
--- 1090,1097 ----
default:
abort ();
}
+ if (opc)
+ emit_insn (gen_addsi3 (op1, op1, force_reg (SImode, opc)));
operands[1] = op1;
}
}
diff -Nrcpad gcc-4.0.3/gcc/config/sparc/sparc.c gcc-4.0.4/gcc/config/sparc/sparc.c
*** gcc-4.0.3/gcc/config/sparc/sparc.c 2006-02-09 12:26:05.000000000 +0000
--- gcc-4.0.4/gcc/config/sparc/sparc.c 2006-04-14 07:03:42.000000000 +0000
*************** sparc_rtx_costs (rtx x, int code, int ou
*** 8905,8920 ****
}
}
! /* Emit the sequence of insns SEQ while preserving the registers. */
static void
emit_and_preserve (rtx seq, rtx reg, rtx reg2)
{
! /* STACK_BOUNDARY guarantees that this is a 2-word slot. */
! rtx slot = gen_rtx_MEM (word_mode,
! plus_constant (stack_pointer_rtx, SPARC_STACK_BIAS));
! emit_insn (gen_stack_pointer_dec (GEN_INT (STACK_BOUNDARY/BITS_PER_UNIT)));
emit_insn (gen_rtx_SET (VOIDmode, slot, reg));
if (reg2)
emit_insn (gen_rtx_SET (VOIDmode,
--- 8905,8928 ----
}
}
! /* Emit the sequence of insns SEQ while preserving the registers REG and REG2.
! This is achieved by means of a manual dynamic stack space allocation in
! the current frame. We make the assumption that SEQ doesn't contain any
! function calls, with the possible exception of calls to the PIC helper. */
static void
emit_and_preserve (rtx seq, rtx reg, rtx reg2)
{
! /* We must preserve the lowest 16 words for the register save area. */
! HOST_WIDE_INT offset = 16*UNITS_PER_WORD;
! /* We really need only 2 words of fresh stack space. */
! HOST_WIDE_INT size = SPARC_STACK_ALIGN (offset + 2*UNITS_PER_WORD);
! rtx slot
! = gen_rtx_MEM (word_mode, plus_constant (stack_pointer_rtx,
! SPARC_STACK_BIAS + offset));
!
! emit_insn (gen_stack_pointer_dec (GEN_INT (size)));
emit_insn (gen_rtx_SET (VOIDmode, slot, reg));
if (reg2)
emit_insn (gen_rtx_SET (VOIDmode,
*************** emit_and_preserve (rtx seq, rtx reg, rtx
*** 8926,8932 ****
reg2,
adjust_address (slot, word_mode, UNITS_PER_WORD)));
emit_insn (gen_rtx_SET (VOIDmode, reg, slot));
! emit_insn (gen_stack_pointer_inc (GEN_INT (STACK_BOUNDARY/BITS_PER_UNIT)));
}
/* Output the assembler code for a thunk function. THUNK_DECL is the
--- 8934,8940 ----
reg2,
adjust_address (slot, word_mode, UNITS_PER_WORD)));
emit_insn (gen_rtx_SET (VOIDmode, reg, slot));
! emit_insn (gen_stack_pointer_inc (GEN_INT (size)));
}
/* Output the assembler code for a thunk function. THUNK_DECL is the
diff -Nrcpad gcc-4.0.3/gcc/config.gcc gcc-4.0.4/gcc/config.gcc
*** gcc-4.0.3/gcc/config.gcc 2005-08-09 10:57:09.000000000 +0000
--- gcc-4.0.4/gcc/config.gcc 2006-10-15 23:59:21.000000000 +0000
*************** hppa*64*-*-hpux11*)
*** 909,915 ****
tmake_file="pa/t-pa64 pa/t-pa-hpux"
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
case x${enable_threads} in
! xyes | xposix )
thread_file=posix
;;
esac
--- 909,915 ----
tmake_file="pa/t-pa64 pa/t-pa-hpux"
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
case x${enable_threads} in
! x | xyes | xposix )
thread_file=posix
;;
esac
*************** hppa[12]*-*-hpux11*)
*** 929,935 ****
esac
tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
case x${enable_threads} in
! xyes | xposix )
thread_file=posix
;;
esac
--- 929,935 ----
esac
tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
case x${enable_threads} in
! x | xyes | xposix )
thread_file=posix
;;
esac
diff -Nrcpad gcc-4.0.3/gcc/convert.c gcc-4.0.4/gcc/convert.c
*** gcc-4.0.3/gcc/convert.c 2005-08-23 18:01:27.000000000 +0000
--- gcc-4.0.4/gcc/convert.c 2006-07-30 13:21:59.000000000 +0000
***************
*** 1,6 ****
/* Utility routines for data type conversion for GCC.
Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1997, 1998,
! 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GCC.
--- 1,6 ----
/* Utility routines for data type conversion for GCC.
Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1997, 1998,
! 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC.
*************** convert_to_integer (tree type, tree expr
*** 350,359 ****
switch (fcode)
{
case BUILT_IN_ROUND: case BUILT_IN_ROUNDF: case BUILT_IN_ROUNDL:
! if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (long_long_integer_type_node))
! fn = mathfn_built_in (s_intype, BUILT_IN_LLROUND);
! else
fn = mathfn_built_in (s_intype, BUILT_IN_LROUND);
break;
case BUILT_IN_RINT: case BUILT_IN_RINTF: case BUILT_IN_RINTL:
--- 350,362 ----
switch (fcode)
{
case BUILT_IN_ROUND: case BUILT_IN_ROUNDF: case BUILT_IN_ROUNDL:
! if (outprec < TYPE_PRECISION (long_integer_type_node)
! || (outprec == TYPE_PRECISION (long_integer_type_node)
! && !TYPE_UNSIGNED (type)))
fn = mathfn_built_in (s_intype, BUILT_IN_LROUND);
+ else if (outprec == TYPE_PRECISION (long_long_integer_type_node)
+ && !TYPE_UNSIGNED (type))
+ fn = mathfn_built_in (s_intype, BUILT_IN_LLROUND);
break;
case BUILT_IN_RINT: case BUILT_IN_RINTF: case BUILT_IN_RINTL:
*************** convert_to_integer (tree type, tree expr
*** 361,371 ****
if (flag_trapping_math)
break;
/* ... Fall through ... */
! case BUILT_IN_NEARBYINT: case BUILT_IN_NEARBYINTF: case BUILT_IN_NEARBYINTL:
! if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (long_long_integer_type_node))
! fn = mathfn_built_in (s_intype, BUILT_IN_LLRINT);
! else
! fn = mathfn_built_in (s_intype, BUILT_IN_LRINT);
break;
default:
break;
--- 364,379 ----
if (flag_trapping_math)
break;
/* ... Fall through ... */
! case BUILT_IN_NEARBYINT:
! case BUILT_IN_NEARBYINTF:
! case BUILT_IN_NEARBYINTL:
! if (outprec < TYPE_PRECISION (long_integer_type_node)
! || (outprec == TYPE_PRECISION (long_integer_type_node)
! && !TYPE_UNSIGNED (type)))
! fn = mathfn_built_in (s_intype, BUILT_IN_LRINT);
! else if (outprec == TYPE_PRECISION (long_long_integer_type_node)
! && !TYPE_UNSIGNED (type))
! fn = mathfn_built_in (s_intype, BUILT_IN_LLRINT);
break;
default:
break;
diff -Nrcpad gcc-4.0.3/gcc/cp/call.c gcc-4.0.4/gcc/cp/call.c
*** gcc-4.0.3/gcc/cp/call.c 2006-01-24 21:44:57.000000000 +0000
--- gcc-4.0.4/gcc/cp/call.c 2006-10-10 04:38:25.000000000 +0000
*************** build_x_va_arg (tree expr, tree type)
*** 4488,4497 ****
if (! pod_type_p (type))
{
/* Undefined behavior [expr.call] 5.2.2/7. */
warning ("cannot receive objects of non-POD type %q#T through %<...%>; "
"call will abort at runtime", type);
! expr = convert (build_pointer_type (type), null_node);
expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr),
call_builtin_trap (), expr);
expr = build_indirect_ref (expr, NULL);
--- 4488,4499 ----
if (! pod_type_p (type))
{
+ /* Remove reference types so we don't ICE later on. */
+ tree type1 = non_reference (type);
/* Undefined behavior [expr.call] 5.2.2/7. */
warning ("cannot receive objects of non-POD type %q#T through %<...%>; "
"call will abort at runtime", type);
! expr = convert (build_pointer_type (type1), null_node);
expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr),
call_builtin_trap (), expr);
expr = build_indirect_ref (expr, NULL);
*************** build_over_call (struct z_candidate *can
*** 4780,4785 ****
--- 4782,4793 ----
tree type = TREE_VALUE (parm);
conv = convs[i];
+
+ /* Don't make a copy here if build_call is going to. */
+ if (conv->kind == ck_rvalue
+ && !TREE_ADDRESSABLE (complete_type (type)))
+ conv = conv->u.next;
+
val = convert_like_with_context
(conv, TREE_VALUE (arg), fn, i - is_method);
*************** build_new_method_call (tree instance, tr
*** 5434,5442 ****
none-the-less evaluated. */
if (TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE
&& !is_dummy_object (instance_ptr)
! && TREE_SIDE_EFFECTS (instance))
call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
! instance, call);
}
}
}
--- 5442,5450 ----
none-the-less evaluated. */
if (TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE
&& !is_dummy_object (instance_ptr)
! && TREE_SIDE_EFFECTS (instance_ptr))
call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
! instance_ptr, call);
}
}
}
diff -Nrcpad gcc-4.0.3/gcc/cp/ChangeLog gcc-4.0.4/gcc/cp/ChangeLog
*** gcc-4.0.3/gcc/cp/ChangeLog 2006-03-09 20:44:29.000000000 +0000
--- gcc-4.0.4/gcc/cp/ChangeLog 2007-01-31 10:21:25.000000000 +0000
***************
*** 1,3 ****
--- 1,423 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
+ 2007-01-27 Volker Reichelt
+
+ Backport:
+ 2006-11-13 Mark Mitchell
+
+ PR c++/29106
+ * g++.dg/init/self1.C: New test.
+ * g++.dg/other/fold1.C: Adjust error markers.
+ * g++.dg/init/member1.C: Likewise.
+
+ 2006-08-27 Simon Martin
+
+ PR c++/28284
+ * g++.dg/template/pr28284.C: New test.
+
+ 2006-11-18 Lee Millward
+
+ PR c++/29022
+ PR c++/27316
+ PR c++/28740
+ * parser.c (cp_parser_class_head): Move processing
+ of any base classes to...
+ (cp_parser_class_specifier) ...here. Take an extra
+ tree* parameter for the base classes. Only process
+ them if the opening brace was found.
+
+ 2006-12-01 Volker Reichelt
+
+ PR c++/30022
+ * typeck.c (type_after_usual_arithmetic_conversions):
+ Fix assertion for vector types.
+ (build_binary_op): Use temporary for inner type of vector types.
+
+ 2006-10-11 Andrew Pinski
+
+ PR c++/28302
+ * typeck.c (build_unary_op ): Don't call
+ perform_integral_promotions for non integral type
+
+ 2006-10-11 Andrew Pinski
+
+ PR C++/29002
+ * init.c (build_zero_init): If we have an error mark node for
+ the array size, return.
+
+ 2006-10-10 Andrew Pinski
+
+ PR C++/28450
+ * cp/init.c (build_zero_init): Handle VECTOR_TYPE and
+ COMPLEX_TYPEs.
+
+ 2006-10-09 Andrew Pinski
+
+ PR C++/28349
+ * call.c (build_x_va_arg): Remove the reference type
+ from the type before creating the pointer type.
+
+ 2006-09-09 Jason Merrill
+
+ PR c++/28996
+ * cvt.c (convert_to_void): Strip COMPONENT_REF to functions.
+
+ 2006-09-09 Jason Merrill
+
+ PR c++/26957
+ * method.c (use_thunk): Fix patch for 4.0 branch.
+
+ 2006-09-07 Jason Merrill
+
+ PR c++/26957
+ * method.c (use_thunk): Clear DECL_HAS_VALUE_EXPR_P on copied
+ parms.
+
+ 2006-09-06 Zak Kipling
+
+ PR c++/26195
+ * decl.c (make_rtl_for_nonlocal_decl),
+ (start_preparsed_function): Don't use lbasename on
+ input_filename when calling get_fileinfo.
+ * semantics.c (begin_class_definition): Likewise.
+ * lex.c (cxx_make_type): Likewise.
+ (handle_pragma_interface): Call get_fileinfo on input_filename,
+ not on the parameter to the directive.
+
+ 2006-09-06 Jason Merrill
+
+ PR c++/26696
+ * cvt.c (convert_to_void): Replace a subexpression with no side
+ effects with void_zero_node.
+ * tree.c (is_overloaded_fn): Look through COMPONENT_REF.
+ (get_first_fn): Ditto.
+ * decl.c (grokdeclarator): No need to look through COMPONENT_REF.
+
+ 2006-09-05 Jason Merrill
+
+ PR c++/26571
+ * parser.c (cp_parser_diagnose_invalid_type_name): Handle the case
+ where the name is a type used incorrectly.
+
+ PR c++/26671
+ * typeck.c (maybe_warn_about_returning_address_of_local): Look
+ through COMPONENT_REF and ARRAY_REF.
+
+ PR c++/19809
+ * pt.c (tsubst_friend_function): Set DECL_INITIAL before pushdecl.
+
+ 2006-08-28 Jason Merrill
+
+ PR c++/26577
+ * cvt.c (convert_to_void): Don't automatically load from volatiles
+ of TREE_ADDRESSABLE type.
+
+ 2006-08-28 Volker Reichelt
+
+ PR c++/28860
+ * cp-tree.h (maybe_process_partial_specialization): Return
+ tree instead of void.
+ * parser.c (cp_parser_class_head): Use return value of
+ maybe_process_partial_specialization.
+ * pt.c (maybe_process_partial_specialization): Return error_mark_node
+ for broken specializations, TYPE otherwise. Check for template
+ template parameters.
+
+ 2006-08-25 Volker Reichelt
+
+ PR c++/28853
+ * typeck2.c (cxx_incomplete_type_diagnostic): Handle template
+ template parameters. Improve error message for template type
+ parameters.
+
+ 2006-08-23 Jason Merrill
+
+ PR c++/27714
+ * pt.c (push_template_decl_real): A friend template with class
+ scope isn't primary.
+
+ 2006-08-22 Jason Merrill
+
+ PR c++/23372
+ * call.c (build_over_call): Don't make a copy here if build_call
+ will make one too.
+
+ 2006-08-17 Jason Merrill
+
+ PR c++/28385
+ * pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Ignore quals from template
+ if arg is a function.
+
+ 2006-08-17 Volker Reichelt
+
+ PR c++/28606
+ * parser.c (cp_parser_diagnose_invalid_type_name): Handle BIT_NOT_EXPR.
+ Fix formatting.
+ (cp_parser_parse_and_diagnose_invalid_type_name): Tighten condition
+ for valid type-names.
+ (cp_parser_unqualified_id): Fix error handling for destructors.
+
+ PR c++/28710
+ * decl.c (xref_tag): Improve error message. Return early on error.
+
+ 2006-08-16 Volker Reichelt
+
+ PR c++/28593
+ * init.c (build_new): Return early on invalid placement.
+
+ 2006-08-03 Steve Ellcey
+
+ PR c++/28432
+ * decl2.c (check_classfn): Remove early return.
+ * search.c (lookup_member): Return NULL with bad type.
+
+ 2006-08-03 Volker Reichelt
+
+ PR c++/27508
+ * parser.c (cp_parser_unqualified_id): Check for invalid scopes
+ when parsing destructor names.
+
+ PR c++/28274
+ * decl.c (duplicate_decls): Call check_default_args here.
+ (start_preparsed_function): Do not call check_default_args.
+ * name-lookup.c (pushdecl_maybe_friend): Only call
+ check_default_args if duplicate_decls got bypassed.
+
+ 2006-07-24 Volker Reichelt
+
+ PR c++/27572
+ * decl.c (grokdeclarator): Return error_mark_node after invalid
+ typedef.
+
+ 2006-07-22 Lee Millward
+
+ PR c++/28258
+ * method.c (locate_copy): Check for non_reference
+ returning error_mark_node.
+
+ 2006-07-21 Volker Reichelt
+
+ PR c++/28363
+ * semantics.c (check_template_template_default_arg): Simplify
+ error handling.
+
+ 2006-07-20 Steve Ellcey
+
+ PR c++/27495
+ * search.c (adjust_result_of_qualified_name_lookup): Change
+ assert to part of if statement.
+
+ 2006-07-18 Steve Ellcey
+
+ PR c++/28304
+ * decl2.c (check_classfn): Return NULL_TREE on error.
+
+ 2006-07-17 Lee Millward
+
+ PR c++/28051
+ * search.c (lookup_member): Robustify.
+
+ 2006-07-15 Volker Reichelt
+
+ PR c++/28249
+ * parser.c (cp_parser_check_decl_spec): New function.
+ (cp_parser_decl_specifier_seq): Factor out check for repeated
+ decl-specifiers into cp_parser_check_decl_spec. Use it.
+ (cp_parser_type_specifier_seq): Use it.
+
+ PR c++/28294
+ * semantics.c (finish_offsetof): Use TREE_OPERAND for COMPONENT_REFs
+ only.
+
+ 2006-07-14 Volker Reichelt
+
+ PR c++/28343
+ * decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node.
+ * decl2.c (grokfield): Likewise.
+
+ 2006-07-12 Steve Ellcey
+
+ PR c++/28114
+ * name-lookup.c (pushtag): Return if we have error_mark_node.
+
+ 2006-07-11 Lee Millward
+
+ PR c++/28051
+ * mangle.c (mangle_conv_op_name_for_type): Check for
+ invalid types.
+ * name-lookup.c (push_class_level_binding): Robustify.
+ (do_class_using_decl): Return early if name is
+ error_mark_node.
+
+ 2006-07-10 Jason Merrill
+
+ * class.c (check_field_decls): Fix warning call.
+
+ 2006-07-08 Lee Millward
+ Andrew Pinski
+
+ PR c++/27820
+ * decl.c (define_label): Return error_mark_node on error.
+ * semantics.c (finish_label_stmt): Don't call
+ add_stmt for invalid labels.
+
+ 2006-07-05 Jason Merrill
+
+ PR c++/13983
+ PR c++/17519
+ * class.c (check_field_decls): Check TYPE_PACKED after
+ stripping array types.
+
+ 2006-07-05 Nathan Sidwell
+
+ PR c++/21166
+ * class.c (check_field_decls): Only set DECL_PACKED on a field
+ when its natural alignment is > BITS_PER_UNIT.
+
+ 2006-07-05 Jason Merrill
+
+ PR c++/18681
+ * friend.c (is_friend): Fix DR 45 implementation.
+
+ 2006-06-30 Jason Merrill
+
+ PR c++/26577
+ * call.c (build_new_method_call): Force evaluation of the
+ instance pointer, not the object.
+
+ PR c++/18698
+ * decl2.c (grokfield): Only try to treat the decl as an access
+ declaration if the scope is a class.
+
+ 2006-06-28 Jason Merrill
+
+ PR c++/27424
+ * pt.c (convert_template_argument): Pass all template arguments
+ on to coerce_template_template_parms.
+
+ 2006-06-25 Lee Millward
+
+ PR c++/27821
+ * decl.c (grokdeclarator): Return error_mark_node on
+ invalid uses of the scope resolution operator.
+
+ 2006-06-23 Volker Reichelt
+
+ PR c++/28112
+ * parser.c (cp_parser_attribute_list): Skip attributes with invalid
+ arguments. Fix comment.
+
+ 2006-06-22 Volker Reichelt
+
+ PR c++/28109
+ * rtti.c (get_tinfo_decl_dynamic): Robustify.
+
+ 2006-06-14 Gabriel Dos Reis
+
+ * cp-tree.def: Fix typo.
+
+ 2006-06-13 Roger Sayle
+
+ PR c++/21210
+ * typeck2.c (build_functional_cast): Use cp_convert to construct
+ non-aggregate initializers instead of the user-level build_c_cast.
+
+ 2006-06-12 Volker Reichelt
+
+ PR c++/27601
+ * semantics.c (finish_offsetof): Handle pseudo-destructors.
+
+ PR c++/27933
+ * name-lookup.c (lookup_qualified_name): Always return error_mark_node
+ if lookup fails.
+
+ PR c++/27951
+ * decl2.c (finish_anon_union): Return early if build_anon_union_vars
+ fails.
+
+ 2006-06-07 Volker Reichelt
+
+ PR c++/27601
+ * cp-tree.h (finish_offsetof): Add prototype.
+ * semantics.c (finish_offsetof): New function.
+ * parser.c (cp_parser_builtin_offsetof): Call it instead of
+ fold_offsetof.
+ * pt.c (tsubst_copy_and_build): Likewise.
+
+ 2006-05-29 Volker Reichelt
+
+ PR c++/27713
+ * pt.c (push_template_decl_real): Return error_mark_node instead
+ of broken decl.
+
+ 2006-05-22 Volker Reichelt
+
+ PR c++/27716
+ * typeck.c (build_modify_expr): Test arguments for error_operand_p.
+
+ 2006-05-15 Volker Reichelt
+
+ PR c++/27582
+ * pt.c (any_dependent_template_arguments_p): Return early on invalid
+ argument list.
+
+ PR c++/27581
+ * search.c (adjust_result_of_qualified_name_lookup): Skip on
+ invalid context_class.
+
+ PR c++/27315
+ * pt.c (do_decl_instantiation): Return early on invalid decl.
+
+ 2006-05-11 Volker Reichelt
+
+ PR c++/27547
+ * decl.c (copy_fn_p): Return early on non-member functions.
+
+ 2006-05-08 Volker Reichelt
+
+ * decl.c (grok_op_properties): Add missing return value.
+
+ 2006-05-06 Volker Reichelt
+
+ PR c++/27427
+ * pt.c (convert_nontype_argument): Return early on invalid arguments.
+
+ PR c++/27422
+ * typeck.c (convert_arguments): Return early on args with
+ invalid types.
+
+ 2006-04-30 Volker Reichelt
+
+ PR c++/27278
+ * decl.c (grok_op_properties): Skip operators with invalid args
+ when checking for class-type or enum-type args.
+
+ 2006-04-29 Volker Reichelt
+
+ PR c++/27279
+ * decl.c (copy_fn_p): Skip functions with invalid first arg.
+
+ 2006-04-19 Volker Reichelt
+
+ PR c++/26558
+ * parser.c (cp_parser_class_name): Check for invalid typenames.
+ Rearrange code.
+
+ PR c++/26036
+ * typeck.c (convert_arguments): Return error_mark_node instead of
+ error_mark_list.
+ * cp-tree.h (error_mark_list): Remove declaration.
+ * decl.c (error_mark_list): Remove definition.
+ (cxx_init_decl_processing): Do not initialize error_mark_list.
+
+ PR c++/10385
+ * rtti.c (build_dynamic_cast_1): Check for invalid conversions
+ before calling convert_to_reference.
+ * cvt.c (convert_to_reference): Assert that reftype is a
+ REFERENCE_TYPE.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
***************
*** 2154,2160 ****
* pt.c (instantiate_class_template,
resolve_typename_type): Likewise.
! 2005-01-03 Volker Reichelt
PR c++/14136
* parser.c (cp_parser_unqualified_id): Do not issue error message
--- 2574,2580 ----
* pt.c (instantiate_class_template,
resolve_typename_type): Likewise.
! 2005-01-03 Volker Reichelt
PR c++/14136
* parser.c (cp_parser_unqualified_id): Do not issue error message
diff -Nrcpad gcc-4.0.3/gcc/cp/class.c gcc-4.0.4/gcc/cp/class.c
*** gcc-4.0.3/gcc/cp/class.c 2006-02-18 09:41:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/class.c 2006-07-10 17:01:54.000000000 +0000
*************** check_field_decls (tree t, tree *access_
*** 2850,2888 ****
next = &TREE_CHAIN (x);
- if (TREE_CODE (x) == FIELD_DECL)
- {
- if (TYPE_PACKED (t))
- {
- if (!pod_type_p (TREE_TYPE (x)) && !TYPE_PACKED (TREE_TYPE (x)))
- cp_warning_at
- ("ignoring packed attribute on unpacked non-POD field %q#D",
- x);
- else
- DECL_PACKED (x) = 1;
- }
-
- if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
- /* We don't treat zero-width bitfields as making a class
- non-empty. */
- ;
- else
- {
- tree element_type;
-
- /* The class is non-empty. */
- CLASSTYPE_EMPTY_P (t) = 0;
- /* The class is not even nearly empty. */
- CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
- /* If one of the data members contains an empty class,
- so does T. */
- element_type = strip_array_types (type);
- if (CLASS_TYPE_P (element_type)
- && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
- CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
- }
- }
-
if (TREE_CODE (x) == USING_DECL)
{
/* Prune the access declaration from the list of fields. */
--- 2850,2855 ----
*************** check_field_decls (tree t, tree *access_
*** 2979,2984 ****
--- 2946,2978 ----
type = strip_array_types (type);
+ if (TYPE_PACKED (t))
+ {
+ if (!pod_type_p (type) && !TYPE_PACKED (type))
+ cp_warning_at
+ ("ignoring packed attribute on unpacked non-POD field %q#D",
+ x);
+ else if (TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
+ DECL_PACKED (x) = 1;
+ }
+
+ if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
+ /* We don't treat zero-width bitfields as making a class
+ non-empty. */
+ ;
+ else
+ {
+ /* The class is non-empty. */
+ CLASSTYPE_EMPTY_P (t) = 0;
+ /* The class is not even nearly empty. */
+ CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
+ /* If one of the data members contains an empty class,
+ so does T. */
+ if (CLASS_TYPE_P (type)
+ && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
+ CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
+ }
+
/* This is used by -Weffc++ (see below). Warn only for pointers
to members which might hold dynamic memory. So do not warn
for pointers to functions or pointers to members. */
diff -Nrcpad gcc-4.0.3/gcc/cp/cp-tree.def gcc-4.0.4/gcc/cp/cp-tree.def
*** gcc-4.0.3/gcc/cp/cp-tree.def 2005-09-09 21:05:53.000000000 +0000
--- gcc-4.0.4/gcc/cp/cp-tree.def 2006-06-14 19:10:17.000000000 +0000
*************** DEFTREECODE (TEMPLATE_TEMPLATE_PARM, "te
*** 168,174 ****
BOUND_TEMPLATE_TEMPLATE_PARM. */
/* Index into a template parameter list. This parameter must be a type.
! The type.value field will be a TEMPLATE_PARM_INDEX. */
DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 0)
/* A type designated by `typename T::t'. TYPE_CONTEXT is `T',
--- 168,174 ----
BOUND_TEMPLATE_TEMPLATE_PARM. */
/* Index into a template parameter list. This parameter must be a type.
! The type.values field will be a TEMPLATE_PARM_INDEX. */
DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 0)
/* A type designated by `typename T::t'. TYPE_CONTEXT is `T',
diff -Nrcpad gcc-4.0.3/gcc/cp/cp-tree.h gcc-4.0.4/gcc/cp/cp-tree.h
*** gcc-4.0.3/gcc/cp/cp-tree.h 2006-02-18 09:41:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/cp-tree.h 2006-08-28 23:12:32.000000000 +0000
*************** typedef enum base_kind {
*** 3116,3125 ****
binfo. */
} base_kind;
- /* in decl{2}.c */
- /* A node that is a list (length 1) of error_mark_nodes. */
- extern GTY(()) tree error_mark_list;
-
/* Node for "pointer to (virtual) function".
This may be distinct from ptr_type_node so gdb can distinguish them. */
#define vfunc_ptr_type_node vtable_entry_type
--- 3116,3121 ----
*************** extern int template_class_depth
*** 4045,4051 ****
extern int is_specialization_of (tree, tree);
extern bool is_specialization_of_friend (tree, tree);
extern int comp_template_args (tree, tree);
! extern void maybe_process_partial_specialization (tree);
extern tree most_specialized_instantiation (tree);
extern void print_candidates (tree);
extern void instantiate_pending_templates (int);
--- 4041,4047 ----
extern int is_specialization_of (tree, tree);
extern bool is_specialization_of_friend (tree, tree);
extern int comp_template_args (tree, tree);
! extern tree maybe_process_partial_specialization (tree);
extern tree most_specialized_instantiation (tree);
extern void print_candidates (tree);
extern void instantiate_pending_templates (int);
*************** extern tree finish_id_expression
*** 4219,4224 ****
--- 4215,4221 ----
bool, bool, bool *,
const char **);
extern tree finish_typeof (tree);
+ extern tree finish_offsetof (tree);
extern void finish_decl_cleanup (tree, tree);
extern void finish_eh_cleanup (tree);
extern void expand_body (tree);
diff -Nrcpad gcc-4.0.3/gcc/cp/cvt.c gcc-4.0.4/gcc/cp/cvt.c
*** gcc-4.0.3/gcc/cp/cvt.c 2006-02-18 09:41:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/cvt.c 2006-09-22 23:28:13.000000000 +0000
*************** convert_to_reference (tree reftype, tree
*** 458,463 ****
--- 458,464 ----
intype = TREE_TYPE (expr);
gcc_assert (TREE_CODE (intype) != REFERENCE_TYPE);
+ gcc_assert (TREE_CODE (reftype) == REFERENCE_TYPE);
intype = TYPE_MAIN_VARIANT (intype);
*************** convert_to_void (tree expr, const char *
*** 847,869 ****
case INDIRECT_REF:
{
! tree type = TREE_TYPE (expr);
! int is_reference = TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
! == REFERENCE_TYPE;
! int is_volatile = TYPE_VOLATILE (type);
! int is_complete = COMPLETE_TYPE_P (complete_type (type));
!
! if (is_volatile && !is_complete)
! warning ("object of incomplete type %qT will not be accessed in %s",
! type, implicit ? implicit : "void context");
! else if (is_reference && is_volatile)
! warning ("object of type %qT will not be accessed in %s",
! TREE_TYPE (TREE_OPERAND (expr, 0)),
! implicit ? implicit : "void context");
! if (is_reference || !is_volatile || !is_complete)
! expr = TREE_OPERAND (expr, 0);
!
! break;
}
case VAR_DECL:
--- 848,873 ----
case INDIRECT_REF:
{
! tree type = TREE_TYPE (expr);
! int is_reference = TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
! == REFERENCE_TYPE;
! int is_volatile = TYPE_VOLATILE (type);
! int is_complete = COMPLETE_TYPE_P (complete_type (type));
!
! /* Can't load the value if we don't know the type. */
! if (is_volatile && !is_complete)
! warning ("object of incomplete type %qT will not be accessed in %s",
! type, implicit ? implicit : "void context");
! /* Don't load the value if this is an implicit dereference, or if
! the type needs to be handled by ctors/dtors. */
! else if (is_volatile && (is_reference || TREE_ADDRESSABLE (type)))
! warning ("object of type %qT will not be accessed in %s",
! TREE_TYPE (TREE_OPERAND (expr, 0)),
! implicit ? implicit : "void context");
! if (is_reference || !is_volatile || !is_complete || TREE_ADDRESSABLE (type))
! expr = TREE_OPERAND (expr, 0);
!
! break;
}
case VAR_DECL:
*************** convert_to_void (tree expr, const char *
*** 894,902 ****
expr = void_zero_node;
}
else if (implicit && probe == expr && is_overloaded_fn (probe))
! /* Only warn when there is no &. */
! warning ("%s is a reference, not call, to function %qE",
! implicit, expr);
}
if (expr != error_mark_node && !VOID_TYPE_P (TREE_TYPE (expr)))
--- 898,910 ----
expr = void_zero_node;
}
else if (implicit && probe == expr && is_overloaded_fn (probe))
! {
! /* Only warn when there is no &. */
! warning ("%s is a reference, not call, to function %qE",
! implicit, expr);
! if (TREE_CODE (expr) == COMPONENT_REF)
! expr = TREE_OPERAND (expr, 0);
! }
}
if (expr != error_mark_node && !VOID_TYPE_P (TREE_TYPE (expr)))
*************** convert_to_void (tree expr, const char *
*** 943,948 ****
--- 951,958 ----
}
expr = build1 (CONVERT_EXPR, void_type_node, expr);
}
+ if (! TREE_SIDE_EFFECTS (expr))
+ expr = void_zero_node;
return expr;
}
diff -Nrcpad gcc-4.0.3/gcc/cp/decl2.c gcc-4.0.4/gcc/cp/decl2.c
*** gcc-4.0.3/gcc/cp/decl2.c 2006-02-18 09:41:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/decl2.c 2006-08-03 17:16:20.000000000 +0000
*************** check_classfn (tree ctype, tree function
*** 707,714 ****
else if (!COMPLETE_TYPE_P (ctype))
cxx_incomplete_type_error (function, ctype);
else
! error ("no %q#D member function declared in class %qT",
! function, ctype);
/* If we did not find the method in the class, add it to avoid
spurious errors (unless the CTYPE is not yet defined, in which
--- 707,716 ----
else if (!COMPLETE_TYPE_P (ctype))
cxx_incomplete_type_error (function, ctype);
else
! {
! error ("no %q#D member function declared in class %qT",
! function, ctype);
! }
/* If we did not find the method in the class, add it to avoid
spurious errors (unless the CTYPE is not yet defined, in which
*************** grokfield (const cp_declarator *declarat
*** 830,835 ****
--- 832,839 ----
if (!declspecs->any_specifiers_p
&& declarator->kind == cdk_id
&& declarator->u.id.qualifying_scope
+ && TYPE_P (declarator->u.id.qualifying_scope)
+ && IS_AGGR_TYPE (declarator->u.id.qualifying_scope)
&& TREE_CODE (declarator->u.id.unqualified_name) == IDENTIFIER_NODE)
/* Access declaration */
return do_class_using_decl (declarator->u.id.qualifying_scope,
*************** grokfield (const cp_declarator *declarat
*** 898,904 ****
return void_type_node;
}
! if (asmspec_tree)
asmspec = TREE_STRING_POINTER (asmspec_tree);
if (init)
--- 902,908 ----
return void_type_node;
}
! if (asmspec_tree && asmspec_tree != error_mark_node)
asmspec = TREE_STRING_POINTER (asmspec_tree);
if (init)
*************** finish_anon_union (tree anon_union_decl)
*** 1183,1188 ****
--- 1187,1194 ----
}
main_decl = build_anon_union_vars (type, anon_union_decl);
+ if (main_decl == error_mark_node)
+ return;
if (main_decl == NULL_TREE)
{
warning ("anonymous union with no members");
diff -Nrcpad gcc-4.0.3/gcc/cp/decl.c gcc-4.0.4/gcc/cp/decl.c
*** gcc-4.0.3/gcc/cp/decl.c 2006-02-28 11:36:26.000000000 +0000
--- gcc-4.0.4/gcc/cp/decl.c 2006-09-07 22:38:03.000000000 +0000
*************** static void expand_static_init (tree, tr
*** 116,124 ****
static tree next_initializable_field (tree);
static tree reshape_init (tree, tree *);
- /* Erroneous argument lists can use this *IFF* they do not modify it. */
- tree error_mark_list;
-
/* The following symbols are subsumed in the cp_global_trees array, and
listed here individually for documentation purposes.
--- 116,121 ----
*************** duplicate_decls (tree newdecl, tree oldd
*** 1576,1581 ****
--- 1573,1581 ----
}
TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
+ if (TREE_CODE (newdecl) == FUNCTION_DECL)
+ check_default_args (newdecl);
+
/* Lay the type out, unless already done. */
if (! same_type_p (newtype, oldtype)
&& TREE_TYPE (newdecl) != error_mark_node
*************** define_label (location_t location, tree
*** 2331,2337 ****
pedwarn ("label named wchar_t");
if (DECL_INITIAL (decl) != NULL_TREE)
! error ("duplicate label %qD", decl);
else
{
/* Mark label as having been defined. */
--- 2331,2340 ----
pedwarn ("label named wchar_t");
if (DECL_INITIAL (decl) != NULL_TREE)
! {
! error ("duplicate label %qD", decl);
! POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
! }
else
{
/* Mark label as having been defined. */
*************** cxx_init_decl_processing (void)
*** 2925,2933 ****
/* Initially, C. */
current_lang_name = lang_name_c;
- error_mark_list = build_tree_list (error_mark_node, error_mark_node);
- TREE_TYPE (error_mark_list) = error_mark_node;
-
/* Create the `std' namespace. */
push_namespace (std_identifier);
std_node = current_namespace;
--- 2928,2933 ----
*************** make_rtl_for_nonlocal_decl (tree decl, t
*** 4621,4627 ****
{
/* Fool with the linkage of static consts according to #pragma
interface. */
! struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
{
TREE_PUBLIC (decl) = 1;
--- 4621,4627 ----
{
/* Fool with the linkage of static consts according to #pragma
interface. */
! struct c_fileinfo *finfo = get_fileinfo (input_filename);
if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
{
TREE_PUBLIC (decl) = 1;
*************** cp_finish_decl (tree decl, tree init, bo
*** 4755,4761 ****
/* If a name was specified, get the string. */
if (global_scope_p (current_binding_level))
asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
! if (asmspec_tree)
asmspec = TREE_STRING_POINTER (asmspec_tree);
if (init && TREE_CODE (init) == NAMESPACE_DECL)
--- 4755,4761 ----
/* If a name was specified, get the string. */
if (global_scope_p (current_binding_level))
asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
! if (asmspec_tree && asmspec_tree != error_mark_node)
asmspec = TREE_STRING_POINTER (asmspec_tree);
if (init && TREE_CODE (init) == NAMESPACE_DECL)
*************** grokdeclarator (const cp_declarator *dec
*** 6584,6591 ****
tree fns = TREE_OPERAND (decl, 0);
dname = fns;
- if (TREE_CODE (dname) == COMPONENT_REF)
- dname = TREE_OPERAND (dname, 1);
if (TREE_CODE (dname) != IDENTIFIER_NODE)
{
gcc_assert (is_overloaded_fn (dname));
--- 6584,6589 ----
*************** grokdeclarator (const cp_declarator *dec
*** 6936,6942 ****
if (decl_context == PARM)
{
if (declspecs->specs[(int)ds_typedef])
! error ("typedef declaration invalid in parameter declaration");
else if (storage_class == sc_static
|| storage_class == sc_extern
|| thread_p)
--- 6934,6943 ----
if (decl_context == PARM)
{
if (declspecs->specs[(int)ds_typedef])
! {
! error ("typedef declaration invalid in parameter declaration");
! return error_mark_node;
! }
else if (storage_class == sc_static
|| storage_class == sc_extern
|| thread_p)
*************** grokdeclarator (const cp_declarator *dec
*** 7798,7804 ****
{
/* Something like struct S { int N::j; }; */
error ("invalid use of %<::%>");
! decl = NULL_TREE;
}
else if (TREE_CODE (type) == FUNCTION_TYPE)
{
--- 7799,7805 ----
{
/* Something like struct S { int N::j; }; */
error ("invalid use of %<::%>");
! return error_mark_node;
}
else if (TREE_CODE (type) == FUNCTION_TYPE)
{
*************** copy_fn_p (tree d)
*** 8482,8488 ****
tree arg_type;
int result = 1;
! gcc_assert (DECL_FUNCTION_MEMBER_P (d));
if (DECL_TEMPLATE_INFO (d)
&& DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
--- 8483,8491 ----
tree arg_type;
int result = 1;
! if (!DECL_FUNCTION_MEMBER_P (d))
! /* Non-members are invalid. We complained, but kept the declaration. */
! return 0;
if (DECL_TEMPLATE_INFO (d)
&& DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
*************** copy_fn_p (tree d)
*** 8497,8502 ****
--- 8500,8507 ----
return 0;
arg_type = TREE_VALUE (args);
+ if (arg_type == error_mark_node)
+ return 0;
if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
{
*************** grok_op_properties (tree decl, bool comp
*** 8751,8756 ****
--- 8756,8764 ----
for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
{
tree arg = non_reference (TREE_VALUE (p));
+ if (arg == error_mark_node)
+ return false;
+
/* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
because these checks are performed even on
template functions. */
*************** xref_tag (enum tag_types tag_code, tree
*** 9271,9277 ****
&& CLASSTYPE_IS_TEMPLATE (t))
{
error ("redeclaration of %qT as a non-template", t);
! t = error_mark_node;
}
/* Make injected friend class visible. */
--- 9279,9286 ----
&& CLASSTYPE_IS_TEMPLATE (t))
{
error ("redeclaration of %qT as a non-template", t);
! cp_error_at ("previous declaration %q+D", t);
! POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
}
/* Make injected friend class visible. */
*************** start_preparsed_function (tree decl1, tr
*** 9904,9910 ****
struct cp_binding_level *bl;
tree current_function_parms;
struct c_fileinfo *finfo
! = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))));
/* Sanity check. */
gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
--- 9913,9919 ----
struct cp_binding_level *bl;
tree current_function_parms;
struct c_fileinfo *finfo
! = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
/* Sanity check. */
gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
*************** start_preparsed_function (tree decl1, tr
*** 10002,10009 ****
you declare a function, these types can be incomplete, but they
must be complete when you define the function. */
check_function_type (decl1, current_function_parms);
- /* Make sure no default arg is missing. */
- check_default_args (decl1);
/* Build the return declaration for the function. */
restype = TREE_TYPE (fntype);
--- 10011,10016 ----
diff -Nrcpad gcc-4.0.3/gcc/cp/friend.c gcc-4.0.4/gcc/cp/friend.c
*** gcc-4.0.3/gcc/cp/friend.c 2004-11-29 20:10:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/friend.c 2006-07-05 20:40:06.000000000 +0000
*************** is_friend (tree type, tree supplicant)
*** 78,90 ****
else
/* It's a type. */
{
! /* Nested classes are implicitly friends of their enclosing types, as
! per core issue 45 (this is a change from the standard). */
! for (context = supplicant;
! context && TYPE_P (context);
! context = TYPE_CONTEXT (context))
! if (type == context)
! return 1;
list = CLASSTYPE_FRIEND_CLASSES (TREE_TYPE (TYPE_MAIN_DECL (type)));
for (; list ; list = TREE_CHAIN (list))
--- 78,85 ----
else
/* It's a type. */
{
! if (same_type_p (supplicant, type))
! return 1;
list = CLASSTYPE_FRIEND_CLASSES (TREE_TYPE (TYPE_MAIN_DECL (type)));
for (; list ; list = TREE_CHAIN (list))
*************** is_friend (tree type, tree supplicant)
*** 98,110 ****
}
}
! if (declp && DECL_FUNCTION_MEMBER_P (supplicant))
! context = DECL_CONTEXT (supplicant);
! else if (! declp)
! /* Local classes have the same access as the enclosing function. */
! context = decl_function_context (TYPE_MAIN_DECL (supplicant));
else
! context = NULL_TREE;
/* A namespace is not friend to anybody. */
if (context && TREE_CODE (context) == NAMESPACE_DECL)
--- 93,116 ----
}
}
! if (declp)
! {
! if (DECL_FUNCTION_MEMBER_P (supplicant))
! context = DECL_CONTEXT (supplicant);
! else
! context = NULL_TREE;
! }
else
! {
! if (TYPE_CONTEXT (supplicant)
! && TYPE_P (TYPE_CONTEXT (supplicant)))
! /* Nested classes get the same access as their enclosing types, as
! per DR 45 (this is a change from the standard). */
! context = TYPE_CONTEXT (supplicant);
! else
! /* Local classes have the same access as the enclosing function. */
! context = decl_function_context (TYPE_MAIN_DECL (supplicant));
! }
/* A namespace is not friend to anybody. */
if (context && TREE_CODE (context) == NAMESPACE_DECL)
diff -Nrcpad gcc-4.0.3/gcc/cp/init.c gcc-4.0.4/gcc/cp/init.c
*** gcc-4.0.3/gcc/cp/init.c 2006-02-28 14:24:05.000000000 +0000
--- gcc-4.0.4/gcc/cp/init.c 2007-01-27 19:58:38.000000000 +0000
*************** build_zero_init (tree type, tree nelts,
*** 179,185 ****
items with static storage duration that are not otherwise
initialized are initialized to zero. */
;
! else if (SCALAR_TYPE_P (type))
init = convert (type, integer_zero_node);
else if (CLASS_TYPE_P (type))
{
--- 179,186 ----
items with static storage duration that are not otherwise
initialized are initialized to zero. */
;
! else if (SCALAR_TYPE_P (type)
! || TREE_CODE (type) == COMPLEX_TYPE)
init = convert (type, integer_zero_node);
else if (CLASS_TYPE_P (type))
{
*************** build_zero_init (tree type, tree nelts,
*** 226,231 ****
--- 227,237 ----
nelts, integer_one_node));
else
max_index = array_type_nelts (type);
+
+ /* If we have an error_mark here, we should just return error mark
+ as we don't know the size of the array yet. */
+ if (max_index == error_mark_node)
+ return error_mark_node;
gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
/* A zero-sized array, which is accepted as an extension, will
*************** build_zero_init (tree type, tree nelts,
*** 248,253 ****
--- 254,261 ----
CONSTRUCTOR_ELTS (init) = nreverse (inits);
}
+ else if (TREE_CODE (type) == VECTOR_TYPE)
+ init = fold_convert (type, integer_zero_node);
else
gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
*************** constant_value_1 (tree decl, bool integr
*** 1600,1607 ****
mark_used (decl);
init = DECL_INITIAL (decl);
}
if (init == error_mark_node)
! return error_mark_node;
if (!init
|| !TREE_TYPE (init)
|| (integral_p
--- 1608,1618 ----
mark_used (decl);
init = DECL_INITIAL (decl);
}
+ /* If INIT is ERROR_MARK_NODE, that may mean that we are
+ presently processing the initializer, so we conservatively
+ treat this situation as meaning that DECL is uninitialized. */
if (init == error_mark_node)
! break;
if (!init
|| !TREE_TYPE (init)
|| (integral_p
*************** build_new (tree placement, tree type, tr
*** 1668,1674 ****
{
tree rval;
! if (type == error_mark_node)
return error_mark_node;
if (processing_template_decl)
--- 1679,1685 ----
{
tree rval;
! if (placement == error_mark_node || type == error_mark_node)
return error_mark_node;
if (processing_template_decl)
diff -Nrcpad gcc-4.0.3/gcc/cp/lex.c gcc-4.0.4/gcc/cp/lex.c
*** gcc-4.0.3/gcc/cp/lex.c 2005-05-01 01:12:59.000000000 +0000
--- gcc-4.0.4/gcc/cp/lex.c 2006-09-07 22:38:03.000000000 +0000
*************** handle_pragma_interface (cpp_reader* dfi
*** 467,473 ****
else
filename = ggc_strdup (TREE_STRING_POINTER (fname));
! finfo = get_fileinfo (filename);
if (impl_file_chain == 0)
{
--- 467,473 ----
else
filename = ggc_strdup (TREE_STRING_POINTER (fname));
! finfo = get_fileinfo (input_filename);
if (impl_file_chain == 0)
{
*************** cxx_make_type (enum tree_code code)
*** 773,779 ****
/* Set up some flags that give proper default behavior. */
if (IS_AGGR_TYPE_CODE (code))
{
! struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, finfo->interface_unknown);
CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
}
--- 773,779 ----
/* Set up some flags that give proper default behavior. */
if (IS_AGGR_TYPE_CODE (code))
{
! struct c_fileinfo *finfo = get_fileinfo (input_filename);
SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, finfo->interface_unknown);
CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
}
diff -Nrcpad gcc-4.0.3/gcc/cp/mangle.c gcc-4.0.4/gcc/cp/mangle.c
*** gcc-4.0.3/gcc/cp/mangle.c 2005-09-13 15:17:12.000000000 +0000
--- gcc-4.0.4/gcc/cp/mangle.c 2006-07-11 17:37:31.000000000 +0000
*************** mangle_conv_op_name_for_type (const tree
*** 2771,2776 ****
--- 2771,2779 ----
void **slot;
tree identifier;
+ if (type == error_mark_node)
+ return error_mark_node;
+
if (conv_type_names == NULL)
conv_type_names = htab_create_ggc (31, &hash_type, &compare_type, NULL);
diff -Nrcpad gcc-4.0.3/gcc/cp/method.c gcc-4.0.4/gcc/cp/method.c
*** gcc-4.0.3/gcc/cp/method.c 2005-11-16 20:26:06.000000000 +0000
--- gcc-4.0.4/gcc/cp/method.c 2006-09-09 16:11:34.000000000 +0000
*************** use_thunk (tree thunk_fndecl, bool emit_
*** 408,413 ****
--- 408,414 ----
TREE_CHAIN (x) = t;
DECL_CONTEXT (x) = thunk_fndecl;
SET_DECL_RTL (x, NULL_RTX);
+ DECL_VALUE_EXPR (x) = NULL_TREE;
t = x;
}
a = nreverse (t);
*************** locate_copy (tree type, void *client_)
*** 932,937 ****
--- 933,942 ----
if (!parms)
continue;
src_type = non_reference (TREE_VALUE (parms));
+
+ if (src_type == error_mark_node)
+ return NULL_TREE;
+
if (!same_type_ignoring_top_level_qualifiers_p (src_type, type))
continue;
if (!sufficient_parms_p (TREE_CHAIN (parms)))
diff -Nrcpad gcc-4.0.3/gcc/cp/name-lookup.c gcc-4.0.4/gcc/cp/name-lookup.c
*** gcc-4.0.3/gcc/cp/name-lookup.c 2006-02-18 09:41:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/name-lookup.c 2006-08-03 02:41:33.000000000 +0000
*************** pushdecl (tree x)
*** 601,609 ****
{
int different_binding_level = 0;
- if (TREE_CODE (x) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (x))
- check_default_args (x);
-
if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
name = TREE_OPERAND (name, 0);
--- 601,606 ----
*************** pushdecl (tree x)
*** 732,737 ****
--- 729,737 ----
}
}
+ if (TREE_CODE (x) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (x))
+ check_default_args (x);
+
check_template_shadow (x);
/* If this is a function conjured up by the backend, massage it
*************** push_class_level_binding (tree name, tre
*** 2556,2561 ****
--- 2556,2564 ----
if (!class_binding_level)
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
+ if (name == error_mark_node)
+ POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, false);
+
/* Check for invalid member names. */
gcc_assert (TYPE_BEING_DEFINED (current_class_type));
/* We could have been passed a tree list if this is an ambiguous
*************** tree
*** 2695,2700 ****
--- 2698,2706 ----
do_class_using_decl (tree scope, tree name)
{
tree value, type;
+
+ if (name == error_mark_node)
+ return NULL_TREE;
if (!scope || !TYPE_P (scope))
{
*************** tree
*** 3590,3595 ****
--- 3596,3602 ----
lookup_qualified_name (tree scope, tree name, bool is_type_p, bool complain)
{
int flags = 0;
+ tree t = NULL_TREE;
if (TREE_CODE (scope) == NAMESPACE_DECL)
{
*************** lookup_qualified_name (tree scope, tree
*** 3599,3615 ****
if (is_type_p)
flags |= LOOKUP_PREFER_TYPES;
if (qualified_lookup_using_namespace (name, scope, &binding, flags))
! return select_decl (&binding, flags);
}
else if (is_aggr_type (scope, complain))
! {
! tree t;
! t = lookup_member (scope, name, 2, is_type_p);
! if (t)
! return t;
! }
! return error_mark_node;
}
/* Subroutine of unqualified_namespace_lookup:
--- 3606,3619 ----
if (is_type_p)
flags |= LOOKUP_PREFER_TYPES;
if (qualified_lookup_using_namespace (name, scope, &binding, flags))
! t = select_decl (&binding, flags);
}
else if (is_aggr_type (scope, complain))
! t = lookup_member (scope, name, 2, is_type_p);
! if (!t)
! return error_mark_node;
! return t;
}
/* Subroutine of unqualified_namespace_lookup:
*************** pushtag (tree name, tree type, tag_scope
*** 4668,4674 ****
pushdecl_class_level (decl);
}
else if (b->kind != sk_template_parms)
! decl = pushdecl_with_scope (decl, b);
/* FIXME what if it gets a name from typedef? */
if (ANON_AGGRNAME_P (name))
--- 4672,4682 ----
pushdecl_class_level (decl);
}
else if (b->kind != sk_template_parms)
! {
! decl = pushdecl_with_scope (decl, b);
! if (decl == error_mark_node)
! POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
! }
/* FIXME what if it gets a name from typedef? */
if (ANON_AGGRNAME_P (name))
diff -Nrcpad gcc-4.0.3/gcc/cp/parser.c gcc-4.0.4/gcc/cp/parser.c
*** gcc-4.0.3/gcc/cp/parser.c 2006-02-18 09:41:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/parser.c 2006-12-03 13:11:51.000000000 +0000
*************** static tree cp_parser_class_name
*** 1550,1556 ****
static tree cp_parser_class_specifier
(cp_parser *);
static tree cp_parser_class_head
! (cp_parser *, bool *, tree *);
static enum tag_types cp_parser_class_key
(cp_parser *);
static void cp_parser_member_specification_opt
--- 1550,1556 ----
static tree cp_parser_class_specifier
(cp_parser *);
static tree cp_parser_class_head
! (cp_parser *, bool *, tree *, tree *);
static enum tag_types cp_parser_class_key
(cp_parser *);
static void cp_parser_member_specification_opt
*************** cp_parser_simulate_error (cp_parser* par
*** 1894,1899 ****
--- 1894,1942 ----
return false;
}
+ /* Check for repeated decl-specifiers. */
+
+ static void
+ cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs)
+ {
+ cp_decl_spec ds;
+
+ for (ds = ds_first; ds != ds_last; ++ds)
+ {
+ unsigned count = decl_specs->specs[(int)ds];
+ if (count < 2)
+ continue;
+ /* The "long" specifier is a special case because of "long long". */
+ if (ds == ds_long)
+ {
+ if (count > 2)
+ error ("% is too long for GCC");
+ else if (pedantic && !in_system_header && warn_long_long)
+ pedwarn ("ISO C++ does not support %");
+ }
+ else if (count > 1)
+ {
+ static const char *const decl_spec_names[] = {
+ "signed",
+ "unsigned",
+ "short",
+ "long",
+ "const",
+ "volatile",
+ "restrict",
+ "inline",
+ "virtual",
+ "explicit",
+ "friend",
+ "typedef",
+ "__complex",
+ "__thread"
+ };
+ error ("duplicate %qs", decl_spec_names[(int)ds]);
+ }
+ }
+ }
+
/* This function is called when a type is defined. If type
definitions are forbidden at this point, an error message is
issued. */
*************** cp_parser_diagnose_invalid_type_name (cp
*** 2006,2013 ****
/* If the lookup found a template-name, it means that the user forgot
to specify an argument list. Emit an useful error message. */
if (TREE_CODE (decl) == TEMPLATE_DECL)
! error ("invalid use of template-name %qE without an argument list",
! decl);
else if (!parser->scope || parser->scope == error_mark_node)
{
/* Issue an error message. */
--- 2049,2060 ----
/* If the lookup found a template-name, it means that the user forgot
to specify an argument list. Emit an useful error message. */
if (TREE_CODE (decl) == TEMPLATE_DECL)
! error ("invalid use of template-name %qE without an argument list", decl);
! else if (TREE_CODE (id) == BIT_NOT_EXPR)
! error ("invalid use of destructor %qD as a type", id);
! else if (TREE_CODE (decl) == TYPE_DECL)
! /* Something like 'unsigned A a;' */
! error ("invalid combination of multiple type-specifiers");
else if (!parser->scope || parser->scope == error_mark_node)
{
/* Issue an error message. */
*************** cp_parser_parse_and_diagnose_invalid_typ
*** 2100,2107 ****
cp_parser_abort_tentative_parse (parser);
return false;
}
! if (!cp_parser_parse_definitely (parser)
! || TREE_CODE (id) != IDENTIFIER_NODE)
return false;
/* Emit a diagnostic for the invalid type. */
--- 2147,2153 ----
cp_parser_abort_tentative_parse (parser);
return false;
}
! if (!cp_parser_parse_definitely (parser) || TREE_CODE (id) == TYPE_DECL)
return false;
/* Emit a diagnostic for the invalid type. */
*************** cp_parser_unqualified_id (cp_parser* par
*** 3256,3263 ****
object_scope = parser->object_scope;
qualifying_scope = parser->qualifying_scope;
/* If the name is of the form "X::~X" it's OK. */
! if (scope && TYPE_P (scope)
&& cp_lexer_next_token_is (parser->lexer, CPP_NAME)
&& (cp_lexer_peek_nth_token (parser->lexer, 2)->type
== CPP_OPEN_PAREN)
--- 3302,3327 ----
object_scope = parser->object_scope;
qualifying_scope = parser->qualifying_scope;
+ /* Check for invalid scopes. */
+ if (scope == error_mark_node)
+ {
+ if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+ cp_lexer_consume_token (parser->lexer);
+ return error_mark_node;
+ }
+ if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
+ {
+ if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
+ error ("scope %qT before %<~%> is not a class-name", scope);
+ cp_parser_simulate_error (parser);
+ if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+ cp_lexer_consume_token (parser->lexer);
+ return error_mark_node;
+ }
+ gcc_assert (!scope || TYPE_P (scope));
+
/* If the name is of the form "X::~X" it's OK. */
! if (scope
&& cp_lexer_next_token_is (parser->lexer, CPP_NAME)
&& (cp_lexer_peek_nth_token (parser->lexer, 2)->type
== CPP_OPEN_PAREN)
*************** cp_parser_unqualified_id (cp_parser* par
*** 3340,3346 ****
destructor is the same as the name of the qualifying
class. That allows us to keep parsing after running
into ill-formed destructor names. */
! if (type_decl == error_mark_node && scope && TYPE_P (scope))
return build_nt (BIT_NOT_EXPR, scope);
else if (type_decl == error_mark_node)
return error_mark_node;
--- 3404,3410 ----
destructor is the same as the name of the qualifying
class. That allows us to keep parsing after running
into ill-formed destructor names. */
! if (type_decl == error_mark_node && scope)
return build_nt (BIT_NOT_EXPR, scope);
else if (type_decl == error_mark_node)
return error_mark_node;
*************** cp_parser_unqualified_id (cp_parser* par
*** 3351,3356 ****
--- 3415,3421 ----
if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
error ("declaration of %<~%T%> as member of %qT",
type_decl, scope);
+ cp_parser_simulate_error (parser);
return error_mark_node;
}
*************** cp_parser_builtin_offsetof (cp_parser *p
*** 5911,5917 ****
if (processing_template_decl)
expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
else
! expr = fold_offsetof (expr);
failure:
parser->integral_constant_expression_p = save_ice_p;
--- 5976,5982 ----
if (processing_template_decl)
expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
else
! expr = finish_offsetof (expr);
failure:
parser->integral_constant_expression_p = save_ice_p;
*************** cp_parser_decl_specifier_seq (cp_parser*
*** 7186,7192 ****
int* declares_class_or_enum)
{
bool constructor_possible_p = !parser->in_declarator_p;
- cp_decl_spec ds;
/* Clear DECL_SPECS. */
clear_decl_specs (decl_specs);
--- 7251,7256 ----
*************** cp_parser_decl_specifier_seq (cp_parser*
*** 7387,7427 ****
flags |= CP_PARSER_FLAGS_OPTIONAL;
}
! /* Check for repeated decl-specifiers. */
! for (ds = ds_first; ds != ds_last; ++ds)
! {
! unsigned count = decl_specs->specs[(int)ds];
! if (count < 2)
! continue;
! /* The "long" specifier is a special case because of "long long". */
! if (ds == ds_long)
! {
! if (count > 2)
! error ("% is too long for GCC");
! else if (pedantic && !in_system_header && warn_long_long)
! pedwarn ("ISO C++ does not support %");
! }
! else if (count > 1)
! {
! static const char *const decl_spec_names[] = {
! "signed",
! "unsigned",
! "short",
! "long",
! "const",
! "volatile",
! "restrict",
! "inline",
! "virtual",
! "explicit",
! "friend",
! "typedef",
! "__complex",
! "__thread"
! };
! error ("duplicate %qs", decl_spec_names[(int)ds]);
! }
! }
/* Don't allow a friend specifier with a class definition. */
if (decl_specs->specs[(int) ds_friend] != 0
--- 7451,7457 ----
flags |= CP_PARSER_FLAGS_OPTIONAL;
}
! cp_parser_check_decl_spec (decl_specs);
/* Don't allow a friend specifier with a class definition. */
if (decl_specs->specs[(int) ds_friend] != 0
*************** cp_parser_type_specifier_seq (cp_parser*
*** 11756,11762 ****
flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
}
! return;
}
/* Parse a parameter-declaration-clause.
--- 11786,11792 ----
flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
}
! cp_parser_check_decl_spec (type_specifier_seq);
}
/* Parse a parameter-declaration-clause.
*************** cp_parser_class_name (cp_parser *parser,
*** 12542,12556 ****
standard does not seem to be definitive, but there is no other
valid interpretation of the following `::'. Therefore, those
names are considered class-names. */
- decl = TYPE_NAME (make_typename_type (scope, decl, tag_type, tf_error));
- else if (decl == error_mark_node
- || TREE_CODE (decl) != TYPE_DECL
- || TREE_TYPE (decl) == error_mark_node
- || !IS_AGGR_TYPE (TREE_TYPE (decl)))
{
! cp_parser_error (parser, "expected class-name");
! return error_mark_node;
}
return decl;
}
--- 12572,12589 ----
standard does not seem to be definitive, but there is no other
valid interpretation of the following `::'. Therefore, those
names are considered class-names. */
{
! decl = make_typename_type (scope, decl, tag_type, tf_error);
! if (decl != error_mark_node)
! decl = TYPE_NAME (decl);
}
+ else if (TREE_CODE (decl) != TYPE_DECL
+ || TREE_TYPE (decl) == error_mark_node
+ || !IS_AGGR_TYPE (TREE_TYPE (decl)))
+ decl = error_mark_node;
+
+ if (decl == error_mark_node)
+ cp_parser_error (parser, "expected class-name");
return decl;
}
*************** cp_parser_class_specifier (cp_parser* pa
*** 12573,12585 ****
unsigned saved_num_template_parameter_lists;
tree old_scope = NULL_TREE;
tree scope = NULL_TREE;
push_deferring_access_checks (dk_no_deferred);
/* Parse the class-head. */
type = cp_parser_class_head (parser,
&nested_name_specifier_p,
! &attributes);
/* If the class-head was a semantic disaster, skip the entire body
of the class. */
if (!type)
--- 12606,12620 ----
unsigned saved_num_template_parameter_lists;
tree old_scope = NULL_TREE;
tree scope = NULL_TREE;
+ tree bases;
push_deferring_access_checks (dk_no_deferred);
/* Parse the class-head. */
type = cp_parser_class_head (parser,
&nested_name_specifier_p,
! &attributes,
! &bases);
/* If the class-head was a semantic disaster, skip the entire body
of the class. */
if (!type)
*************** cp_parser_class_specifier (cp_parser* pa
*** 12596,12601 ****
--- 12631,12639 ----
return error_mark_node;
}
+ /* Process the base classes. */
+ xref_basetypes (type, bases);
+
/* Issue an error message if type-definitions are forbidden here. */
cp_parser_check_type_definition (parser);
/* Remember that we are defining one more class. */
*************** cp_parser_class_specifier (cp_parser* pa
*** 12750,12756 ****
static tree
cp_parser_class_head (cp_parser* parser,
bool* nested_name_specifier_p,
! tree *attributes_p)
{
tree nested_name_specifier;
enum tag_types class_key;
--- 12788,12795 ----
static tree
cp_parser_class_head (cp_parser* parser,
bool* nested_name_specifier_p,
! tree *attributes_p,
! tree *bases)
{
tree nested_name_specifier;
enum tag_types class_key;
*************** cp_parser_class_head (cp_parser* parser,
*** 12763,12769 ****
bool invalid_explicit_specialization_p = false;
tree pushed_scope = NULL_TREE;
unsigned num_templates;
- tree bases;
/* Assume no nested-name-specifier will be present. */
*nested_name_specifier_p = false;
--- 12802,12807 ----
*************** cp_parser_class_head (cp_parser* parser,
*** 12978,12984 ****
if (template_id_p)
{
type = TREE_TYPE (id);
! maybe_process_partial_specialization (type);
if (nested_name_specifier)
pushed_scope = push_scope (nested_name_specifier);
}
--- 13016,13022 ----
if (template_id_p)
{
type = TREE_TYPE (id);
! type = maybe_process_partial_specialization (type);
if (nested_name_specifier)
pushed_scope = push_scope (nested_name_specifier);
}
*************** cp_parser_class_head (cp_parser* parser,
*** 13059,13072 ****
struct A::C : B {};
is valid. */
! bases = NULL_TREE;
/* Get the list of base-classes, if there is one. */
if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
! bases = cp_parser_base_clause (parser);
!
! /* Process the base classes. */
! xref_basetypes (type, bases);
done:
/* Leave the scope given by the nested-name-specifier. We will
--- 13097,13107 ----
struct A::C : B {};
is valid. */
! *bases = NULL_TREE;
/* Get the list of base-classes, if there is one. */
if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
! *bases = cp_parser_base_clause (parser);
done:
/* Leave the scope given by the nested-name-specifier. We will
*************** cp_parser_attribute_list (cp_parser* par
*** 14286,14291 ****
--- 14321,14328 ----
if (token->type == CPP_NAME
|| token->type == CPP_KEYWORD)
{
+ tree arguments = NULL_TREE;
+
/* Consume the token. */
token = cp_lexer_consume_token (parser->lexer);
*************** cp_parser_attribute_list (cp_parser* par
*** 14299,14316 ****
/* If it's an `(', then parse the attribute arguments. */
if (token->type == CPP_OPEN_PAREN)
{
! tree arguments;
!
! arguments = (cp_parser_parenthesized_expression_list
! (parser, true, /*cast_p=*/false,
! /*non_constant_p=*/NULL));
! /* Save the identifier and arguments away. */
TREE_VALUE (attribute) = arguments;
}
! /* Add this attribute to the list. */
! TREE_CHAIN (attribute) = attribute_list;
! attribute_list = attribute;
token = cp_lexer_peek_token (parser->lexer);
}
--- 14336,14354 ----
/* If it's an `(', then parse the attribute arguments. */
if (token->type == CPP_OPEN_PAREN)
{
! arguments = cp_parser_parenthesized_expression_list
! (parser, true, /*cast_p=*/false,
! /*non_constant_p=*/NULL);
! /* Save the arguments away. */
TREE_VALUE (attribute) = arguments;
}
! if (arguments != error_mark_node)
! {
! /* Add this attribute to the list. */
! TREE_CHAIN (attribute) = attribute_list;
! attribute_list = attribute;
! }
token = cp_lexer_peek_token (parser->lexer);
}
diff -Nrcpad gcc-4.0.3/gcc/cp/pt.c gcc-4.0.4/gcc/cp/pt.c
*** gcc-4.0.3/gcc/cp/pt.c 2006-02-18 09:41:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/pt.c 2007-01-27 19:58:38.000000000 +0000
*************** check_specialization_namespace (tree tmp
*** 676,688 ****
/* The TYPE is being declared. If it is a template type, that means it
is a partial specialization. Do appropriate error-checking. */
! void
maybe_process_partial_specialization (tree type)
{
tree context;
if (type == error_mark_node)
! return;
context = TYPE_CONTEXT (type);
--- 676,695 ----
/* The TYPE is being declared. If it is a template type, that means it
is a partial specialization. Do appropriate error-checking. */
! tree
maybe_process_partial_specialization (tree type)
{
tree context;
if (type == error_mark_node)
! return error_mark_node;
!
! if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
! {
! error ("name of class shadows template template parameter %qD",
! TYPE_NAME (type));
! return error_mark_node;
! }
context = TYPE_CONTEXT (type);
*************** maybe_process_partial_specialization (tr
*** 767,773 ****
}
}
else if (processing_specialization)
! error ("explicit specialization of non-template %qT", type);
}
/* Returns nonzero if we can optimize the retrieval of specializations
--- 774,785 ----
}
}
else if (processing_specialization)
! {
! error ("explicit specialization of non-template %qT", type);
! return error_mark_node;
! }
!
! return type;
}
/* Returns nonzero if we can optimize the retrieval of specializations
*************** push_template_decl_real (tree decl, int
*** 2947,2953 ****
DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
/* See if this is a primary template. */
! primary = template_parm_scope_p ();
if (primary)
{
--- 2959,2971 ----
DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
/* See if this is a primary template. */
! if (is_friend && ctx)
! /* A friend template that specifies a class context, i.e.
! template friend void A::f();
! is not primary. */
! primary = 0;
! else
! primary = template_parm_scope_p ();
if (primary)
{
*************** push_template_decl_real (tree decl, int
*** 2979,2985 ****
template. ... Template allocation functions shall
have two or more parameters. */
error ("invalid template declaration of %qD", decl);
! return decl;
}
}
else if (DECL_IMPLICIT_TYPEDEF_P (decl)
--- 2997,3003 ----
template. ... Template allocation functions shall
have two or more parameters. */
error ("invalid template declaration of %qD", decl);
! return error_mark_node;
}
}
else if (DECL_IMPLICIT_TYPEDEF_P (decl)
*************** redeclare_class_template (tree type, tre
*** 3296,3301 ****
--- 3314,3322 ----
tree
fold_non_dependent_expr (tree expr)
{
+ if (expr == NULL_TREE)
+ return NULL_TREE;
+
/* If we're in a template, but EXPR isn't value dependent, simplify
it. We're supposed to treat:
*************** convert_nontype_argument (tree type, tre
*** 3426,3431 ****
--- 3447,3454 ----
instantiated -- but here we need the resolved form so that we can
convert the argument. */
expr = fold_non_dependent_expr (expr);
+ if (error_operand_p (expr))
+ return error_mark_node;
expr_type = TREE_TYPE (expr);
/* HACK: Due to double coercion, we can get a
*************** convert_template_argument (tree parm,
*** 3792,3802 ****
tree in_decl)
{
tree val;
- tree inner_args;
int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
- inner_args = INNERMOST_TEMPLATE_ARGS (args);
-
if (TREE_CODE (arg) == TREE_LIST
&& TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
{
--- 3815,3822 ----
*************** convert_template_argument (tree parm,
*** 3888,3894 ****
if (coerce_template_template_parms (parmparm, argparm,
complain, in_decl,
! inner_args))
{
val = arg;
--- 3908,3914 ----
if (coerce_template_template_parms (parmparm, argparm,
complain, in_decl,
! args))
{
val = arg;
*************** tsubst_friend_function (tree decl, tree
*** 5189,5194 ****
--- 5209,5218 ----
else
new_friend_result_template_info = NULL_TREE;
+ /* Make the init_value nonzero so pushdecl knows this is a defn. */
+ if (new_friend_is_defn)
+ DECL_INITIAL (new_friend) = error_mark_node;
+
/* Inside pushdecl_namespace_level, we will push into the
current namespace. However, the friend function should go
into the namespace of the template. */
*************** tsubst (tree t, tree args, tsubst_flags_
*** 7066,7075 ****
{
if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
{
gcc_assert (TYPE_P (arg));
return cp_build_qualified_type_real
! (arg, cp_type_quals (arg) | cp_type_quals (t),
! complain | tf_ignore_bad_quals);
}
else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
{
--- 7090,7109 ----
{
if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
{
+ int quals;
gcc_assert (TYPE_P (arg));
+
+ /* cv-quals from the template are discarded when
+ substituting in a function or reference type. */
+ if (TREE_CODE (arg) == FUNCTION_TYPE
+ || TREE_CODE (arg) == METHOD_TYPE
+ || TREE_CODE (arg) == REFERENCE_TYPE)
+ quals = cp_type_quals (arg);
+ else
+ quals = cp_type_quals (arg) | cp_type_quals (t);
+
return cp_build_qualified_type_real
! (arg, quals, complain | tf_ignore_bad_quals);
}
else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
{
*************** tsubst_copy_and_build (tree t,
*** 8939,8945 ****
in_decl));
case OFFSETOF_EXPR:
! return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
case STMT_EXPR:
{
--- 8973,8979 ----
in_decl));
case OFFSETOF_EXPR:
! return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
case STMT_EXPR:
{
*************** do_decl_instantiation (tree decl, tree s
*** 11040,11046 ****
tree result = NULL_TREE;
int extern_p = 0;
! if (!decl)
/* An error occurred, for which grokdeclarator has already issued
an appropriate message. */
return;
--- 11074,11080 ----
tree result = NULL_TREE;
int extern_p = 0;
! if (!decl || decl == error_mark_node)
/* An error occurred, for which grokdeclarator has already issued
an appropriate message. */
return;
*************** any_dependent_template_arguments_p (tree
*** 12559,12564 ****
--- 12593,12600 ----
if (!args)
return false;
+ if (args == error_mark_node)
+ return true;
for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
{
diff -Nrcpad gcc-4.0.3/gcc/cp/rtti.c gcc-4.0.4/gcc/cp/rtti.c
*** gcc-4.0.3/gcc/cp/rtti.c 2006-02-18 09:41:18.000000000 +0000
--- gcc-4.0.4/gcc/cp/rtti.c 2006-06-22 09:43:53.000000000 +0000
*************** get_tinfo_decl_dynamic (tree exp)
*** 202,208 ****
tree type;
tree t;
! if (exp == error_mark_node)
return error_mark_node;
/* peel back references, so they match. */
--- 202,208 ----
tree type;
tree t;
! if (error_operand_p (exp))
return error_mark_node;
/* peel back references, so they match. */
*************** build_dynamic_cast_1 (tree type, tree ex
*** 485,494 ****
}
else
{
- /* Apply trivial conversion T -> T& for dereferenced ptrs. */
exprtype = build_reference_type (exprtype);
- expr = convert_to_reference (exprtype, expr, CONV_IMPLICIT,
- LOOKUP_NORMAL, NULL_TREE);
/* T is a reference type, v shall be an lvalue of a complete class
type, and the result is an lvalue of the type referred to by T. */
--- 485,491 ----
*************** build_dynamic_cast_1 (tree type, tree ex
*** 504,509 ****
--- 501,509 ----
goto fail;
}
+ /* Apply trivial conversion T -> T& for dereferenced ptrs. */
+ expr = convert_to_reference (exprtype, expr, CONV_IMPLICIT,
+ LOOKUP_NORMAL, NULL_TREE);
}
/* The dynamic_cast operator shall not cast away constness. */
diff -Nrcpad gcc-4.0.3/gcc/cp/search.c gcc-4.0.4/gcc/cp/search.c
*** gcc-4.0.3/gcc/cp/search.c 2005-10-20 18:04:35.000000000 +0000
--- gcc-4.0.4/gcc/cp/search.c 2006-08-18 16:27:03.000000000 +0000
*************** friend_accessible_p (tree scope, tree de
*** 793,800 ****
if (protected_accessible_p (decl, TREE_VALUE (t), binfo))
return 1;
! /* Nested classes are implicitly friends of their enclosing types, as
! per core issue 45 (this is a change from the standard). */
if (TYPE_P (scope))
for (t = TYPE_CONTEXT (scope); t && TYPE_P (t); t = TYPE_CONTEXT (t))
if (protected_accessible_p (decl, t, binfo))
--- 793,800 ----
if (protected_accessible_p (decl, TREE_VALUE (t), binfo))
return 1;
! /* Nested classes have the same access as their enclosing types, as
! per DR 45 (this is a change from the standard). */
if (TYPE_P (scope))
for (t = TYPE_CONTEXT (scope); t && TYPE_P (t); t = TYPE_CONTEXT (t))
if (protected_accessible_p (decl, t, binfo))
*************** lookup_member (tree xbasetype, tree name
*** 1201,1206 ****
--- 1201,1209 ----
const char *errstr = 0;
+ if (name == error_mark_node)
+ return NULL_TREE;
+
gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
if (TREE_CODE (xbasetype) == TREE_BINFO)
*************** lookup_member (tree xbasetype, tree name
*** 1210,1216 ****
}
else
{
! gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (xbasetype)));
type = xbasetype;
xbasetype = NULL_TREE;
}
--- 1213,1220 ----
}
else
{
! if (!IS_AGGR_TYPE_CODE (TREE_CODE (xbasetype)))
! return NULL_TREE;
type = xbasetype;
xbasetype = NULL_TREE;
}
*************** adjust_result_of_qualified_name_lookup (
*** 1480,1493 ****
tree qualifying_scope,
tree context_class)
{
! if (context_class && CLASS_TYPE_P (qualifying_scope)
&& DERIVED_FROM_P (qualifying_scope, context_class)
&& BASELINK_P (decl))
{
tree base;
- gcc_assert (CLASS_TYPE_P (context_class));
-
/* Look for the QUALIFYING_SCOPE as a base of the CONTEXT_CLASS.
Because we do not yet know which function will be chosen by
overload resolution, we cannot yet check either accessibility
--- 1484,1497 ----
tree qualifying_scope,
tree context_class)
{
! if (context_class && context_class != error_mark_node
! && CLASS_TYPE_P (context_class)
! && CLASS_TYPE_P (qualifying_scope)
&& DERIVED_FROM_P (qualifying_scope, context_class)
&& BASELINK_P (decl))
{
tree base;
/* Look for the QUALIFYING_SCOPE as a base of the CONTEXT_CLASS.
Because we do not yet know which function will be chosen by
overload resolution, we cannot yet check either accessibility
diff -Nrcpad gcc-4.0.3/gcc/cp/semantics.c gcc-4.0.4/gcc/cp/semantics.c
*** gcc-4.0.3/gcc/cp/semantics.c 2005-12-22 20:02:21.000000000 +0000
--- gcc-4.0.4/gcc/cp/semantics.c 2006-09-07 22:38:03.000000000 +0000
*************** tree
*** 1250,1255 ****
--- 1250,1259 ----
finish_label_stmt (tree name)
{
tree decl = define_label (input_location, name);
+
+ if (decl == error_mark_node)
+ return error_mark_node;
+
return add_stmt (build_stmt (LABEL_EXPR, decl));
}
*************** check_template_template_default_arg (tre
*** 2052,2070 ****
&& TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
{
if (TREE_CODE (argument) == TYPE_DECL)
! {
! tree t = TREE_TYPE (argument);
!
! /* Try to emit a slightly smarter error message if we detect
! that the user is using a template instantiation. */
! if (CLASSTYPE_TEMPLATE_INFO (t)
! && CLASSTYPE_TEMPLATE_INSTANTIATION (t))
! error ("invalid use of type %qT as a default value for a "
! "template template-parameter", t);
! else
! error ("invalid use of %qD as a default value for a template "
! "template-parameter", argument);
! }
else
error ("invalid default argument for a template template parameter");
return error_mark_node;
--- 2056,2063 ----
&& TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
{
if (TREE_CODE (argument) == TYPE_DECL)
! error ("invalid use of type %qT as a default value for a template "
! "template-parameter", TREE_TYPE (argument));
else
error ("invalid default argument for a template template parameter");
return error_mark_node;
*************** begin_class_definition (tree t)
*** 2130,2136 ****
before. */
if (! TYPE_ANONYMOUS_P (t))
{
! struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
SET_CLASSTYPE_INTERFACE_UNKNOWN_X
(t, finfo->interface_unknown);
--- 2123,2129 ----
before. */
if (! TYPE_ANONYMOUS_P (t))
{
! struct c_fileinfo *finfo = get_fileinfo (input_filename);
CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
SET_CLASSTYPE_INTERFACE_UNKNOWN_X
(t, finfo->interface_unknown);
*************** finish_typeof (tree expr)
*** 2784,2789 ****
--- 2777,2806 ----
return type;
}
+ /* Perform C++-specific checks for __builtin_offsetof before calling
+ fold_offsetof. */
+
+ tree
+ finish_offsetof (tree expr)
+ {
+ if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
+ {
+ error ("cannot apply % to destructor %<~%T%>",
+ TREE_OPERAND (expr, 2));
+ return error_mark_node;
+ }
+ if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
+ || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
+ || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
+ {
+ if (TREE_CODE (expr) == COMPONENT_REF)
+ expr = TREE_OPERAND (expr, 1);
+ error ("cannot apply % to member function %qD", expr);
+ return error_mark_node;
+ }
+ return fold_offsetof (expr);
+ }
+
/* Called from expand_body via walk_tree. Replace all AGGR_INIT_EXPRs
with equivalent CALL_EXPRs. */
diff -Nrcpad gcc-4.0.3/gcc/cp/tree.c gcc-4.0.4/gcc/cp/tree.c
*** gcc-4.0.3/gcc/cp/tree.c 2005-10-02 21:44:37.000000000 +0000
--- gcc-4.0.4/gcc/cp/tree.c 2006-09-07 22:38:03.000000000 +0000
*************** int
*** 807,813 ****
is_overloaded_fn (tree x)
{
/* A baselink is also considered an overloaded function. */
! if (TREE_CODE (x) == OFFSET_REF)
x = TREE_OPERAND (x, 1);
if (BASELINK_P (x))
x = BASELINK_FUNCTIONS (x);
--- 807,814 ----
is_overloaded_fn (tree x)
{
/* A baselink is also considered an overloaded function. */
! if (TREE_CODE (x) == OFFSET_REF
! || TREE_CODE (x) == COMPONENT_REF)
x = TREE_OPERAND (x, 1);
if (BASELINK_P (x))
x = BASELINK_FUNCTIONS (x);
*************** get_first_fn (tree from)
*** 836,841 ****
--- 837,844 ----
{
gcc_assert (is_overloaded_fn (from));
/* A baselink is also considered an overloaded function. */
+ if (TREE_CODE (from) == COMPONENT_REF)
+ from = TREE_OPERAND (from, 1);
if (BASELINK_P (from))
from = BASELINK_FUNCTIONS (from);
return OVL_CURRENT (from);
diff -Nrcpad gcc-4.0.3/gcc/cp/typeck2.c gcc-4.0.4/gcc/cp/typeck2.c
*** gcc-4.0.3/gcc/cp/typeck2.c 2006-02-11 00:19:30.000000000 +0000
--- gcc-4.0.4/gcc/cp/typeck2.c 2006-08-26 00:59:09.000000000 +0000
*************** cxx_incomplete_type_diagnostic (tree val
*** 412,418 ****
break;
case TEMPLATE_TYPE_PARM:
! (*p_msg) ("invalid use of template type parameter");
break;
case UNKNOWN_TYPE:
--- 412,423 ----
break;
case TEMPLATE_TYPE_PARM:
! (*p_msg) ("invalid use of template type parameter %qT", type);
! break;
!
! case BOUND_TEMPLATE_TEMPLATE_PARM:
! (*p_msg) ("invalid use of template template parameter %qT",
! TYPE_NAME (type));
break;
case UNKNOWN_TYPE:
*************** build_functional_cast (tree exp, tree pa
*** 1386,1397 ****
if (! IS_AGGR_TYPE (type))
{
- /* This must build a C cast. */
if (parms == NULL_TREE)
! parms = integer_zero_node;
! else
! parms = build_x_compound_expr_from_list (parms, "functional cast");
return build_c_cast (type, parms);
}
--- 1391,1401 ----
if (! IS_AGGR_TYPE (type))
{
if (parms == NULL_TREE)
! return cp_convert (type, integer_zero_node);
+ /* This must build a C cast. */
+ parms = build_x_compound_expr_from_list (parms, "functional cast");
return build_c_cast (type, parms);
}
diff -Nrcpad gcc-4.0.3/gcc/cp/typeck.c gcc-4.0.4/gcc/cp/typeck.c
*** gcc-4.0.3/gcc/cp/typeck.c 2006-01-24 21:44:57.000000000 +0000
--- gcc-4.0.4/gcc/cp/typeck.c 2006-12-01 22:32:00.000000000 +0000
*************** type_after_usual_arithmetic_conversions
*** 274,280 ****
|| TREE_CODE (t1) == ENUMERAL_TYPE);
gcc_assert (ARITHMETIC_TYPE_P (t2)
|| TREE_CODE (t2) == COMPLEX_TYPE
! || TREE_CODE (t1) == VECTOR_TYPE
|| TREE_CODE (t2) == ENUMERAL_TYPE);
/* In what follows, we slightly generalize the rules given in [expr] so
--- 274,280 ----
|| TREE_CODE (t1) == ENUMERAL_TYPE);
gcc_assert (ARITHMETIC_TYPE_P (t2)
|| TREE_CODE (t2) == COMPLEX_TYPE
! || TREE_CODE (t2) == VECTOR_TYPE
|| TREE_CODE (t2) == ENUMERAL_TYPE);
/* In what follows, we slightly generalize the rules given in [expr] so
*************** convert_arguments (tree typelist, tree v
*** 2569,2575 ****
tree type = typetail ? TREE_VALUE (typetail) : 0;
tree val = TREE_VALUE (valtail);
! if (val == error_mark_node)
return error_mark_node;
if (type == void_type_node)
--- 2569,2575 ----
tree type = typetail ? TREE_VALUE (typetail) : 0;
tree val = TREE_VALUE (valtail);
! if (val == error_mark_node || type == error_mark_node)
return error_mark_node;
if (type == void_type_node)
*************** convert_arguments (tree typelist, tree v
*** 2685,2691 ****
}
else
error ("too few arguments to function");
! return error_mark_list;
}
}
--- 2685,2691 ----
}
else
error ("too few arguments to function");
! return error_mark_node;
}
}
*************** build_binary_op (enum tree_code code, tr
*** 2901,2917 ****
&& (code1 == INTEGER_TYPE || code1 == REAL_TYPE
|| code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
{
if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
warning ("division by zero in %<%E / 0%>", op0);
else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
warning ("division by zero in %<%E / 0.%>", op0);
-
- if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
- code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
- if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
- code1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
! if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
resultcode = RDIV_EXPR;
else
/* When dividing two signed integers, we have to promote to int.
--- 2901,2919 ----
&& (code1 == INTEGER_TYPE || code1 == REAL_TYPE
|| code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
{
+ enum tree_code tcode0 = code0, tcode1 = code1;
+
if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
warning ("division by zero in %<%E / 0%>", op0);
else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
warning ("division by zero in %<%E / 0.%>", op0);
! if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
! tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
! if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
! tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
!
! if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
resultcode = RDIV_EXPR;
else
/* When dividing two signed integers, we have to promote to int.
*************** build_unary_op (enum tree_code code, tre
*** 3784,3790 ****
else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM,
arg, true)))
errstring = "wrong type argument to bit-complement";
! else if (!noconvert)
arg = perform_integral_promotions (arg);
break;
--- 3786,3792 ----
else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM,
arg, true)))
errstring = "wrong type argument to bit-complement";
! else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
arg = perform_integral_promotions (arg);
break;
*************** build_modify_expr (tree lhs, enum tree_c
*** 5275,5281 ****
bool plain_assign = (modifycode == NOP_EXPR);
/* Avoid duplicate error messages from operands that had errors. */
! if (lhs == error_mark_node || rhs == error_mark_node)
return error_mark_node;
/* Handle control structure constructs used as "lvalues". */
--- 5277,5283 ----
bool plain_assign = (modifycode == NOP_EXPR);
/* Avoid duplicate error messages from operands that had errors. */
! if (error_operand_p (lhs) || error_operand_p (rhs))
return error_mark_node;
/* Handle control structure constructs used as "lvalues". */
*************** maybe_warn_about_returning_address_of_lo
*** 6083,6088 ****
--- 6085,6094 ----
}
}
+ while (TREE_CODE (whats_returned) == COMPONENT_REF
+ || TREE_CODE (whats_returned) == ARRAY_REF)
+ whats_returned = TREE_OPERAND (whats_returned, 0);
+
if (DECL_P (whats_returned)
&& DECL_NAME (whats_returned)
&& DECL_FUNCTION_SCOPE_P (whats_returned)
diff -Nrcpad gcc-4.0.3/gcc/c-parse.c gcc-4.0.4/gcc/c-parse.c
*** gcc-4.0.3/gcc/c-parse.c 2006-03-09 20:50:05.000000000 +0000
--- gcc-4.0.4/gcc/c-parse.c 2007-01-31 10:40:47.000000000 +0000
***************
*** 1,7 ****
! /* A Bison parser, made by GNU Bison 2.0. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
--- 1,7 ----
! /* A Bison parser, made by GNU Bison 1.875. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*************** typedef union YYSTYPE {long itype; tree
*** 285,292 ****
struct c_type_name *typenametype; struct c_parm *parmtype;
struct c_declspecs *dsptype; struct c_typespec tstype;
enum tree_code code; location_t location; } YYSTYPE;
! /* Line 190 of yacc.c. */
! #line 290 "c-parse.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
--- 285,292 ----
struct c_type_name *typenametype; struct c_parm *parmtype;
struct c_declspecs *dsptype; struct c_typespec tstype;
enum tree_code code; location_t location; } YYSTYPE;
! /* Line 191 of yacc.c. */
! #line 289 "c-parse.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
*************** c_parse_init (void)
*** 385,410 ****
! /* Line 213 of yacc.c. */
! #line 390 "c-parse.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
- # ifndef YYFREE
- # define YYFREE free
- # endif
- # ifndef YYMALLOC
- # define YYMALLOC malloc
- # endif
-
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # ifdef YYSTACK_USE_ALLOCA
! # if YYSTACK_USE_ALLOCA
! # ifdef __GNUC__
! # define YYSTACK_ALLOC __builtin_alloca
! # else
# define YYSTACK_ALLOC alloca
# endif
# endif
# endif
--- 385,407 ----
! /* Line 214 of yacc.c. */
! #line 389 "c-parse.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # if YYSTACK_USE_ALLOCA
! # define YYSTACK_ALLOC alloca
! # else
! # ifndef YYSTACK_USE_ALLOCA
! # if defined (alloca) || defined (_ALLOCA_H)
# define YYSTACK_ALLOC alloca
+ # else
+ # ifdef __GNUC__
+ # define YYSTACK_ALLOC __builtin_alloca
+ # endif
# endif
# endif
# endif
*************** c_parse_init (void)
*** 417,436 ****
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC YYMALLOC
! # define YYSTACK_FREE YYFREE
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short int yyss;
YYSTYPE yyvs;
};
--- 414,433 ----
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC malloc
! # define YYSTACK_FREE free
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short yyss;
YYSTYPE yyvs;
};
*************** union yyalloc
*** 440,452 ****
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if defined (__GNUC__) && 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
--- 437,449 ----
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
*************** union yyalloc
*** 482,488 ****
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short int yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
--- 479,485 ----
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
*************** static const unsigned char yytranslate[]
*** 547,553 ****
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
! static const unsigned short int yyprhs[] =
{
0, 0, 3, 4, 6, 7, 11, 12, 17, 19,
21, 23, 26, 27, 31, 36, 41, 44, 47, 50,
--- 544,550 ----
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
! static const unsigned short yyprhs[] =
{
0, 0, 3, 4, 6, 7, 11, 12, 17, 19,
21, 23, 26, 27, 31, 36, 41, 44, 47, 50,
*************** static const unsigned short int yyprhs[]
*** 610,616 ****
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
! static const short int yyrhs[] =
{
96, 0, -1, -1, 97, -1, -1, 101, 98, 100,
-1, -1, 97, 101, 99, 100, -1, 103, -1, 102,
--- 607,613 ----
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
! static const short yyrhs[] =
{
96, 0, -1, -1, 97, -1, -1, 101, 98, 100,
-1, -1, 97, 101, 99, 100, -1, 103, -1, 102,
*************** static const short int yyrhs[] =
*** 793,799 ****
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short int yyrline[] =
{
0, 342, 342, 345, 353, 353, 356, 355, 361, 362,
363, 364, 371, 375, 378, 380, 382, 384, 385, 386,
--- 790,796 ----
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short yyrline[] =
{
0, 342, 342, 345, 353, 353, 356, 355, 361, 362,
363, 364, 371, 375, 378, 380, 382, 384, 385, 386,
*************** static const unsigned short int yyrline[
*** 861,936 ****
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "IDENTIFIER", "TYPENAME", "SCSPEC",
! "STATIC", "TYPESPEC", "TYPE_QUAL", "OBJC_TYPE_QUAL", "CONSTANT",
! "STRING", "ELLIPSIS", "SIZEOF", "ENUM", "STRUCT", "UNION", "IF", "ELSE",
! "WHILE", "DO", "FOR", "SWITCH", "CASE", "DEFAULT", "BREAK", "CONTINUE",
! "RETURN", "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE",
! "EXTENSION", "LABEL", "REALPART", "IMAGPART", "VA_ARG", "CHOOSE_EXPR",
! "TYPES_COMPATIBLE_P", "FUNC_NAME", "OFFSETOF", "'='", "ASSIGN", "'?'",
! "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE",
! "ARITHCOMPARE", "RSHIFT", "LSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'",
! "MINUSMINUS", "PLUSPLUS", "UNARY", "HYPERUNARY", "'.'", "'('", "'['",
! "POINTSAT", "AT_INTERFACE", "AT_IMPLEMENTATION", "AT_END", "AT_SELECTOR",
! "AT_DEFS", "AT_ENCODE", "CLASSNAME", "AT_PUBLIC", "AT_PRIVATE",
! "AT_PROTECTED", "AT_PROTOCOL", "AT_CLASS", "AT_ALIAS", "AT_THROW",
! "AT_TRY", "AT_CATCH", "AT_FINALLY", "AT_SYNCHRONIZED", "OBJC_STRING",
! "';'", "'}'", "'~'", "'!'", "','", "')'", "'{'", "']'", "$accept",
! "program", "extdefs", "@1", "@2", "extdef", "save_obstack_position",
! "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8", "identifier",
! "unop", "expr", "exprlist", "nonnull_exprlist", "unary_expr", "sizeof",
! "alignof", "typeof", "cast_expr", "expr_no_commas", "@9", "@10", "@11",
! "@12", "@13", "primary", "@14", "@15", "offsetof_member_designator",
! "old_style_parm_decls", "lineno_datadecl", "datadecls", "datadecl",
! "lineno_decl", "setspecs", "maybe_resetattrs", "decl",
! "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea",
! "declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea",
! "declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea",
! "declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea",
! "declspecs_sc_nots_nosa_noea", "declspecs_sc_nots_nosa_ea",
! "declspecs_sc_nots_sa_noea", "declspecs_sc_nots_sa_ea",
! "declspecs_sc_ts_nosa_noea", "declspecs_sc_ts_nosa_ea",
! "declspecs_sc_ts_sa_noea", "declspecs_sc_ts_sa_ea", "declspecs_ts",
! "declspecs_nots", "declspecs_ts_nosa", "declspecs_nots_nosa",
! "declspecs_nosc_ts", "declspecs_nosc_nots", "declspecs_nosc",
! "declspecs", "maybe_type_quals_attrs", "typespec_nonattr",
! "typespec_attr", "typespec_reserved_nonattr", "typespec_reserved_attr",
! "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls",
! "initdcl", "@16", "notype_initdcl", "@17", "maybe_attribute",
! "attributes", "attribute", "attribute_list", "attrib", "any_word",
! "scspec", "init", "@18", "initlist_maybe_comma", "initlist1", "initelt",
! "@19", "initval", "@20", "designator_list", "designator",
! "array_designator", "nested_function", "@21", "@22",
! "notype_nested_function", "@23", "@24", "declarator",
! "after_type_declarator", "parm_declarator",
! "parm_declarator_starttypename", "parm_declarator_nostarttypename",
! "notype_declarator", "struct_head", "union_head", "enum_head",
! "structsp_attr", "@25", "@26", "@27", "@28", "structsp_nonattr",
! "maybecomma", "maybecomma_warn", "component_decl_list",
! "component_decl_list2", "component_decl", "components",
! "components_notype", "component_declarator",
! "component_notype_declarator", "enumlist", "enumerator", "typename",
! "@29", "absdcl", "absdcl_maybe_attribute", "absdcl1", "absdcl1_noea",
! "absdcl1_ea", "direct_absdcl1", "array_declarator", "stmts_and_decls",
! "lineno_stmt_decl_or_labels_ending_stmt",
! "lineno_stmt_decl_or_labels_ending_decl",
! "lineno_stmt_decl_or_labels_ending_label",
! "lineno_stmt_decl_or_labels_ending_error", "lineno_stmt_decl_or_labels",
! "errstmt", "c99_block_start", "maybe_label_decls", "label_decls",
! "label_decl", "compstmt_or_error", "compstmt_start", "compstmt_nostart",
! "compstmt_contents_nonempty", "compstmt_primary_start", "compstmt",
! "save_location", "lineno_labels", "c99_block_lineno_labeled_stmt",
! "lineno_stmt", "lineno_label", "condition", "if_statement_1",
! "if_statement_2", "if_statement", "start_break", "start_continue",
! "while_statement", "do_statement", "@30", "@31", "xexpr",
! "for_init_stmt", "for_cond_expr", "for_incr_expr", "for_statement",
! "switch_statement", "@32", "stmt_nocomp", "stmt", "label",
! "simple_asm_expr", "maybeasm", "asmdef", "asm_stmt", "asm_argument",
! "maybe_volatile", "asm_operands", "nonnull_asm_operands", "asm_operand",
! "asm_clobbers", "asm_string", "stop_string_translation",
! "start_string_translation", "parmlist", "@33", "parmlist_1", "@34",
! "@35", "parmlist_2", "parms", "parm", "firstparm", "setspecs_fp",
! "parmlist_or_identifiers", "@36", "parmlist_or_identifiers_1",
"identifiers", "identifiers_or_typenames", "extension", 0
};
#endif
--- 858,934 ----
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "IDENTIFIER", "TYPENAME", "SCSPEC",
! "STATIC", "TYPESPEC", "TYPE_QUAL", "OBJC_TYPE_QUAL", "CONSTANT",
! "STRING", "ELLIPSIS", "SIZEOF", "ENUM", "STRUCT", "UNION", "IF", "ELSE",
! "WHILE", "DO", "FOR", "SWITCH", "CASE", "DEFAULT", "BREAK", "CONTINUE",
! "RETURN", "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE",
! "EXTENSION", "LABEL", "REALPART", "IMAGPART", "VA_ARG", "CHOOSE_EXPR",
! "TYPES_COMPATIBLE_P", "FUNC_NAME", "OFFSETOF", "'='", "ASSIGN", "'?'",
! "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE",
! "ARITHCOMPARE", "RSHIFT", "LSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'",
! "MINUSMINUS", "PLUSPLUS", "UNARY", "HYPERUNARY", "'.'", "'('", "'['",
! "POINTSAT", "AT_INTERFACE", "AT_IMPLEMENTATION", "AT_END",
! "AT_SELECTOR", "AT_DEFS", "AT_ENCODE", "CLASSNAME", "AT_PUBLIC",
! "AT_PRIVATE", "AT_PROTECTED", "AT_PROTOCOL", "AT_CLASS", "AT_ALIAS",
! "AT_THROW", "AT_TRY", "AT_CATCH", "AT_FINALLY", "AT_SYNCHRONIZED",
! "OBJC_STRING", "';'", "'}'", "'~'", "'!'", "','", "')'", "'{'", "']'",
! "$accept", "program", "extdefs", "@1", "@2", "extdef",
! "save_obstack_position", "datadef", "fndef", "@3", "@4", "@5", "@6",
! "@7", "@8", "identifier", "unop", "expr", "exprlist",
! "nonnull_exprlist", "unary_expr", "sizeof", "alignof", "typeof",
! "cast_expr", "expr_no_commas", "@9", "@10", "@11", "@12", "@13",
! "primary", "@14", "@15", "offsetof_member_designator",
! "old_style_parm_decls", "lineno_datadecl", "datadecls", "datadecl",
! "lineno_decl", "setspecs", "maybe_resetattrs", "decl",
! "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea",
! "declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea",
! "declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea",
! "declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea",
! "declspecs_sc_nots_nosa_noea", "declspecs_sc_nots_nosa_ea",
! "declspecs_sc_nots_sa_noea", "declspecs_sc_nots_sa_ea",
! "declspecs_sc_ts_nosa_noea", "declspecs_sc_ts_nosa_ea",
! "declspecs_sc_ts_sa_noea", "declspecs_sc_ts_sa_ea", "declspecs_ts",
! "declspecs_nots", "declspecs_ts_nosa", "declspecs_nots_nosa",
! "declspecs_nosc_ts", "declspecs_nosc_nots", "declspecs_nosc",
! "declspecs", "maybe_type_quals_attrs", "typespec_nonattr",
! "typespec_attr", "typespec_reserved_nonattr", "typespec_reserved_attr",
! "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls",
! "initdcl", "@16", "notype_initdcl", "@17", "maybe_attribute",
! "attributes", "attribute", "attribute_list", "attrib", "any_word",
! "scspec", "init", "@18", "initlist_maybe_comma", "initlist1", "initelt",
! "@19", "initval", "@20", "designator_list", "designator",
! "array_designator", "nested_function", "@21", "@22",
! "notype_nested_function", "@23", "@24", "declarator",
! "after_type_declarator", "parm_declarator",
! "parm_declarator_starttypename", "parm_declarator_nostarttypename",
! "notype_declarator", "struct_head", "union_head", "enum_head",
! "structsp_attr", "@25", "@26", "@27", "@28", "structsp_nonattr",
! "maybecomma", "maybecomma_warn", "component_decl_list",
! "component_decl_list2", "component_decl", "components",
! "components_notype", "component_declarator",
! "component_notype_declarator", "enumlist", "enumerator", "typename",
! "@29", "absdcl", "absdcl_maybe_attribute", "absdcl1", "absdcl1_noea",
! "absdcl1_ea", "direct_absdcl1", "array_declarator", "stmts_and_decls",
! "lineno_stmt_decl_or_labels_ending_stmt",
! "lineno_stmt_decl_or_labels_ending_decl",
! "lineno_stmt_decl_or_labels_ending_label",
! "lineno_stmt_decl_or_labels_ending_error", "lineno_stmt_decl_or_labels",
! "errstmt", "c99_block_start", "maybe_label_decls", "label_decls",
! "label_decl", "compstmt_or_error", "compstmt_start", "compstmt_nostart",
! "compstmt_contents_nonempty", "compstmt_primary_start", "compstmt",
! "save_location", "lineno_labels", "c99_block_lineno_labeled_stmt",
! "lineno_stmt", "lineno_label", "condition", "if_statement_1",
! "if_statement_2", "if_statement", "start_break", "start_continue",
! "while_statement", "do_statement", "@30", "@31", "xexpr",
! "for_init_stmt", "for_cond_expr", "for_incr_expr", "for_statement",
! "switch_statement", "@32", "stmt_nocomp", "stmt", "label",
! "simple_asm_expr", "maybeasm", "asmdef", "asm_stmt", "asm_argument",
! "maybe_volatile", "asm_operands", "nonnull_asm_operands", "asm_operand",
! "asm_clobbers", "asm_string", "stop_string_translation",
! "start_string_translation", "parmlist", "@33", "parmlist_1", "@34",
! "@35", "parmlist_2", "parms", "parm", "firstparm", "setspecs_fp",
! "parmlist_or_identifiers", "@36", "parmlist_or_identifiers_1",
"identifiers", "identifiers_or_typenames", "extension", 0
};
#endif
*************** static const char *const yytname[] =
*** 938,944 ****
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short int yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
--- 936,942 ----
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
*************** static const unsigned short int yytoknum
*** 954,960 ****
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short int yyr1[] =
{
0, 95, 96, 96, 98, 97, 99, 97, 100, 100,
100, 100, 101, 102, 102, 102, 102, 102, 102, 102,
--- 952,958 ----
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short yyr1[] =
{
0, 95, 96, 96, 98, 97, 99, 97, 100, 100,
100, 100, 101, 102, 102, 102, 102, 102, 102, 102,
*************** static const unsigned char yyr2[] =
*** 1082,1088 ****
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
! static const unsigned short int yydefact[] =
{
12, 0, 12, 4, 1, 6, 0, 0, 0, 275,
306, 305, 272, 134, 362, 358, 360, 0, 60, 0,
--- 1080,1086 ----
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
! static const unsigned short yydefact[] =
{
12, 0, 12, 4, 1, 6, 0, 0, 0, 275,
306, 305, 272, 134, 362, 358, 360, 0, 60, 0,
*************** static const unsigned short int yydefact
*** 1181,1187 ****
};
/* YYDEFGOTO[NTERM-NUM]. */
! static const short int yydefgoto[] =
{
-1, 1, 2, 6, 7, 22, 3, 23, 24, 323,
647, 329, 649, 225, 560, 675, 191, 260, 393, 394,
--- 1179,1185 ----
};
/* YYDEFGOTO[NTERM-NUM]. */
! static const short yydefgoto[] =
{
-1, 1, 2, 6, 7, 22, 3, 23, 24, 323,
647, 329, 649, 225, 560, 675, 191, 260, 393, 394,
*************** static const short int yydefgoto[] =
*** 1209,1215 ****
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -781
! static const short int yypact[] =
{
109, 117, 136, -781, -781, -781, 2777, 2777, 215, -781,
-781, -781, -781, -781, 106, 106, 106, 84, -781, 94,
--- 1207,1213 ----
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -781
! static const short yypact[] =
{
109, 117, 136, -781, -781, -781, 2777, 2777, 215, -781,
-781, -781, -781, -781, 106, 106, 106, 84, -781, 94,
*************** static const short int yypact[] =
*** 1308,1314 ****
};
/* YYPGOTO[NTERM-NUM]. */
! static const short int yypgoto[] =
{
-781, -781, -781, -781, -781, 76, 885, -781, -781, -781,
-781, -781, -781, -781, -781, -28, -781, -71, 417, 232,
--- 1306,1312 ----
};
/* YYPGOTO[NTERM-NUM]. */
! static const short yypgoto[] =
{
-781, -781, -781, -781, -781, 76, 885, -781, -781, -781,
-781, -781, -781, -781, -781, -28, -781, -71, 417, 232,
*************** static const short int yypgoto[] =
*** 1338,1344 ****
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -550
! static const short int yytable[] =
{
71, 192, 167, 599, 27, 27, 28, 28, 31, 31,
248, 442, 443, 32, 32, 310, 234, 154, 401, 237,
--- 1336,1342 ----
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -550
! static const short yytable[] =
{
71, 192, 167, 599, 27, 27, 28, 28, 31, 31,
248, 442, 443, 32, 32, 310, 234, 154, 401, 237,
*************** static const short int yytable[] =
*** 1673,1679 ****
278, 279, 280, 281, 282, 283, 284, 285
};
! static const short int yycheck[] =
{
19, 72, 70, 490, 6, 7, 6, 7, 6, 7,
166, 316, 316, 6, 7, 224, 151, 51, 292, 152,
--- 1671,1677 ----
278, 279, 280, 281, 282, 283, 284, 285
};
! static const short yycheck[] =
{
19, 72, 70, 490, 6, 7, 6, 7, 6, 7,
166, 316, 316, 6, 7, 224, 151, 51, 292, 152,
*************** static const short int yycheck[] =
*** 2010,2016 ****
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
! static const unsigned short int yystos[] =
{
0, 96, 97, 101, 0, 101, 98, 99, 1, 4,
5, 6, 7, 8, 14, 15, 16, 29, 30, 32,
--- 2008,2014 ----
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
! static const unsigned short yystos[] =
{
0, 96, 97, 101, 0, 101, 98, 99, 1, 4,
5, 6, 7, 8, 14, 15, 16, 29, 30, 32,
*************** static const unsigned short int yystos[]
*** 2131,2138 ****
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrorlab
!
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
--- 2129,2135 ----
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
*************** do \
*** 2159,2211 ****
} \
while (0)
-
#define YYTERROR 1
#define YYERRCODE 256
- /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
- #define YYRHSLOC(Rhs, K) ((Rhs)[K])
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! do \
! if (N) \
! { \
! (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
! (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
! (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
! (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
! } \
! else \
! { \
! (Current).first_line = (Current).last_line = \
! YYRHSLOC (Rhs, 0).last_line; \
! (Current).first_column = (Current).last_column = \
! YYRHSLOC (Rhs, 0).last_column; \
! } \
! while (0)
! #endif
!
!
! /* YY_LOCATION_PRINT -- Print the location on the stream.
! This macro was not mandated originally: define only if we know
! we won't break user code: when these are the locations we know. */
!
! #ifndef YY_LOCATION_PRINT
! # if YYLTYPE_IS_TRIVIAL
! # define YY_LOCATION_PRINT(File, Loc) \
! fprintf (File, "%d.%d-%d.%d", \
! (Loc).first_line, (Loc).first_column, \
! (Loc).last_line, (Loc).last_column)
! # else
! # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
! # endif
#endif
-
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
--- 2156,2175 ----
} \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
+ /* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run). */
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! Current.first_line = Rhs[1].first_line; \
! Current.first_column = Rhs[1].first_column; \
! Current.last_line = Rhs[N].last_line; \
! Current.last_column = Rhs[N].last_column;
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
*************** do { \
*** 2228,2257 ****
YYFPRINTF Args; \
} while (0)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Type, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (included). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short int *bottom, short int *top)
#else
static void
yy_stack_print (bottom, top)
! short int *bottom;
! short int *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
--- 2192,2227 ----
YYFPRINTF Args; \
} while (0)
! # define YYDSYMPRINT(Args) \
! do { \
! if (yydebug) \
! yysymprint Args; \
! } while (0)
!
! # define YYDSYMPRINTF(Title, Token, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Token, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (cinluded). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short *bottom, short *top)
#else
static void
yy_stack_print (bottom, top)
! short *bottom;
! short *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
*************** yy_reduce_print (yyrule)
*** 2281,2289 ****
#endif
{
int yyi;
! unsigned int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
--- 2251,2259 ----
#endif
{
int yyi;
! unsigned int yylineno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylineno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
*************** do { \
*** 2301,2307 ****
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
--- 2271,2278 ----
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YYDSYMPRINT(Args)
! # define YYDSYMPRINTF(Title, Token, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
*************** int yydebug;
*** 2319,2324 ****
--- 2290,2299 ----
SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
evaluated with infinite-precision integer arithmetic. */
+ #if YYMAXDEPTH == 0
+ # undef YYMAXDEPTH
+ #endif
+
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 2400,2414 ****
(void) yyvaluep;
if (yytype < YYNTOKENS)
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- # ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
- # endif
switch (yytype)
{
default:
--- 2375,2389 ----
(void) yyvaluep;
if (yytype < YYNTOKENS)
! {
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
! # ifdef YYPRINT
! YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
! # endif
! }
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
switch (yytype)
{
default:
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 2424,2434 ****
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yymsg, yytype, yyvaluep)
! const char *yymsg;
int yytype;
YYSTYPE *yyvaluep;
#endif
--- 2399,2408 ----
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yytype, yyvaluep)
int yytype;
YYSTYPE *yyvaluep;
#endif
*************** yydestruct (yymsg, yytype, yyvaluep)
*** 2436,2445 ****
/* Pacify ``unused variable'' warnings. */
(void) yyvaluep;
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
switch (yytype)
{
--- 2410,2415 ----
*************** int yyparse ();
*** 2467,2476 ****
! /* The look-ahead symbol. */
int yychar;
! /* The semantic value of the look-ahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
--- 2437,2446 ----
! /* The lookahead symbol. */
int yychar;
! /* The semantic value of the lookahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
*************** yyparse ()
*** 2506,2512 ****
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Look-ahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
--- 2476,2482 ----
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Lookahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
*************** yyparse ()
*** 2518,2526 ****
to reallocate them elsewhere. */
/* The state stack. */
! short int yyssa[YYINITDEPTH];
! short int *yyss = yyssa;
! register short int *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
--- 2488,2496 ----
to reallocate them elsewhere. */
/* The state stack. */
! short yyssa[YYINITDEPTH];
! short *yyss = yyssa;
! register short *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
*************** yyparse ()
*** 2557,2565 ****
yyssp = yyss;
yyvsp = yyvs;
-
- yyvsp[0] = yylval;
-
goto yysetstate;
/*------------------------------------------------------------.
--- 2527,2532 ----
*************** yyparse ()
*** 2585,2591 ****
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short int *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
--- 2552,2558 ----
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
*************** yyparse ()
*** 2613,2619 ****
yystacksize = YYMAXDEPTH;
{
! short int *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
--- 2580,2586 ----
yystacksize = YYMAXDEPTH;
{
! short *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
*************** yyparse ()
*** 2649,2666 ****
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a look-ahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to look-ahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a look-ahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
--- 2616,2633 ----
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a lookahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a lookahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
*************** yybackup:
*** 2675,2681 ****
else
{
yytoken = YYTRANSLATE (yychar);
! YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
--- 2642,2648 ----
else
{
yytoken = YYTRANSLATE (yychar);
! YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
*************** yybackup:
*** 2695,2702 ****
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the look-ahead token. */
! YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
--- 2662,2669 ----
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the lookahead token. */
! YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
*************** yyreduce:
*** 2754,2785 ****
case 4:
#line 353 "c-parse.y"
! { (yyval.dsptype) = NULL; ;}
break;
case 5:
#line 354 "c-parse.y"
! { obstack_free (&parser_obstack, (yyvsp[-2].otype)); ;}
break;
case 6:
#line 356 "c-parse.y"
! { (yyval.dsptype) = NULL; ggc_collect (); ;}
break;
case 7:
#line 357 "c-parse.y"
! { obstack_free (&parser_obstack, (yyvsp[-2].otype)); ;}
break;
case 11:
#line 365 "c-parse.y"
! { RESTORE_EXT_FLAGS ((yyvsp[-1].itype)); ;}
break;
case 12:
#line 371 "c-parse.y"
! { (yyval.otype) = obstack_alloc (&parser_obstack, 0); ;}
break;
case 13:
--- 2721,2752 ----
case 4:
#line 353 "c-parse.y"
! { yyval.dsptype = NULL; ;}
break;
case 5:
#line 354 "c-parse.y"
! { obstack_free (&parser_obstack, yyvsp[-2].otype); ;}
break;
case 6:
#line 356 "c-parse.y"
! { yyval.dsptype = NULL; ggc_collect (); ;}
break;
case 7:
#line 357 "c-parse.y"
! { obstack_free (&parser_obstack, yyvsp[-2].otype); ;}
break;
case 11:
#line 365 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;}
break;
case 12:
#line 371 "c-parse.y"
! { yyval.otype = obstack_alloc (&parser_obstack, 0); ;}
break;
case 13:
*************** yyreduce:
*** 2800,2806 ****
case 16:
#line 383 "c-parse.y"
! { shadow_tag (finish_declspecs ((yyvsp[-1].dsptype))); ;}
break;
case 19:
--- 2767,2773 ----
case 16:
#line 383 "c-parse.y"
! { shadow_tag (finish_declspecs (yyvsp[-1].dsptype)); ;}
break;
case 19:
*************** yyreduce:
*** 2811,2817 ****
case 20:
#line 393 "c-parse.y"
! { if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
YYERROR1;
;}
--- 2778,2784 ----
case 20:
#line 393 "c-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
YYERROR1;
;}
*************** yyreduce:
*** 2819,2825 ****
case 21:
#line 398 "c-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
--- 2786,2792 ----
case 21:
#line 398 "c-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
*************** yyreduce:
*** 2836,2842 ****
case 24:
#line 406 "c-parse.y"
! { if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
YYERROR1;
;}
--- 2803,2809 ----
case 24:
#line 406 "c-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
YYERROR1;
;}
*************** yyreduce:
*** 2844,2850 ****
case 25:
#line 411 "c-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
--- 2811,2817 ----
case 25:
#line 411 "c-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
*************** yyreduce:
*** 2861,2867 ****
case 28:
#line 419 "c-parse.y"
! { if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
YYERROR1;
;}
--- 2828,2834 ----
case 28:
#line 419 "c-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
YYERROR1;
;}
*************** yyreduce:
*** 2869,2875 ****
case 29:
#line 424 "c-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
--- 2836,2842 ----
case 29:
#line 424 "c-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
*************** yyreduce:
*** 2886,2902 ****
case 34:
#line 439 "c-parse.y"
! { (yyval.code) = ADDR_EXPR; ;}
break;
case 35:
#line 441 "c-parse.y"
! { (yyval.code) = NEGATE_EXPR; ;}
break;
case 36:
#line 443 "c-parse.y"
! { (yyval.code) = CONVERT_EXPR;
if (warn_traditional && !in_system_header)
warning ("traditional C rejects the unary plus operator");
;}
--- 2853,2869 ----
case 34:
#line 439 "c-parse.y"
! { yyval.code = ADDR_EXPR; ;}
break;
case 35:
#line 441 "c-parse.y"
! { yyval.code = NEGATE_EXPR; ;}
break;
case 36:
#line 443 "c-parse.y"
! { yyval.code = CONVERT_EXPR;
if (warn_traditional && !in_system_header)
warning ("traditional C rejects the unary plus operator");
;}
*************** yyreduce:
*** 2904,3016 ****
case 37:
#line 448 "c-parse.y"
! { (yyval.code) = PREINCREMENT_EXPR; ;}
break;
case 38:
#line 450 "c-parse.y"
! { (yyval.code) = PREDECREMENT_EXPR; ;}
break;
case 39:
#line 452 "c-parse.y"
! { (yyval.code) = BIT_NOT_EXPR; ;}
break;
case 40:
#line 454 "c-parse.y"
! { (yyval.code) = TRUTH_NOT_EXPR; ;}
break;
case 42:
#line 459 "c-parse.y"
! { (yyval.exprtype).value = build_compound_expr ((yyvsp[-2].exprtype).value, (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = COMPOUND_EXPR; ;}
break;
case 43:
#line 465 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 45:
#line 471 "c-parse.y"
! { (yyval.ttype) = build_tree_list (NULL_TREE, (yyvsp[0].exprtype).value); ;}
break;
case 46:
#line 473 "c-parse.y"
! { chainon ((yyvsp[-2].ttype), build_tree_list (NULL_TREE, (yyvsp[0].exprtype).value)); ;}
break;
case 48:
#line 479 "c-parse.y"
! { (yyval.exprtype).value = build_indirect_ref ((yyvsp[0].exprtype).value, "unary *");
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 49:
#line 483 "c-parse.y"
! { (yyval.exprtype) = (yyvsp[0].exprtype);
! RESTORE_EXT_FLAGS ((yyvsp[-1].itype)); ;}
break;
case 50:
#line 486 "c-parse.y"
! { (yyval.exprtype).value = build_unary_op ((yyvsp[-1].code), (yyvsp[0].exprtype).value, 0);
! overflow_warning ((yyval.exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 51:
#line 491 "c-parse.y"
! { (yyval.exprtype).value = finish_label_address_expr ((yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 52:
#line 494 "c-parse.y"
{ skip_evaluation--;
in_sizeof--;
! if (TREE_CODE ((yyvsp[0].exprtype).value) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND ((yyvsp[0].exprtype).value, 1)))
error ("% applied to a bit-field");
! (yyval.exprtype) = c_expr_sizeof_expr ((yyvsp[0].exprtype)); ;}
break;
case 53:
#line 501 "c-parse.y"
{ skip_evaluation--;
in_sizeof--;
! (yyval.exprtype) = c_expr_sizeof_type ((yyvsp[-1].typenametype)); ;}
break;
case 54:
#line 505 "c-parse.y"
{ skip_evaluation--;
in_alignof--;
! (yyval.exprtype).value = c_alignof_expr ((yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 55:
#line 510 "c-parse.y"
{ skip_evaluation--;
in_alignof--;
! (yyval.exprtype).value = c_alignof (groktypename ((yyvsp[-1].typenametype)));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 56:
#line 515 "c-parse.y"
! { (yyval.exprtype).value = build_unary_op (REALPART_EXPR, (yyvsp[0].exprtype).value, 0);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 57:
#line 518 "c-parse.y"
! { (yyval.exprtype).value = build_unary_op (IMAGPART_EXPR, (yyvsp[0].exprtype).value, 0);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 58:
--- 2871,2983 ----
case 37:
#line 448 "c-parse.y"
! { yyval.code = PREINCREMENT_EXPR; ;}
break;
case 38:
#line 450 "c-parse.y"
! { yyval.code = PREDECREMENT_EXPR; ;}
break;
case 39:
#line 452 "c-parse.y"
! { yyval.code = BIT_NOT_EXPR; ;}
break;
case 40:
#line 454 "c-parse.y"
! { yyval.code = TRUTH_NOT_EXPR; ;}
break;
case 42:
#line 459 "c-parse.y"
! { yyval.exprtype.value = build_compound_expr (yyvsp[-2].exprtype.value, yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = COMPOUND_EXPR; ;}
break;
case 43:
#line 465 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 45:
#line 471 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].exprtype.value); ;}
break;
case 46:
#line 473 "c-parse.y"
! { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].exprtype.value)); ;}
break;
case 48:
#line 479 "c-parse.y"
! { yyval.exprtype.value = build_indirect_ref (yyvsp[0].exprtype.value, "unary *");
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 49:
#line 483 "c-parse.y"
! { yyval.exprtype = yyvsp[0].exprtype;
! RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;}
break;
case 50:
#line 486 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (yyvsp[-1].code, yyvsp[0].exprtype.value, 0);
! overflow_warning (yyval.exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 51:
#line 491 "c-parse.y"
! { yyval.exprtype.value = finish_label_address_expr (yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 52:
#line 494 "c-parse.y"
{ skip_evaluation--;
in_sizeof--;
! if (TREE_CODE (yyvsp[0].exprtype.value) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].exprtype.value, 1)))
error ("% applied to a bit-field");
! yyval.exprtype = c_expr_sizeof_expr (yyvsp[0].exprtype); ;}
break;
case 53:
#line 501 "c-parse.y"
{ skip_evaluation--;
in_sizeof--;
! yyval.exprtype = c_expr_sizeof_type (yyvsp[-1].typenametype); ;}
break;
case 54:
#line 505 "c-parse.y"
{ skip_evaluation--;
in_alignof--;
! yyval.exprtype.value = c_alignof_expr (yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 55:
#line 510 "c-parse.y"
{ skip_evaluation--;
in_alignof--;
! yyval.exprtype.value = c_alignof (groktypename (yyvsp[-1].typenametype));
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 56:
#line 515 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (REALPART_EXPR, yyvsp[0].exprtype.value, 0);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 57:
#line 518 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (IMAGPART_EXPR, yyvsp[0].exprtype.value, 0);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 58:
*************** yyreduce:
*** 3030,3144 ****
case 62:
#line 537 "c-parse.y"
! { (yyval.exprtype).value = c_cast_expr ((yyvsp[-2].typenametype), (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 64:
#line 544 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 65:
#line 546 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 66:
#line 548 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 67:
#line 550 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 68:
#line 552 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 69:
#line 554 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 70:
#line 556 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 71:
#line 558 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 72:
#line 560 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 73:
#line 562 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 74:
#line 564 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 75:
#line 566 "c-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 76:
#line 568 "c-parse.y"
! { (yyvsp[-1].exprtype).value = lang_hooks.truthvalue_conversion
! (default_conversion ((yyvsp[-1].exprtype).value));
! skip_evaluation += (yyvsp[-1].exprtype).value == truthvalue_false_node; ;}
break;
case 77:
#line 572 "c-parse.y"
! { skip_evaluation -= (yyvsp[-3].exprtype).value == truthvalue_false_node;
! (yyval.exprtype) = parser_build_binary_op (TRUTH_ANDIF_EXPR, (yyvsp[-3].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 78:
#line 575 "c-parse.y"
! { (yyvsp[-1].exprtype).value = lang_hooks.truthvalue_conversion
! (default_conversion ((yyvsp[-1].exprtype).value));
! skip_evaluation += (yyvsp[-1].exprtype).value == truthvalue_true_node; ;}
break;
case 79:
#line 579 "c-parse.y"
! { skip_evaluation -= (yyvsp[-3].exprtype).value == truthvalue_true_node;
! (yyval.exprtype) = parser_build_binary_op (TRUTH_ORIF_EXPR, (yyvsp[-3].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 80:
#line 582 "c-parse.y"
! { (yyvsp[-1].exprtype).value = lang_hooks.truthvalue_conversion
! (default_conversion ((yyvsp[-1].exprtype).value));
! skip_evaluation += (yyvsp[-1].exprtype).value == truthvalue_false_node; ;}
break;
case 81:
#line 586 "c-parse.y"
! { skip_evaluation += (((yyvsp[-4].exprtype).value == truthvalue_true_node)
! - ((yyvsp[-4].exprtype).value == truthvalue_false_node)); ;}
break;
case 82:
#line 589 "c-parse.y"
! { skip_evaluation -= (yyvsp[-6].exprtype).value == truthvalue_true_node;
! (yyval.exprtype).value = build_conditional_expr ((yyvsp[-6].exprtype).value, (yyvsp[-3].exprtype).value,
! (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 83:
--- 2997,3111 ----
case 62:
#line 537 "c-parse.y"
! { yyval.exprtype.value = c_cast_expr (yyvsp[-2].typenametype, yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 64:
#line 544 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 65:
#line 546 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 66:
#line 548 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 67:
#line 550 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 68:
#line 552 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 69:
#line 554 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 70:
#line 556 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 71:
#line 558 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 72:
#line 560 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 73:
#line 562 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 74:
#line 564 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 75:
#line 566 "c-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 76:
#line 568 "c-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! (default_conversion (yyvsp[-1].exprtype.value));
! skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_false_node; ;}
break;
case 77:
#line 572 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].exprtype.value == truthvalue_false_node;
! yyval.exprtype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].exprtype, yyvsp[0].exprtype); ;}
break;
case 78:
#line 575 "c-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! (default_conversion (yyvsp[-1].exprtype.value));
! skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_true_node; ;}
break;
case 79:
#line 579 "c-parse.y"
! { skip_evaluation -= yyvsp[-3].exprtype.value == truthvalue_true_node;
! yyval.exprtype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].exprtype, yyvsp[0].exprtype); ;}
break;
case 80:
#line 582 "c-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! (default_conversion (yyvsp[-1].exprtype.value));
! skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_false_node; ;}
break;
case 81:
#line 586 "c-parse.y"
! { skip_evaluation += ((yyvsp[-4].exprtype.value == truthvalue_true_node)
! - (yyvsp[-4].exprtype.value == truthvalue_false_node)); ;}
break;
case 82:
#line 589 "c-parse.y"
! { skip_evaluation -= yyvsp[-6].exprtype.value == truthvalue_true_node;
! yyval.exprtype.value = build_conditional_expr (yyvsp[-6].exprtype.value, yyvsp[-3].exprtype.value,
! yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 83:
*************** yyreduce:
*** 3146,3176 ****
{ if (pedantic)
pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
/* Make sure first operand is calculated only once. */
! (yyvsp[0].ttype) = save_expr (default_conversion ((yyvsp[-1].exprtype).value));
! (yyvsp[-1].exprtype).value = lang_hooks.truthvalue_conversion ((yyvsp[0].ttype));
! skip_evaluation += (yyvsp[-1].exprtype).value == truthvalue_true_node; ;}
break;
case 84:
#line 601 "c-parse.y"
! { skip_evaluation -= (yyvsp[-4].exprtype).value == truthvalue_true_node;
! (yyval.exprtype).value = build_conditional_expr ((yyvsp[-4].exprtype).value, (yyvsp[-3].ttype),
! (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 85:
#line 606 "c-parse.y"
! { (yyval.exprtype).value = build_modify_expr ((yyvsp[-2].exprtype).value, NOP_EXPR, (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = MODIFY_EXPR;
;}
break;
case 86:
#line 610 "c-parse.y"
! { (yyval.exprtype).value = build_modify_expr ((yyvsp[-2].exprtype).value, (yyvsp[-1].code), (yyvsp[0].exprtype).value);
! TREE_NO_WARNING ((yyval.exprtype).value) = 1;
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
--- 3113,3143 ----
{ if (pedantic)
pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
/* Make sure first operand is calculated only once. */
! yyvsp[0].ttype = save_expr (default_conversion (yyvsp[-1].exprtype.value));
! yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
! skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_true_node; ;}
break;
case 84:
#line 601 "c-parse.y"
! { skip_evaluation -= yyvsp[-4].exprtype.value == truthvalue_true_node;
! yyval.exprtype.value = build_conditional_expr (yyvsp[-4].exprtype.value, yyvsp[-3].ttype,
! yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 85:
#line 606 "c-parse.y"
! { yyval.exprtype.value = build_modify_expr (yyvsp[-2].exprtype.value, NOP_EXPR, yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = MODIFY_EXPR;
;}
break;
case 86:
#line 610 "c-parse.y"
! { yyval.exprtype.value = build_modify_expr (yyvsp[-2].exprtype.value, yyvsp[-1].code, yyvsp[0].exprtype.value);
! TREE_NO_WARNING (yyval.exprtype.value) = 1;
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
*************** yyreduce:
*** 3179,3277 ****
{
if (yychar == YYEMPTY)
yychar = YYLEX;
! (yyval.exprtype).value = build_external_ref ((yyvsp[0].ttype), yychar == '(');
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 88:
#line 625 "c-parse.y"
! { (yyval.exprtype).value = (yyvsp[0].ttype); (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 89:
#line 627 "c-parse.y"
! { (yyval.exprtype).value = (yyvsp[0].ttype); (yyval.exprtype).original_code = STRING_CST; ;}
break;
case 90:
#line 629 "c-parse.y"
! { (yyval.exprtype).value = fname_decl (C_RID_CODE ((yyvsp[0].ttype)), (yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 91:
#line 632 "c-parse.y"
{ start_init (NULL_TREE, NULL, 0);
! (yyval.ttype) = groktypename ((yyvsp[-2].typenametype));
! if (C_TYPE_VARIABLE_SIZE ((yyval.ttype)))
{
error ("compound literal has variable size");
! (yyval.ttype) = error_mark_node;
}
! really_start_incremental_init ((yyval.ttype)); ;}
break;
case 92:
#line 641 "c-parse.y"
{ struct c_expr init = pop_init_level (0);
tree constructor = init.value;
! tree type = (yyvsp[-2].ttype);
finish_init ();
maybe_warn_string_init (type, init);
if (pedantic && !flag_isoc99)
pedwarn ("ISO C90 forbids compound literals");
! (yyval.exprtype).value = build_compound_literal (type, constructor);
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 93:
#line 653 "c-parse.y"
! { (yyval.exprtype).value = (yyvsp[-1].exprtype).value;
! if (TREE_CODE ((yyval.exprtype).value) == MODIFY_EXPR)
! TREE_NO_WARNING ((yyval.exprtype).value) = 1;
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 94:
#line 658 "c-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 95:
#line 660 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids braced-groups within expressions");
! (yyval.exprtype).value = c_finish_stmt_expr ((yyvsp[-2].ttype));
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 96:
#line 666 "c-parse.y"
! { c_finish_stmt_expr ((yyvsp[-2].ttype));
! (yyval.exprtype).value = error_mark_node;
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 97:
#line 671 "c-parse.y"
! { (yyval.exprtype).value = build_function_call ((yyvsp[-3].exprtype).value, (yyvsp[-1].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 98:
#line 674 "c-parse.y"
! { (yyval.exprtype).value = build_va_arg ((yyvsp[-3].exprtype).value, groktypename ((yyvsp[-1].typenametype)));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 99:
#line 678 "c-parse.y"
! { tree type = groktypename ((yyvsp[-1].typenametype));
if (type == error_mark_node)
offsetof_base = error_mark_node;
else
--- 3146,3244 ----
{
if (yychar == YYEMPTY)
yychar = YYLEX;
! yyval.exprtype.value = build_external_ref (yyvsp[0].ttype, yychar == '(');
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 88:
#line 625 "c-parse.y"
! { yyval.exprtype.value = yyvsp[0].ttype; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 89:
#line 627 "c-parse.y"
! { yyval.exprtype.value = yyvsp[0].ttype; yyval.exprtype.original_code = STRING_CST; ;}
break;
case 90:
#line 629 "c-parse.y"
! { yyval.exprtype.value = fname_decl (C_RID_CODE (yyvsp[0].ttype), yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 91:
#line 632 "c-parse.y"
{ start_init (NULL_TREE, NULL, 0);
! yyval.ttype = groktypename (yyvsp[-2].typenametype);
! if (C_TYPE_VARIABLE_SIZE (yyval.ttype))
{
error ("compound literal has variable size");
! yyval.ttype = error_mark_node;
}
! really_start_incremental_init (yyval.ttype); ;}
break;
case 92:
#line 641 "c-parse.y"
{ struct c_expr init = pop_init_level (0);
tree constructor = init.value;
! tree type = yyvsp[-2].ttype;
finish_init ();
maybe_warn_string_init (type, init);
if (pedantic && !flag_isoc99)
pedwarn ("ISO C90 forbids compound literals");
! yyval.exprtype.value = build_compound_literal (type, constructor);
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 93:
#line 653 "c-parse.y"
! { yyval.exprtype.value = yyvsp[-1].exprtype.value;
! if (TREE_CODE (yyval.exprtype.value) == MODIFY_EXPR)
! TREE_NO_WARNING (yyval.exprtype.value) = 1;
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 94:
#line 658 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 95:
#line 660 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids braced-groups within expressions");
! yyval.exprtype.value = c_finish_stmt_expr (yyvsp[-2].ttype);
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 96:
#line 666 "c-parse.y"
! { c_finish_stmt_expr (yyvsp[-2].ttype);
! yyval.exprtype.value = error_mark_node;
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 97:
#line 671 "c-parse.y"
! { yyval.exprtype.value = build_function_call (yyvsp[-3].exprtype.value, yyvsp[-1].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 98:
#line 674 "c-parse.y"
! { yyval.exprtype.value = build_va_arg (yyvsp[-3].exprtype.value, groktypename (yyvsp[-1].typenametype));
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 99:
#line 678 "c-parse.y"
! { tree type = groktypename (yyvsp[-1].typenametype);
if (type == error_mark_node)
offsetof_base = error_mark_node;
else
*************** yyreduce:
*** 3281,3293 ****
case 100:
#line 685 "c-parse.y"
! { (yyval.exprtype).value = fold_offsetof ((yyvsp[-1].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 101:
#line 688 "c-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 102:
--- 3248,3260 ----
case 100:
#line 685 "c-parse.y"
! { yyval.exprtype.value = fold_offsetof (yyvsp[-1].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 101:
#line 688 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 102:
*************** yyreduce:
*** 3295,3312 ****
{
tree c;
! c = fold ((yyvsp[-5].exprtype).value);
STRIP_NOPS (c);
if (TREE_CODE (c) != INTEGER_CST)
error ("first argument to %<__builtin_choose_expr%> not"
" a constant");
! (yyval.exprtype) = integer_zerop (c) ? (yyvsp[-1].exprtype) : (yyvsp[-3].exprtype);
;}
break;
case 103:
#line 702 "c-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 104:
--- 3262,3279 ----
{
tree c;
! c = fold (yyvsp[-5].exprtype.value);
STRIP_NOPS (c);
if (TREE_CODE (c) != INTEGER_CST)
error ("first argument to %<__builtin_choose_expr%> not"
" a constant");
! yyval.exprtype = integer_zerop (c) ? yyvsp[-1].exprtype : yyvsp[-3].exprtype;
;}
break;
case 103:
#line 702 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 104:
*************** yyreduce:
*** 3314,3380 ****
{
tree e1, e2;
! e1 = TYPE_MAIN_VARIANT (groktypename ((yyvsp[-3].typenametype)));
! e2 = TYPE_MAIN_VARIANT (groktypename ((yyvsp[-1].typenametype)));
! (yyval.exprtype).value = comptypes (e1, e2)
? build_int_cst (NULL_TREE, 1)
: build_int_cst (NULL_TREE, 0);
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 105:
#line 716 "c-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 106:
#line 718 "c-parse.y"
! { (yyval.exprtype).value = build_array_ref ((yyvsp[-3].exprtype).value, (yyvsp[-1].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 107:
#line 721 "c-parse.y"
! { (yyval.exprtype).value = build_component_ref ((yyvsp[-2].exprtype).value, (yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 108:
#line 724 "c-parse.y"
{
! tree expr = build_indirect_ref ((yyvsp[-2].exprtype).value, "->");
! (yyval.exprtype).value = build_component_ref (expr, (yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 109:
#line 730 "c-parse.y"
! { (yyval.exprtype).value = build_unary_op (POSTINCREMENT_EXPR, (yyvsp[-1].exprtype).value, 0);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 110:
#line 733 "c-parse.y"
! { (yyval.exprtype).value = build_unary_op (POSTDECREMENT_EXPR, (yyvsp[-1].exprtype).value, 0);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 111:
#line 743 "c-parse.y"
! { (yyval.ttype) = build_component_ref (offsetof_base, (yyvsp[0].ttype)); ;}
break;
case 112:
#line 745 "c-parse.y"
! { (yyval.ttype) = build_component_ref ((yyvsp[-2].ttype), (yyvsp[0].ttype)); ;}
break;
case 113:
#line 747 "c-parse.y"
! { (yyval.ttype) = build_array_ref ((yyvsp[-3].ttype), (yyvsp[-1].exprtype).value); ;}
break;
case 116:
--- 3281,3347 ----
{
tree e1, e2;
! e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].typenametype));
! e2 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-1].typenametype));
! yyval.exprtype.value = comptypes (e1, e2)
? build_int_cst (NULL_TREE, 1)
: build_int_cst (NULL_TREE, 0);
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 105:
#line 716 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 106:
#line 718 "c-parse.y"
! { yyval.exprtype.value = build_array_ref (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 107:
#line 721 "c-parse.y"
! { yyval.exprtype.value = build_component_ref (yyvsp[-2].exprtype.value, yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 108:
#line 724 "c-parse.y"
{
! tree expr = build_indirect_ref (yyvsp[-2].exprtype.value, "->");
! yyval.exprtype.value = build_component_ref (expr, yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 109:
#line 730 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].exprtype.value, 0);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 110:
#line 733 "c-parse.y"
! { yyval.exprtype.value = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].exprtype.value, 0);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 111:
#line 743 "c-parse.y"
! { yyval.ttype = build_component_ref (offsetof_base, yyvsp[0].ttype); ;}
break;
case 112:
#line 745 "c-parse.y"
! { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ;}
break;
case 113:
#line 747 "c-parse.y"
! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].exprtype.value); ;}
break;
case 116:
*************** yyreduce:
*** 3394,3400 ****
case 123:
#line 780 "c-parse.y"
! { shadow_tag_warned (finish_declspecs ((yyvsp[-1].dsptype)), 1);
pedwarn ("empty declaration"); ;}
break;
--- 3361,3367 ----
case 123:
#line 780 "c-parse.y"
! { shadow_tag_warned (finish_declspecs (yyvsp[-1].dsptype), 1);
pedwarn ("empty declaration"); ;}
break;
*************** yyreduce:
*** 3412,3422 ****
#line 800 "c-parse.y"
{ pending_xref_error ();
PUSH_DECLSPEC_STACK;
! if ((yyvsp[0].dsptype))
{
! prefix_attributes = (yyvsp[0].dsptype)->attrs;
! (yyvsp[0].dsptype)->attrs = NULL_TREE;
! current_declspecs = (yyvsp[0].dsptype);
}
else
{
--- 3379,3389 ----
#line 800 "c-parse.y"
{ pending_xref_error ();
PUSH_DECLSPEC_STACK;
! if (yyvsp[0].dsptype)
{
! prefix_attributes = yyvsp[0].dsptype->attrs;
! yyvsp[0].dsptype->attrs = NULL_TREE;
! current_declspecs = yyvsp[0].dsptype;
}
else
{
*************** yyreduce:
*** 3429,3435 ****
case 127:
#line 821 "c-parse.y"
! { all_prefix_attributes = chainon ((yyvsp[0].ttype), prefix_attributes); ;}
break;
case 128:
--- 3396,3402 ----
case 127:
#line 821 "c-parse.y"
! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;}
break;
case 128:
*************** yyreduce:
*** 3454,3887 ****
case 132:
#line 834 "c-parse.y"
! { shadow_tag (finish_declspecs ((yyvsp[-1].dsptype))); ;}
break;
case 133:
#line 836 "c-parse.y"
! { RESTORE_EXT_FLAGS ((yyvsp[-1].itype)); ;}
break;
case 134:
#line 882 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual (build_null_declspecs (), (yyvsp[0].ttype)); ;}
break;
case 135:
#line 884 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 136:
#line 886 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 137:
#line 891 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 138:
#line 896 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 139:
#line 898 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 140:
#line 903 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs (build_null_declspecs (), (yyvsp[0].ttype)); ;}
break;
case 141:
#line 905 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 142:
#line 910 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type (build_null_declspecs (), (yyvsp[0].tstype)); ;}
break;
case 143:
#line 912 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 144:
#line 914 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 145:
#line 916 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 146:
#line 918 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 147:
#line 920 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 148:
#line 922 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 149:
#line 927 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type (build_null_declspecs (), (yyvsp[0].tstype)); ;}
break;
case 150:
#line 929 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 151:
#line 931 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 152:
#line 933 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 153:
#line 935 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 154:
#line 937 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 155:
#line 942 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 156:
#line 944 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 157:
#line 946 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 158:
#line 948 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 159:
#line 950 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 160:
#line 952 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 161:
#line 957 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 162:
#line 959 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 163:
#line 961 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 164:
#line 963 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 165:
#line 965 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 166:
#line 970 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec (build_null_declspecs (), (yyvsp[0].ttype)); ;}
break;
case 167:
#line 972 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 168:
#line 974 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 169:
#line 976 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 170:
#line 978 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 171:
#line 980 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 172:
#line 982 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 173:
#line 987 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 174:
#line 992 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 175:
#line 994 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 176:
#line 996 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 177:
#line 998 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 178:
#line 1000 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 179:
#line 1002 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 180:
#line 1007 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 181:
#line 1012 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 182:
#line 1014 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 183:
#line 1016 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 184:
#line 1018 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 185:
#line 1020 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 186:
#line 1022 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 187:
#line 1024 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 188:
#line 1026 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 189:
#line 1028 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 190:
#line 1030 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 191:
#line 1035 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 192:
#line 1037 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 193:
#line 1039 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 194:
#line 1041 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 195:
#line 1043 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 196:
#line 1048 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 197:
#line 1050 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 198:
#line 1052 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 199:
#line 1054 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 200:
#line 1056 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 201:
#line 1058 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 202:
#line 1060 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 203:
#line 1062 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 204:
#line 1064 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 205:
#line 1066 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 206:
#line 1071 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 207:
#line 1073 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 208:
#line 1075 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 209:
#line 1077 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 210:
#line 1079 "c-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 267:
#line 1166 "c-parse.y"
! { (yyval.dsptype) = NULL; ;}
break;
case 268:
#line 1168 "c-parse.y"
! { (yyval.dsptype) = (yyvsp[0].dsptype); ;}
break;
case 272:
#line 1203 "c-parse.y"
{ OBJC_NEED_RAW_IDENTIFIER (1);
! (yyval.tstype).kind = ctsk_resword;
! (yyval.tstype).spec = (yyvsp[0].ttype); ;}
break;
case 275:
#line 1215 "c-parse.y"
{ /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
! (yyval.tstype).kind = ctsk_typedef;
! (yyval.tstype).spec = lookup_name ((yyvsp[0].ttype)); ;}
break;
case 276:
#line 1220 "c-parse.y"
{ skip_evaluation--;
in_typeof--;
! if (TREE_CODE ((yyvsp[-1].exprtype).value) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND ((yyvsp[-1].exprtype).value, 1)))
error ("% applied to a bit-field");
! (yyval.tstype).kind = ctsk_typeof;
! (yyval.tstype).spec = TREE_TYPE ((yyvsp[-1].exprtype).value);
! pop_maybe_used (variably_modified_type_p ((yyval.tstype).spec,
NULL_TREE)); ;}
break;
--- 3421,3854 ----
case 132:
#line 834 "c-parse.y"
! { shadow_tag (finish_declspecs (yyvsp[-1].dsptype)); ;}
break;
case 133:
#line 836 "c-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;}
break;
case 134:
#line 882 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (build_null_declspecs (), yyvsp[0].ttype); ;}
break;
case 135:
#line 884 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 136:
#line 886 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 137:
#line 891 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 138:
#line 896 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 139:
#line 898 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 140:
#line 903 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (build_null_declspecs (), yyvsp[0].ttype); ;}
break;
case 141:
#line 905 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 142:
#line 910 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (build_null_declspecs (), yyvsp[0].tstype); ;}
break;
case 143:
#line 912 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 144:
#line 914 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 145:
#line 916 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 146:
#line 918 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 147:
#line 920 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 148:
#line 922 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 149:
#line 927 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (build_null_declspecs (), yyvsp[0].tstype); ;}
break;
case 150:
#line 929 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 151:
#line 931 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 152:
#line 933 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 153:
#line 935 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 154:
#line 937 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 155:
#line 942 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 156:
#line 944 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 157:
#line 946 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 158:
#line 948 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 159:
#line 950 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 160:
#line 952 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 161:
#line 957 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 162:
#line 959 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 163:
#line 961 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 164:
#line 963 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 165:
#line 965 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 166:
#line 970 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (build_null_declspecs (), yyvsp[0].ttype); ;}
break;
case 167:
#line 972 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 168:
#line 974 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 169:
#line 976 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 170:
#line 978 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 171:
#line 980 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 172:
#line 982 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 173:
#line 987 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 174:
#line 992 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 175:
#line 994 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 176:
#line 996 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 177:
#line 998 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 178:
#line 1000 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 179:
#line 1002 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 180:
#line 1007 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 181:
#line 1012 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 182:
#line 1014 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 183:
#line 1016 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 184:
#line 1018 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 185:
#line 1020 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 186:
#line 1022 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 187:
#line 1024 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 188:
#line 1026 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 189:
#line 1028 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 190:
#line 1030 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 191:
#line 1035 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 192:
#line 1037 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 193:
#line 1039 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 194:
#line 1041 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 195:
#line 1043 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 196:
#line 1048 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 197:
#line 1050 "c-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 198:
#line 1052 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 199:
#line 1054 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 200:
#line 1056 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 201:
#line 1058 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 202:
#line 1060 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 203:
#line 1062 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 204:
#line 1064 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 205:
#line 1066 "c-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 206:
#line 1071 "c-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 207:
#line 1073 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 208:
#line 1075 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 209:
#line 1077 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 210:
#line 1079 "c-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 267:
#line 1166 "c-parse.y"
! { yyval.dsptype = NULL; ;}
break;
case 268:
#line 1168 "c-parse.y"
! { yyval.dsptype = yyvsp[0].dsptype; ;}
break;
case 272:
#line 1203 "c-parse.y"
{ OBJC_NEED_RAW_IDENTIFIER (1);
! yyval.tstype.kind = ctsk_resword;
! yyval.tstype.spec = yyvsp[0].ttype; ;}
break;
case 275:
#line 1215 "c-parse.y"
{ /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
! yyval.tstype.kind = ctsk_typedef;
! yyval.tstype.spec = lookup_name (yyvsp[0].ttype); ;}
break;
case 276:
#line 1220 "c-parse.y"
{ skip_evaluation--;
in_typeof--;
! if (TREE_CODE (yyvsp[-1].exprtype.value) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[-1].exprtype.value, 1)))
error ("% applied to a bit-field");
! yyval.tstype.kind = ctsk_typeof;
! yyval.tstype.spec = TREE_TYPE (yyvsp[-1].exprtype.value);
! pop_maybe_used (variably_modified_type_p (yyval.tstype.spec,
NULL_TREE)); ;}
break;
*************** yyreduce:
*** 3889,4025 ****
#line 1230 "c-parse.y"
{ skip_evaluation--;
in_typeof--;
! (yyval.tstype).kind = ctsk_typeof;
! (yyval.tstype).spec = groktypename ((yyvsp[-1].typenametype));
! pop_maybe_used (variably_modified_type_p ((yyval.tstype).spec,
NULL_TREE)); ;}
break;
case 282:
#line 1252 "c-parse.y"
! { (yyval.ttype) = start_decl ((yyvsp[-3].dtrtype), current_declspecs, true,
! chainon ((yyvsp[-1].ttype), all_prefix_attributes));
! if (!(yyval.ttype))
! (yyval.ttype) = error_mark_node;
! start_init ((yyval.ttype), (yyvsp[-2].ttype), global_bindings_p ()); ;}
break;
case 283:
#line 1259 "c-parse.y"
{ finish_init ();
! if ((yyvsp[-1].ttype) != error_mark_node)
{
! maybe_warn_string_init (TREE_TYPE ((yyvsp[-1].ttype)), (yyvsp[0].exprtype));
! finish_decl ((yyvsp[-1].ttype), (yyvsp[0].exprtype).value, (yyvsp[-4].ttype));
}
;}
break;
case 284:
#line 1267 "c-parse.y"
! { tree d = start_decl ((yyvsp[-2].dtrtype), current_declspecs, false,
! chainon ((yyvsp[0].ttype), all_prefix_attributes));
if (d)
! finish_decl (d, NULL_TREE, (yyvsp[-1].ttype));
;}
break;
case 285:
#line 1276 "c-parse.y"
! { (yyval.ttype) = start_decl ((yyvsp[-3].dtrtype), current_declspecs, true,
! chainon ((yyvsp[-1].ttype), all_prefix_attributes));
! if (!(yyval.ttype))
! (yyval.ttype) = error_mark_node;
! start_init ((yyval.ttype), (yyvsp[-2].ttype), global_bindings_p ()); ;}
break;
case 286:
#line 1283 "c-parse.y"
{ finish_init ();
! if ((yyvsp[-1].ttype) != error_mark_node)
{
! maybe_warn_string_init (TREE_TYPE ((yyvsp[-1].ttype)), (yyvsp[0].exprtype));
! finish_decl ((yyvsp[-1].ttype), (yyvsp[0].exprtype).value, (yyvsp[-4].ttype));
}
;}
break;
case 287:
#line 1291 "c-parse.y"
! { tree d = start_decl ((yyvsp[-2].dtrtype), current_declspecs, false,
! chainon ((yyvsp[0].ttype), all_prefix_attributes));
if (d)
! finish_decl (d, NULL_TREE, (yyvsp[-1].ttype)); ;}
break;
case 288:
#line 1300 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 289:
#line 1302 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 290:
#line 1307 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 291:
#line 1309 "c-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-1].ttype), (yyvsp[0].ttype)); ;}
break;
case 292:
#line 1315 "c-parse.y"
! { (yyval.ttype) = (yyvsp[-3].ttype); ;}
break;
case 293:
#line 1317 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 294:
#line 1322 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 295:
#line 1324 "c-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), (yyvsp[0].ttype)); ;}
break;
case 296:
#line 1329 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 297:
#line 1331 "c-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[0].ttype), NULL_TREE); ;}
break;
case 298:
#line 1333 "c-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[-3].ttype), build_tree_list (NULL_TREE, (yyvsp[-1].ttype))); ;}
break;
case 299:
#line 1335 "c-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[-5].ttype), tree_cons (NULL_TREE, (yyvsp[-3].ttype), (yyvsp[-1].ttype))); ;}
break;
case 300:
#line 1337 "c-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[-3].ttype), (yyvsp[-1].ttype)); ;}
break;
case 307:
#line 1359 "c-parse.y"
! { (yyval.exprtype) = (yyvsp[0].exprtype); ;}
break;
case 308:
--- 3856,3992 ----
#line 1230 "c-parse.y"
{ skip_evaluation--;
in_typeof--;
! yyval.tstype.kind = ctsk_typeof;
! yyval.tstype.spec = groktypename (yyvsp[-1].typenametype);
! pop_maybe_used (variably_modified_type_p (yyval.tstype.spec,
NULL_TREE)); ;}
break;
case 282:
#line 1252 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].dtrtype, current_declspecs, true,
! chainon (yyvsp[-1].ttype, all_prefix_attributes));
! if (!yyval.ttype)
! yyval.ttype = error_mark_node;
! start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;}
break;
case 283:
#line 1259 "c-parse.y"
{ finish_init ();
! if (yyvsp[-1].ttype != error_mark_node)
{
! maybe_warn_string_init (TREE_TYPE (yyvsp[-1].ttype), yyvsp[0].exprtype);
! finish_decl (yyvsp[-1].ttype, yyvsp[0].exprtype.value, yyvsp[-4].ttype);
}
;}
break;
case 284:
#line 1267 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].dtrtype, current_declspecs, false,
! chainon (yyvsp[0].ttype, all_prefix_attributes));
if (d)
! finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
;}
break;
case 285:
#line 1276 "c-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].dtrtype, current_declspecs, true,
! chainon (yyvsp[-1].ttype, all_prefix_attributes));
! if (!yyval.ttype)
! yyval.ttype = error_mark_node;
! start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;}
break;
case 286:
#line 1283 "c-parse.y"
{ finish_init ();
! if (yyvsp[-1].ttype != error_mark_node)
{
! maybe_warn_string_init (TREE_TYPE (yyvsp[-1].ttype), yyvsp[0].exprtype);
! finish_decl (yyvsp[-1].ttype, yyvsp[0].exprtype.value, yyvsp[-4].ttype);
}
;}
break;
case 287:
#line 1291 "c-parse.y"
! { tree d = start_decl (yyvsp[-2].dtrtype, current_declspecs, false,
! chainon (yyvsp[0].ttype, all_prefix_attributes));
if (d)
! finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;}
break;
case 288:
#line 1300 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 289:
#line 1302 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 290:
#line 1307 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 291:
#line 1309 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;}
break;
case 292:
#line 1315 "c-parse.y"
! { yyval.ttype = yyvsp[-3].ttype; ;}
break;
case 293:
#line 1317 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 294:
#line 1322 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 295:
#line 1324 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;}
break;
case 296:
#line 1329 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 297:
#line 1331 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;}
break;
case 298:
#line 1333 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;}
break;
case 299:
#line 1335 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;}
break;
case 300:
#line 1337 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;}
break;
case 307:
#line 1359 "c-parse.y"
! { yyval.exprtype = yyvsp[0].exprtype; ;}
break;
case 308:
*************** yyreduce:
*** 4029,4040 ****
case 309:
#line 1363 "c-parse.y"
! { (yyval.exprtype) = pop_init_level (0); ;}
break;
case 310:
#line 1365 "c-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 311:
--- 3996,4007 ----
case 309:
#line 1363 "c-parse.y"
! { yyval.exprtype = pop_init_level (0); ;}
break;
case 310:
#line 1365 "c-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 311:
*************** yyreduce:
*** 4057,4063 ****
case 317:
#line 1391 "c-parse.y"
! { set_init_label ((yyvsp[-1].ttype));
if (pedantic)
pedwarn ("obsolete use of designated initializer with %<:%>"); ;}
break;
--- 4024,4030 ----
case 317:
#line 1391 "c-parse.y"
! { set_init_label (yyvsp[-1].ttype);
if (pedantic)
pedwarn ("obsolete use of designated initializer with %<:%>"); ;}
break;
*************** yyreduce:
*** 4079,4102 ****
case 322:
#line 1405 "c-parse.y"
! { process_init_element ((yyvsp[0].exprtype)); ;}
break;
case 326:
#line 1416 "c-parse.y"
! { set_init_label ((yyvsp[0].ttype)); ;}
break;
case 328:
#line 1422 "c-parse.y"
! { set_init_index ((yyvsp[-3].exprtype).value, (yyvsp[-1].exprtype).value);
if (pedantic)
pedwarn ("ISO C forbids specifying range of elements to initialize"); ;}
break;
case 329:
#line 1426 "c-parse.y"
! { set_init_index ((yyvsp[-1].exprtype).value, NULL_TREE); ;}
break;
case 330:
--- 4046,4069 ----
case 322:
#line 1405 "c-parse.y"
! { process_init_element (yyvsp[0].exprtype); ;}
break;
case 326:
#line 1416 "c-parse.y"
! { set_init_label (yyvsp[0].ttype); ;}
break;
case 328:
#line 1422 "c-parse.y"
! { set_init_index (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value);
if (pedantic)
pedwarn ("ISO C forbids specifying range of elements to initialize"); ;}
break;
case 329:
#line 1426 "c-parse.y"
! { set_init_index (yyvsp[-1].exprtype.value, NULL_TREE); ;}
break;
case 330:
*************** yyreduce:
*** 4105,4111 ****
pedwarn ("ISO C forbids nested functions");
push_function_context ();
! if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
{
pop_function_context ();
--- 4072,4078 ----
pedwarn ("ISO C forbids nested functions");
push_function_context ();
! if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
{
pop_function_context ();
*************** yyreduce:
*** 4117,4130 ****
case 331:
#line 1443 "c-parse.y"
{ tree decl = current_function_decl;
! DECL_SOURCE_LOCATION (decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
case 332:
#line 1452 "c-parse.y"
{ tree decl = current_function_decl;
! add_stmt ((yyvsp[0].ttype));
finish_function ();
pop_function_context ();
add_stmt (build_stmt (DECL_EXPR, decl)); ;}
--- 4084,4097 ----
case 331:
#line 1443 "c-parse.y"
{ tree decl = current_function_decl;
! DECL_SOURCE_LOCATION (decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
case 332:
#line 1452 "c-parse.y"
{ tree decl = current_function_decl;
! add_stmt (yyvsp[0].ttype);
finish_function ();
pop_function_context ();
add_stmt (build_stmt (DECL_EXPR, decl)); ;}
*************** yyreduce:
*** 4136,4142 ****
pedwarn ("ISO C forbids nested functions");
push_function_context ();
! if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
{
pop_function_context ();
--- 4103,4109 ----
pedwarn ("ISO C forbids nested functions");
push_function_context ();
! if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
{
pop_function_context ();
*************** yyreduce:
*** 4148,4161 ****
case 334:
#line 1473 "c-parse.y"
{ tree decl = current_function_decl;
! DECL_SOURCE_LOCATION (decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
case 335:
#line 1482 "c-parse.y"
{ tree decl = current_function_decl;
! add_stmt ((yyvsp[0].ttype));
finish_function ();
pop_function_context ();
add_stmt (build_stmt (DECL_EXPR, decl)); ;}
--- 4115,4128 ----
case 334:
#line 1473 "c-parse.y"
{ tree decl = current_function_decl;
! DECL_SOURCE_LOCATION (decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
case 335:
#line 1482 "c-parse.y"
{ tree decl = current_function_decl;
! add_stmt (yyvsp[0].ttype);
finish_function ();
pop_function_context ();
add_stmt (build_stmt (DECL_EXPR, decl)); ;}
*************** yyreduce:
*** 4163,4370 ****
case 338:
#line 1501 "c-parse.y"
! { (yyval.dtrtype) = (yyvsp[-2].ttype) ? build_attrs_declarator ((yyvsp[-2].ttype), (yyvsp[-1].dtrtype)) : (yyvsp[-1].dtrtype); ;}
break;
case 339:
#line 1503 "c-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 340:
#line 1505 "c-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), false); ;}
break;
case 341:
#line 1507 "c-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 342:
#line 1509 "c-parse.y"
! { (yyval.dtrtype) = build_id_declarator ((yyvsp[0].ttype)); ;}
break;
case 345:
#line 1523 "c-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 346:
#line 1525 "c-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), false); ;}
break;
case 347:
#line 1527 "c-parse.y"
! { (yyval.dtrtype) = build_id_declarator ((yyvsp[0].ttype)); ;}
break;
case 348:
#line 1532 "c-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 349:
#line 1534 "c-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), false); ;}
break;
case 350:
#line 1536 "c-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 351:
#line 1538 "c-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 352:
#line 1540 "c-parse.y"
! { (yyval.dtrtype) = (yyvsp[-2].ttype) ? build_attrs_declarator ((yyvsp[-2].ttype), (yyvsp[-1].dtrtype)) : (yyvsp[-1].dtrtype); ;}
break;
case 353:
#line 1548 "c-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 354:
#line 1550 "c-parse.y"
! { (yyval.dtrtype) = (yyvsp[-2].ttype) ? build_attrs_declarator ((yyvsp[-2].ttype), (yyvsp[-1].dtrtype)) : (yyvsp[-1].dtrtype); ;}
break;
case 355:
#line 1552 "c-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 356:
#line 1554 "c-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), false); ;}
break;
case 357:
#line 1556 "c-parse.y"
! { (yyval.dtrtype) = build_id_declarator ((yyvsp[0].ttype)); ;}
break;
case 358:
#line 1561 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 359:
#line 1563 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 360:
#line 1568 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 361:
#line 1570 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 362:
#line 1575 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 363:
#line 1577 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 364:
#line 1588 "c-parse.y"
! { (yyval.ttype) = start_struct (RECORD_TYPE, (yyvsp[-1].ttype));
/* Start scope of tag before parsing components. */
;}
break;
case 365:
#line 1592 "c-parse.y"
! { (yyval.tstype).spec = finish_struct ((yyvsp[-3].ttype), nreverse ((yyvsp[-2].ttype)),
! chainon ((yyvsp[-6].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef; ;}
break;
case 366:
#line 1596 "c-parse.y"
! { (yyval.tstype).spec = finish_struct (start_struct (RECORD_TYPE,
NULL_TREE),
! nreverse ((yyvsp[-2].ttype)), chainon ((yyvsp[-4].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef;
;}
break;
case 367:
#line 1602 "c-parse.y"
! { (yyval.ttype) = start_struct (UNION_TYPE, (yyvsp[-1].ttype)); ;}
break;
case 368:
#line 1604 "c-parse.y"
! { (yyval.tstype).spec = finish_struct ((yyvsp[-3].ttype), nreverse ((yyvsp[-2].ttype)),
! chainon ((yyvsp[-6].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef; ;}
break;
case 369:
#line 1608 "c-parse.y"
! { (yyval.tstype).spec = finish_struct (start_struct (UNION_TYPE,
NULL_TREE),
! nreverse ((yyvsp[-2].ttype)), chainon ((yyvsp[-4].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef;
;}
break;
case 370:
#line 1614 "c-parse.y"
! { (yyval.ttype) = start_enum ((yyvsp[-1].ttype)); ;}
break;
case 371:
#line 1616 "c-parse.y"
! { (yyval.tstype).spec = finish_enum ((yyvsp[-4].ttype), nreverse ((yyvsp[-3].ttype)),
! chainon ((yyvsp[-7].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef; ;}
break;
case 372:
#line 1620 "c-parse.y"
! { (yyval.ttype) = start_enum (NULL_TREE); ;}
break;
case 373:
#line 1622 "c-parse.y"
! { (yyval.tstype).spec = finish_enum ((yyvsp[-4].ttype), nreverse ((yyvsp[-3].ttype)),
! chainon ((yyvsp[-6].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef; ;}
break;
case 374:
#line 1629 "c-parse.y"
! { (yyval.tstype) = parser_xref_tag (RECORD_TYPE, (yyvsp[0].ttype)); ;}
break;
case 375:
#line 1631 "c-parse.y"
! { (yyval.tstype) = parser_xref_tag (UNION_TYPE, (yyvsp[0].ttype)); ;}
break;
case 376:
#line 1633 "c-parse.y"
! { (yyval.tstype) = parser_xref_tag (ENUMERAL_TYPE, (yyvsp[0].ttype));
/* In ISO C, enumerated types can be referred to
only if already defined. */
! if (pedantic && !COMPLETE_TYPE_P ((yyval.tstype).spec))
pedwarn ("ISO C forbids forward references to % types"); ;}
break;
--- 4130,4337 ----
case 338:
#line 1501 "c-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;}
break;
case 339:
#line 1503 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 340:
#line 1505 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;}
break;
case 341:
#line 1507 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 342:
#line 1509 "c-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;}
break;
case 345:
#line 1523 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 346:
#line 1525 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;}
break;
case 347:
#line 1527 "c-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;}
break;
case 348:
#line 1532 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 349:
#line 1534 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;}
break;
case 350:
#line 1536 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 351:
#line 1538 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 352:
#line 1540 "c-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;}
break;
case 353:
#line 1548 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 354:
#line 1550 "c-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;}
break;
case 355:
#line 1552 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 356:
#line 1554 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;}
break;
case 357:
#line 1556 "c-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;}
break;
case 358:
#line 1561 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 359:
#line 1563 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 360:
#line 1568 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 361:
#line 1570 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 362:
#line 1575 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 363:
#line 1577 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 364:
#line 1588 "c-parse.y"
! { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
/* Start scope of tag before parsing components. */
;}
break;
case 365:
#line 1592 "c-parse.y"
! { yyval.tstype.spec = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
! chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef; ;}
break;
case 366:
#line 1596 "c-parse.y"
! { yyval.tstype.spec = finish_struct (start_struct (RECORD_TYPE,
NULL_TREE),
! nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef;
;}
break;
case 367:
#line 1602 "c-parse.y"
! { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;}
break;
case 368:
#line 1604 "c-parse.y"
! { yyval.tstype.spec = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
! chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef; ;}
break;
case 369:
#line 1608 "c-parse.y"
! { yyval.tstype.spec = finish_struct (start_struct (UNION_TYPE,
NULL_TREE),
! nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef;
;}
break;
case 370:
#line 1614 "c-parse.y"
! { yyval.ttype = start_enum (yyvsp[-1].ttype); ;}
break;
case 371:
#line 1616 "c-parse.y"
! { yyval.tstype.spec = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! chainon (yyvsp[-7].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef; ;}
break;
case 372:
#line 1620 "c-parse.y"
! { yyval.ttype = start_enum (NULL_TREE); ;}
break;
case 373:
#line 1622 "c-parse.y"
! { yyval.tstype.spec = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef; ;}
break;
case 374:
#line 1629 "c-parse.y"
! { yyval.tstype = parser_xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;}
break;
case 375:
#line 1631 "c-parse.y"
! { yyval.tstype = parser_xref_tag (UNION_TYPE, yyvsp[0].ttype); ;}
break;
case 376:
#line 1633 "c-parse.y"
! { yyval.tstype = parser_xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
/* In ISO C, enumerated types can be referred to
only if already defined. */
! if (pedantic && !COMPLETE_TYPE_P (yyval.tstype.spec))
pedwarn ("ISO C forbids forward references to % types"); ;}
break;
*************** yyreduce:
*** 4376,4398 ****
case 381:
#line 1666 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 382:
#line 1668 "c-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[0].ttype), (yyvsp[-1].ttype));
pedwarn ("no semicolon at end of struct or union"); ;}
break;
case 383:
#line 1673 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 384:
#line 1675 "c-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-1].ttype), (yyvsp[-2].ttype)); ;}
break;
case 385:
--- 4343,4365 ----
case 381:
#line 1666 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 382:
#line 1668 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype);
pedwarn ("no semicolon at end of struct or union"); ;}
break;
case 383:
#line 1673 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 384:
#line 1675 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[-2].ttype); ;}
break;
case 385:
*************** yyreduce:
*** 4403,4409 ****
case 386:
#line 1683 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype);
POP_DECLSPEC_STACK; ;}
break;
--- 4370,4376 ----
case 386:
#line 1683 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;}
break;
*************** yyreduce:
*** 4413,4426 ****
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
MS P-SDK). */
! (yyval.ttype) = grokfield (build_id_declarator (NULL_TREE),
current_declspecs, NULL_TREE);
POP_DECLSPEC_STACK; ;}
break;
case 388:
#line 1694 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype);
POP_DECLSPEC_STACK; ;}
break;
--- 4380,4393 ----
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
MS P-SDK). */
! yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
current_declspecs, NULL_TREE);
POP_DECLSPEC_STACK; ;}
break;
case 388:
#line 1694 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;}
break;
*************** yyreduce:
*** 4428,4628 ****
#line 1697 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids member declarations with no members");
! shadow_tag_warned (finish_declspecs ((yyvsp[0].dsptype)), pedantic);
! (yyval.ttype) = NULL_TREE; ;}
break;
case 390:
#line 1702 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 391:
#line 1704 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype);
! RESTORE_EXT_FLAGS ((yyvsp[-1].itype)); ;}
break;
case 393:
#line 1711 "c-parse.y"
! { TREE_CHAIN ((yyvsp[0].ttype)) = (yyvsp[-3].ttype); (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 395:
#line 1717 "c-parse.y"
! { TREE_CHAIN ((yyvsp[0].ttype)) = (yyvsp[-3].ttype); (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 396:
#line 1722 "c-parse.y"
! { (yyval.ttype) = grokfield ((yyvsp[-1].dtrtype), current_declspecs, NULL_TREE);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 397:
#line 1726 "c-parse.y"
! { (yyval.ttype) = grokfield ((yyvsp[-3].dtrtype), current_declspecs, (yyvsp[-1].exprtype).value);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 398:
#line 1730 "c-parse.y"
! { (yyval.ttype) = grokfield (build_id_declarator (NULL_TREE),
! current_declspecs, (yyvsp[-1].exprtype).value);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 399:
#line 1738 "c-parse.y"
! { (yyval.ttype) = grokfield ((yyvsp[-1].dtrtype), current_declspecs, NULL_TREE);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 400:
#line 1742 "c-parse.y"
! { (yyval.ttype) = grokfield ((yyvsp[-3].dtrtype), current_declspecs, (yyvsp[-1].exprtype).value);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 401:
#line 1746 "c-parse.y"
! { (yyval.ttype) = grokfield (build_id_declarator (NULL_TREE),
! current_declspecs, (yyvsp[-1].exprtype).value);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 403:
#line 1758 "c-parse.y"
! { if ((yyvsp[-2].ttype) == error_mark_node)
! (yyval.ttype) = (yyvsp[-2].ttype);
else
! TREE_CHAIN ((yyvsp[0].ttype)) = (yyvsp[-2].ttype), (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 404:
#line 1763 "c-parse.y"
! { (yyval.ttype) = error_mark_node; ;}
break;
case 405:
#line 1769 "c-parse.y"
! { (yyval.ttype) = build_enumerator ((yyvsp[0].ttype), NULL_TREE); ;}
break;
case 406:
#line 1771 "c-parse.y"
! { (yyval.ttype) = build_enumerator ((yyvsp[-2].ttype), (yyvsp[0].exprtype).value); ;}
break;
case 407:
#line 1776 "c-parse.y"
{ pending_xref_error ();
! (yyval.dsptype) = finish_declspecs ((yyvsp[0].dsptype)); ;}
break;
case 408:
#line 1779 "c-parse.y"
! { (yyval.typenametype) = XOBNEW (&parser_obstack, struct c_type_name);
! (yyval.typenametype)->specs = (yyvsp[-1].dsptype);
! (yyval.typenametype)->declarator = (yyvsp[0].dtrtype); ;}
break;
case 409:
#line 1786 "c-parse.y"
! { (yyval.dtrtype) = build_id_declarator (NULL_TREE); ;}
break;
case 411:
#line 1792 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs, all_prefix_attributes,
build_id_declarator (NULL_TREE)); ;}
break;
case 412:
#line 1795 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs, all_prefix_attributes,
! (yyvsp[0].dtrtype)); ;}
break;
case 413:
#line 1798 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes),
! (yyvsp[-1].dtrtype)); ;}
break;
case 417:
#line 1811 "c-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 418:
#line 1816 "c-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator
! ((yyvsp[0].dsptype), build_id_declarator (NULL_TREE)); ;}
break;
case 419:
#line 1819 "c-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 420:
#line 1824 "c-parse.y"
! { (yyval.dtrtype) = (yyvsp[-2].ttype) ? build_attrs_declarator ((yyvsp[-2].ttype), (yyvsp[-1].dtrtype)) : (yyvsp[-1].dtrtype); ;}
break;
case 421:
#line 1826 "c-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 422:
#line 1828 "c-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), true); ;}
break;
case 423:
#line 1830 "c-parse.y"
! { (yyval.dtrtype) = build_function_declarator
! ((yyvsp[0].arginfotype), build_id_declarator (NULL_TREE)); ;}
break;
case 424:
#line 1833 "c-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner
! ((yyvsp[0].dtrtype), build_id_declarator (NULL_TREE), true); ;}
break;
case 425:
#line 1841 "c-parse.y"
! { (yyval.dtrtype) = build_array_declarator ((yyvsp[-1].exprtype).value, (yyvsp[-2].dsptype), false, false); ;}
break;
case 426:
#line 1843 "c-parse.y"
! { (yyval.dtrtype) = build_array_declarator (NULL_TREE, (yyvsp[-1].dsptype), false, false); ;}
break;
case 427:
#line 1845 "c-parse.y"
! { (yyval.dtrtype) = build_array_declarator (NULL_TREE, (yyvsp[-2].dsptype), false, true); ;}
break;
case 428:
#line 1847 "c-parse.y"
! { (yyval.dtrtype) = build_array_declarator ((yyvsp[-1].exprtype).value, (yyvsp[-2].dsptype), true, false); ;}
break;
case 429:
#line 1850 "c-parse.y"
! { (yyval.dtrtype) = build_array_declarator ((yyvsp[-1].exprtype).value, (yyvsp[-3].dsptype), true, false); ;}
break;
case 432:
--- 4395,4595 ----
#line 1697 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids member declarations with no members");
! shadow_tag_warned (finish_declspecs (yyvsp[0].dsptype), pedantic);
! yyval.ttype = NULL_TREE; ;}
break;
case 390:
#line 1702 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 391:
#line 1704 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;}
break;
case 393:
#line 1711 "c-parse.y"
! { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;}
break;
case 395:
#line 1717 "c-parse.y"
! { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;}
break;
case 396:
#line 1722 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-1].dtrtype, current_declspecs, NULL_TREE);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 397:
#line 1726 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].dtrtype, current_declspecs, yyvsp[-1].exprtype.value);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 398:
#line 1730 "c-parse.y"
! { yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
! current_declspecs, yyvsp[-1].exprtype.value);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 399:
#line 1738 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-1].dtrtype, current_declspecs, NULL_TREE);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 400:
#line 1742 "c-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].dtrtype, current_declspecs, yyvsp[-1].exprtype.value);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 401:
#line 1746 "c-parse.y"
! { yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
! current_declspecs, yyvsp[-1].exprtype.value);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 403:
#line 1758 "c-parse.y"
! { if (yyvsp[-2].ttype == error_mark_node)
! yyval.ttype = yyvsp[-2].ttype;
else
! TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-2].ttype, yyval.ttype = yyvsp[0].ttype; ;}
break;
case 404:
#line 1763 "c-parse.y"
! { yyval.ttype = error_mark_node; ;}
break;
case 405:
#line 1769 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;}
break;
case 406:
#line 1771 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].exprtype.value); ;}
break;
case 407:
#line 1776 "c-parse.y"
{ pending_xref_error ();
! yyval.dsptype = finish_declspecs (yyvsp[0].dsptype); ;}
break;
case 408:
#line 1779 "c-parse.y"
! { yyval.typenametype = XOBNEW (&parser_obstack, struct c_type_name);
! yyval.typenametype->specs = yyvsp[-1].dsptype;
! yyval.typenametype->declarator = yyvsp[0].dtrtype; ;}
break;
case 409:
#line 1786 "c-parse.y"
! { yyval.dtrtype = build_id_declarator (NULL_TREE); ;}
break;
case 411:
#line 1792 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs, all_prefix_attributes,
build_id_declarator (NULL_TREE)); ;}
break;
case 412:
#line 1795 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs, all_prefix_attributes,
! yyvsp[0].dtrtype); ;}
break;
case 413:
#line 1798 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes),
! yyvsp[-1].dtrtype); ;}
break;
case 417:
#line 1811 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 418:
#line 1816 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator
! (yyvsp[0].dsptype, build_id_declarator (NULL_TREE)); ;}
break;
case 419:
#line 1819 "c-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 420:
#line 1824 "c-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;}
break;
case 421:
#line 1826 "c-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 422:
#line 1828 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, true); ;}
break;
case 423:
#line 1830 "c-parse.y"
! { yyval.dtrtype = build_function_declarator
! (yyvsp[0].arginfotype, build_id_declarator (NULL_TREE)); ;}
break;
case 424:
#line 1833 "c-parse.y"
! { yyval.dtrtype = set_array_declarator_inner
! (yyvsp[0].dtrtype, build_id_declarator (NULL_TREE), true); ;}
break;
case 425:
#line 1841 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-2].dsptype, false, false); ;}
break;
case 426:
#line 1843 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (NULL_TREE, yyvsp[-1].dsptype, false, false); ;}
break;
case 427:
#line 1845 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (NULL_TREE, yyvsp[-2].dsptype, false, true); ;}
break;
case 428:
#line 1847 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-2].dsptype, true, false); ;}
break;
case 429:
#line 1850 "c-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-3].dsptype, true, false); ;}
break;
case 432:
*************** yyreduce:
*** 4643,4649 ****
case 455:
#line 1914 "c-parse.y"
! { (yyval.ttype) = c_begin_compound_stmt (flag_isoc99); ;}
break;
case 457:
--- 4610,4616 ----
case 455:
#line 1914 "c-parse.y"
! { yyval.ttype = c_begin_compound_stmt (flag_isoc99); ;}
break;
case 457:
*************** yyreduce:
*** 4655,4661 ****
case 460:
#line 1933 "c-parse.y"
{ tree link;
! for (link = (yyvsp[-1].ttype); link; link = TREE_CHAIN (link))
{
tree label = declare_label (TREE_VALUE (link));
C_DECLARED_LABEL_FLAG (label) = 1;
--- 4622,4628 ----
case 460:
#line 1933 "c-parse.y"
{ tree link;
! for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
{
tree label = declare_label (TREE_VALUE (link));
C_DECLARED_LABEL_FLAG (label) = 1;
*************** yyreduce:
*** 4666,4677 ****
case 461:
#line 1947 "c-parse.y"
! { add_stmt ((yyvsp[0].ttype)); ;}
break;
case 463:
#line 1951 "c-parse.y"
! { (yyval.ttype) = c_begin_compound_stmt (true); ;}
break;
case 468:
--- 4633,4644 ----
case 461:
#line 1947 "c-parse.y"
! { add_stmt (yyvsp[0].ttype); ;}
break;
case 463:
#line 1951 "c-parse.y"
! { yyval.ttype = c_begin_compound_stmt (true); ;}
break;
case 468:
*************** yyreduce:
*** 4682,4706 ****
"only inside a function");
YYERROR;
}
! (yyval.ttype) = c_begin_stmt_expr ();
;}
break;
case 469:
#line 1976 "c-parse.y"
! { (yyval.ttype) = c_end_compound_stmt ((yyvsp[-1].ttype), true); ;}
break;
case 470:
#line 1984 "c-parse.y"
{ if (yychar == YYEMPTY)
yychar = YYLEX;
! (yyval.location) = input_location; ;}
break;
case 473:
#line 1997 "c-parse.y"
! { (yyval.ttype) = c_end_compound_stmt ((yyvsp[-2].ttype), flag_isoc99); ;}
break;
case 474:
--- 4649,4673 ----
"only inside a function");
YYERROR;
}
! yyval.ttype = c_begin_stmt_expr ();
;}
break;
case 469:
#line 1976 "c-parse.y"
! { yyval.ttype = c_end_compound_stmt (yyvsp[-1].ttype, true); ;}
break;
case 470:
#line 1984 "c-parse.y"
{ if (yychar == YYEMPTY)
yychar = YYLEX;
! yyval.location = input_location; ;}
break;
case 473:
#line 1997 "c-parse.y"
! { yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;}
break;
case 474:
*************** yyreduce:
*** 4716,4822 ****
and will have a bare STATEMENT_LIST. But that's ok
because (recursively) all of the component statments
should already have line numbers assigned. */
! if ((yyvsp[0].ttype) && EXPR_P ((yyvsp[0].ttype)))
! SET_EXPR_LOCATION ((yyvsp[0].ttype), (yyvsp[-1].location));
;}
break;
case 475:
#line 2020 "c-parse.y"
! { if ((yyvsp[0].ttype)) SET_EXPR_LOCATION ((yyvsp[0].ttype), (yyvsp[-1].location)); ;}
break;
case 476:
#line 2024 "c-parse.y"
! { (yyval.ttype) = lang_hooks.truthvalue_conversion ((yyvsp[0].exprtype).value);
! if (EXPR_P ((yyval.ttype)))
! SET_EXPR_LOCATION ((yyval.ttype), (yyvsp[-1].location)); ;}
break;
case 477:
#line 2037 "c-parse.y"
! { (yyval.ttype) = c_end_compound_stmt ((yyvsp[-2].ttype), flag_isoc99); ;}
break;
case 478:
#line 2042 "c-parse.y"
{ if (extra_warnings)
add_stmt (build (NOP_EXPR, NULL_TREE, NULL_TREE));
! (yyval.ttype) = c_end_compound_stmt ((yyvsp[-2].ttype), flag_isoc99); ;}
break;
case 480:
#line 2051 "c-parse.y"
! { c_finish_if_stmt ((yyvsp[-6].location), (yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype), true);
! add_stmt (c_end_compound_stmt ((yyvsp[-7].ttype), flag_isoc99)); ;}
break;
case 481:
#line 2055 "c-parse.y"
! { c_finish_if_stmt ((yyvsp[-6].location), (yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype), false);
! add_stmt (c_end_compound_stmt ((yyvsp[-7].ttype), flag_isoc99)); ;}
break;
case 482:
#line 2059 "c-parse.y"
! { c_finish_if_stmt ((yyvsp[-4].location), (yyvsp[-2].ttype), (yyvsp[0].ttype), NULL, true);
! add_stmt (c_end_compound_stmt ((yyvsp[-5].ttype), flag_isoc99)); ;}
break;
case 483:
#line 2063 "c-parse.y"
! { c_finish_if_stmt ((yyvsp[-4].location), (yyvsp[-2].ttype), (yyvsp[0].ttype), NULL, false);
! add_stmt (c_end_compound_stmt ((yyvsp[-5].ttype), flag_isoc99)); ;}
break;
case 484:
#line 2068 "c-parse.y"
! { (yyval.ttype) = c_break_label; c_break_label = NULL; ;}
break;
case 485:
#line 2072 "c-parse.y"
! { (yyval.ttype) = c_cont_label; c_cont_label = NULL; ;}
break;
case 486:
#line 2078 "c-parse.y"
! { c_finish_loop ((yyvsp[-6].location), (yyvsp[-4].ttype), NULL, (yyvsp[0].ttype), c_break_label,
c_cont_label, true);
! add_stmt (c_end_compound_stmt ((yyvsp[-7].ttype), flag_isoc99));
! c_break_label = (yyvsp[-2].ttype); c_cont_label = (yyvsp[-1].ttype); ;}
break;
case 487:
#line 2087 "c-parse.y"
! { (yyval.ttype) = c_break_label; c_break_label = (yyvsp[-3].ttype); ;}
break;
case 488:
#line 2088 "c-parse.y"
! { (yyval.ttype) = c_cont_label; c_cont_label = (yyvsp[-3].ttype); ;}
break;
case 489:
#line 2090 "c-parse.y"
! { c_finish_loop ((yyvsp[-10].location), (yyvsp[-2].ttype), NULL, (yyvsp[-7].ttype), (yyvsp[-5].ttype),
! (yyvsp[-4].ttype), false);
! add_stmt (c_end_compound_stmt ((yyvsp[-11].ttype), flag_isoc99)); ;}
break;
case 490:
#line 2097 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 491:
#line 2099 "c-parse.y"
! { (yyval.ttype) = (yyvsp[0].exprtype).value; ;}
break;
case 492:
#line 2104 "c-parse.y"
! { c_finish_expr_stmt ((yyvsp[-1].ttype)); ;}
break;
case 493:
--- 4683,4789 ----
and will have a bare STATEMENT_LIST. But that's ok
because (recursively) all of the component statments
should already have line numbers assigned. */
! if (yyvsp[0].ttype && EXPR_P (yyvsp[0].ttype))
! SET_EXPR_LOCATION (yyvsp[0].ttype, yyvsp[-1].location);
;}
break;
case 475:
#line 2020 "c-parse.y"
! { if (yyvsp[0].ttype) SET_EXPR_LOCATION (yyvsp[0].ttype, yyvsp[-1].location); ;}
break;
case 476:
#line 2024 "c-parse.y"
! { yyval.ttype = lang_hooks.truthvalue_conversion (yyvsp[0].exprtype.value);
! if (EXPR_P (yyval.ttype))
! SET_EXPR_LOCATION (yyval.ttype, yyvsp[-1].location); ;}
break;
case 477:
#line 2037 "c-parse.y"
! { yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;}
break;
case 478:
#line 2042 "c-parse.y"
{ if (extra_warnings)
add_stmt (build (NOP_EXPR, NULL_TREE, NULL_TREE));
! yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;}
break;
case 480:
#line 2051 "c-parse.y"
! { c_finish_if_stmt (yyvsp[-6].location, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, true);
! add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99)); ;}
break;
case 481:
#line 2055 "c-parse.y"
! { c_finish_if_stmt (yyvsp[-6].location, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, false);
! add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99)); ;}
break;
case 482:
#line 2059 "c-parse.y"
! { c_finish_if_stmt (yyvsp[-4].location, yyvsp[-2].ttype, yyvsp[0].ttype, NULL, true);
! add_stmt (c_end_compound_stmt (yyvsp[-5].ttype, flag_isoc99)); ;}
break;
case 483:
#line 2063 "c-parse.y"
! { c_finish_if_stmt (yyvsp[-4].location, yyvsp[-2].ttype, yyvsp[0].ttype, NULL, false);
! add_stmt (c_end_compound_stmt (yyvsp[-5].ttype, flag_isoc99)); ;}
break;
case 484:
#line 2068 "c-parse.y"
! { yyval.ttype = c_break_label; c_break_label = NULL; ;}
break;
case 485:
#line 2072 "c-parse.y"
! { yyval.ttype = c_cont_label; c_cont_label = NULL; ;}
break;
case 486:
#line 2078 "c-parse.y"
! { c_finish_loop (yyvsp[-6].location, yyvsp[-4].ttype, NULL, yyvsp[0].ttype, c_break_label,
c_cont_label, true);
! add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99));
! c_break_label = yyvsp[-2].ttype; c_cont_label = yyvsp[-1].ttype; ;}
break;
case 487:
#line 2087 "c-parse.y"
! { yyval.ttype = c_break_label; c_break_label = yyvsp[-3].ttype; ;}
break;
case 488:
#line 2088 "c-parse.y"
! { yyval.ttype = c_cont_label; c_cont_label = yyvsp[-3].ttype; ;}
break;
case 489:
#line 2090 "c-parse.y"
! { c_finish_loop (yyvsp[-10].location, yyvsp[-2].ttype, NULL, yyvsp[-7].ttype, yyvsp[-5].ttype,
! yyvsp[-4].ttype, false);
! add_stmt (c_end_compound_stmt (yyvsp[-11].ttype, flag_isoc99)); ;}
break;
case 490:
#line 2097 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 491:
#line 2099 "c-parse.y"
! { yyval.ttype = yyvsp[0].exprtype.value; ;}
break;
case 492:
#line 2104 "c-parse.y"
! { c_finish_expr_stmt (yyvsp[-1].ttype); ;}
break;
case 493:
*************** yyreduce:
*** 4826,4981 ****
case 494:
#line 2110 "c-parse.y"
! { if ((yyvsp[0].ttype))
{
! (yyval.ttype) = lang_hooks.truthvalue_conversion ((yyvsp[0].ttype));
! if (EXPR_P ((yyval.ttype)))
! SET_EXPR_LOCATION ((yyval.ttype), (yyvsp[-1].location));
}
else
! (yyval.ttype) = NULL;
;}
break;
case 495:
#line 2122 "c-parse.y"
! { (yyval.ttype) = c_process_expr_stmt ((yyvsp[0].ttype)); ;}
break;
case 496:
#line 2129 "c-parse.y"
! { c_finish_loop ((yyvsp[-7].location), (yyvsp[-6].ttype), (yyvsp[-4].ttype), (yyvsp[0].ttype), c_break_label,
c_cont_label, true);
! add_stmt (c_end_compound_stmt ((yyvsp[-10].ttype), flag_isoc99));
! c_break_label = (yyvsp[-2].ttype); c_cont_label = (yyvsp[-1].ttype); ;}
break;
case 497:
#line 2137 "c-parse.y"
! { (yyval.ttype) = c_start_case ((yyvsp[-1].exprtype).value); ;}
break;
case 498:
#line 2139 "c-parse.y"
! { c_finish_case ((yyvsp[0].ttype));
if (c_break_label)
add_stmt (build (LABEL_EXPR, void_type_node,
c_break_label));
! c_break_label = (yyvsp[-1].ttype);
! add_stmt (c_end_compound_stmt ((yyvsp[-6].ttype), flag_isoc99)); ;}
break;
case 499:
#line 2150 "c-parse.y"
! { (yyval.ttype) = c_finish_expr_stmt ((yyvsp[-1].exprtype).value); ;}
break;
case 500:
#line 2152 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 501:
#line 2154 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 502:
#line 2156 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 503:
#line 2158 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 504:
#line 2160 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 505:
#line 2162 "c-parse.y"
! { (yyval.ttype) = c_finish_bc_stmt (&c_break_label, true); ;}
break;
case 506:
#line 2164 "c-parse.y"
! { (yyval.ttype) = c_finish_bc_stmt (&c_cont_label, false); ;}
break;
case 507:
#line 2166 "c-parse.y"
! { (yyval.ttype) = c_finish_return (NULL_TREE); ;}
break;
case 508:
#line 2168 "c-parse.y"
! { (yyval.ttype) = c_finish_return ((yyvsp[-1].exprtype).value); ;}
break;
case 510:
#line 2171 "c-parse.y"
! { (yyval.ttype) = c_finish_goto_label ((yyvsp[-1].ttype)); ;}
break;
case 511:
#line 2173 "c-parse.y"
! { (yyval.ttype) = c_finish_goto_ptr ((yyvsp[-1].exprtype).value); ;}
break;
case 512:
#line 2175 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 513:
#line 2181 "c-parse.y"
! { add_stmt ((yyvsp[0].ttype)); (yyval.ttype) = NULL_TREE; ;}
break;
case 515:
#line 2190 "c-parse.y"
! { (yyval.ttype) = do_case ((yyvsp[-1].exprtype).value, NULL_TREE); ;}
break;
case 516:
#line 2192 "c-parse.y"
! { (yyval.ttype) = do_case ((yyvsp[-3].exprtype).value, (yyvsp[-1].exprtype).value); ;}
break;
case 517:
#line 2194 "c-parse.y"
! { (yyval.ttype) = do_case (NULL_TREE, NULL_TREE); ;}
break;
case 518:
#line 2196 "c-parse.y"
! { tree label = define_label ((yyvsp[-2].location), (yyvsp[-3].ttype));
if (label)
{
! decl_attributes (&label, (yyvsp[0].ttype), 0);
! (yyval.ttype) = add_stmt (build_stmt (LABEL_EXPR, label));
}
else
! (yyval.ttype) = NULL_TREE;
;}
break;
case 519:
#line 2214 "c-parse.y"
! { (yyval.ttype) = (yyvsp[-2].ttype); ;}
break;
case 520:
#line 2220 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 522:
#line 2227 "c-parse.y"
! { assemble_asm ((yyvsp[-1].ttype)); ;}
break;
case 523:
--- 4793,4948 ----
case 494:
#line 2110 "c-parse.y"
! { if (yyvsp[0].ttype)
{
! yyval.ttype = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
! if (EXPR_P (yyval.ttype))
! SET_EXPR_LOCATION (yyval.ttype, yyvsp[-1].location);
}
else
! yyval.ttype = NULL;
;}
break;
case 495:
#line 2122 "c-parse.y"
! { yyval.ttype = c_process_expr_stmt (yyvsp[0].ttype); ;}
break;
case 496:
#line 2129 "c-parse.y"
! { c_finish_loop (yyvsp[-7].location, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[0].ttype, c_break_label,
c_cont_label, true);
! add_stmt (c_end_compound_stmt (yyvsp[-10].ttype, flag_isoc99));
! c_break_label = yyvsp[-2].ttype; c_cont_label = yyvsp[-1].ttype; ;}
break;
case 497:
#line 2137 "c-parse.y"
! { yyval.ttype = c_start_case (yyvsp[-1].exprtype.value); ;}
break;
case 498:
#line 2139 "c-parse.y"
! { c_finish_case (yyvsp[0].ttype);
if (c_break_label)
add_stmt (build (LABEL_EXPR, void_type_node,
c_break_label));
! c_break_label = yyvsp[-1].ttype;
! add_stmt (c_end_compound_stmt (yyvsp[-6].ttype, flag_isoc99)); ;}
break;
case 499:
#line 2150 "c-parse.y"
! { yyval.ttype = c_finish_expr_stmt (yyvsp[-1].exprtype.value); ;}
break;
case 500:
#line 2152 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 501:
#line 2154 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 502:
#line 2156 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 503:
#line 2158 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 504:
#line 2160 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 505:
#line 2162 "c-parse.y"
! { yyval.ttype = c_finish_bc_stmt (&c_break_label, true); ;}
break;
case 506:
#line 2164 "c-parse.y"
! { yyval.ttype = c_finish_bc_stmt (&c_cont_label, false); ;}
break;
case 507:
#line 2166 "c-parse.y"
! { yyval.ttype = c_finish_return (NULL_TREE); ;}
break;
case 508:
#line 2168 "c-parse.y"
! { yyval.ttype = c_finish_return (yyvsp[-1].exprtype.value); ;}
break;
case 510:
#line 2171 "c-parse.y"
! { yyval.ttype = c_finish_goto_label (yyvsp[-1].ttype); ;}
break;
case 511:
#line 2173 "c-parse.y"
! { yyval.ttype = c_finish_goto_ptr (yyvsp[-1].exprtype.value); ;}
break;
case 512:
#line 2175 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 513:
#line 2181 "c-parse.y"
! { add_stmt (yyvsp[0].ttype); yyval.ttype = NULL_TREE; ;}
break;
case 515:
#line 2190 "c-parse.y"
! { yyval.ttype = do_case (yyvsp[-1].exprtype.value, NULL_TREE); ;}
break;
case 516:
#line 2192 "c-parse.y"
! { yyval.ttype = do_case (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value); ;}
break;
case 517:
#line 2194 "c-parse.y"
! { yyval.ttype = do_case (NULL_TREE, NULL_TREE); ;}
break;
case 518:
#line 2196 "c-parse.y"
! { tree label = define_label (yyvsp[-2].location, yyvsp[-3].ttype);
if (label)
{
! decl_attributes (&label, yyvsp[0].ttype, 0);
! yyval.ttype = add_stmt (build_stmt (LABEL_EXPR, label));
}
else
! yyval.ttype = NULL_TREE;
;}
break;
case 519:
#line 2214 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype; ;}
break;
case 520:
#line 2220 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 522:
#line 2227 "c-parse.y"
! { assemble_asm (yyvsp[-1].ttype); ;}
break;
case 523:
*************** yyreduce:
*** 4985,5073 ****
case 524:
#line 2237 "c-parse.y"
! { (yyval.ttype) = build_asm_stmt ((yyvsp[-6].ttype), (yyvsp[-3].ttype)); ;}
break;
case 525:
#line 2243 "c-parse.y"
! { (yyval.ttype) = build_asm_expr ((yyvsp[0].ttype), 0, 0, 0, true); ;}
break;
case 526:
#line 2246 "c-parse.y"
! { (yyval.ttype) = build_asm_expr ((yyvsp[-2].ttype), (yyvsp[0].ttype), 0, 0, false); ;}
break;
case 527:
#line 2249 "c-parse.y"
! { (yyval.ttype) = build_asm_expr ((yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype), 0, false); ;}
break;
case 528:
#line 2252 "c-parse.y"
! { (yyval.ttype) = build_asm_expr ((yyvsp[-6].ttype), (yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype), false); ;}
break;
case 529:
#line 2259 "c-parse.y"
! { (yyval.ttype) = 0; ;}
break;
case 530:
#line 2261 "c-parse.y"
! { if ((yyvsp[0].ttype) != ridpointers[RID_VOLATILE])
{
! warning ("%E qualifier ignored on asm", (yyvsp[0].ttype));
! (yyval.ttype) = 0;
}
else
! (yyval.ttype) = (yyvsp[0].ttype);
;}
break;
case 531:
#line 2274 "c-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 534:
#line 2281 "c-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), (yyvsp[0].ttype)); ;}
break;
case 535:
#line 2287 "c-parse.y"
! { (yyval.ttype) = build_tree_list (build_tree_list (NULL_TREE, (yyvsp[-5].ttype)),
! (yyvsp[-2].exprtype).value); ;}
break;
case 536:
#line 2291 "c-parse.y"
! { (yyvsp[-7].ttype) = build_string (IDENTIFIER_LENGTH ((yyvsp[-7].ttype)),
! IDENTIFIER_POINTER ((yyvsp[-7].ttype)));
! (yyval.ttype) = build_tree_list (build_tree_list ((yyvsp[-7].ttype), (yyvsp[-5].ttype)), (yyvsp[-2].exprtype).value); ;}
break;
case 537:
#line 2298 "c-parse.y"
! { (yyval.ttype) = tree_cons (NULL_TREE, (yyvsp[0].ttype), NULL_TREE); ;}
break;
case 538:
#line 2300 "c-parse.y"
! { (yyval.ttype) = tree_cons (NULL_TREE, (yyvsp[0].ttype), (yyvsp[-2].ttype)); ;}
break;
case 539:
#line 2306 "c-parse.y"
! { if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE ((yyvsp[0].ttype))))
!= char_type_node)
{
error ("wide string literal in %");
! (yyval.ttype) = build_string (1, "");
}
else
! (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 540:
--- 4952,5040 ----
case 524:
#line 2237 "c-parse.y"
! { yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-3].ttype); ;}
break;
case 525:
#line 2243 "c-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[0].ttype, 0, 0, 0, true); ;}
break;
case 526:
#line 2246 "c-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-2].ttype, yyvsp[0].ttype, 0, 0, false); ;}
break;
case 527:
#line 2249 "c-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, 0, false); ;}
break;
case 528:
#line 2252 "c-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, false); ;}
break;
case 529:
#line 2259 "c-parse.y"
! { yyval.ttype = 0; ;}
break;
case 530:
#line 2261 "c-parse.y"
! { if (yyvsp[0].ttype != ridpointers[RID_VOLATILE])
{
! warning ("%E qualifier ignored on asm", yyvsp[0].ttype);
! yyval.ttype = 0;
}
else
! yyval.ttype = yyvsp[0].ttype;
;}
break;
case 531:
#line 2274 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 534:
#line 2281 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;}
break;
case 535:
#line 2287 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-5].ttype),
! yyvsp[-2].exprtype.value); ;}
break;
case 536:
#line 2291 "c-parse.y"
! { yyvsp[-7].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-7].ttype),
! IDENTIFIER_POINTER (yyvsp[-7].ttype));
! yyval.ttype = build_tree_list (build_tree_list (yyvsp[-7].ttype, yyvsp[-5].ttype), yyvsp[-2].exprtype.value); ;}
break;
case 537:
#line 2298 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;}
break;
case 538:
#line 2300 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;}
break;
case 539:
#line 2306 "c-parse.y"
! { if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (yyvsp[0].ttype)))
!= char_type_node)
{
error ("wide string literal in %");
! yyval.ttype = build_string (1, "");
}
else
! yyval.ttype = yyvsp[0].ttype; ;}
break;
case 540:
*************** yyreduce:
*** 5088,5094 ****
case 543:
#line 2335 "c-parse.y"
! { (yyval.arginfotype) = (yyvsp[0].arginfotype);
pop_scope (); ;}
break;
--- 5055,5061 ----
case 543:
#line 2335 "c-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype;
pop_scope (); ;}
break;
*************** yyreduce:
*** 5105,5232 ****
case 547:
#line 2347 "c-parse.y"
! { (yyval.arginfotype) = (yyvsp[0].arginfotype); ;}
break;
case 548:
#line 2349 "c-parse.y"
! { (yyval.arginfotype) = XOBNEW (&parser_obstack, struct c_arg_info);
! (yyval.arginfotype)->parms = 0;
! (yyval.arginfotype)->tags = 0;
! (yyval.arginfotype)->types = 0;
! (yyval.arginfotype)->others = 0; ;}
break;
case 549:
#line 2359 "c-parse.y"
! { (yyval.arginfotype) = XOBNEW (&parser_obstack, struct c_arg_info);
! (yyval.arginfotype)->parms = 0;
! (yyval.arginfotype)->tags = 0;
! (yyval.arginfotype)->types = 0;
! (yyval.arginfotype)->others = 0; ;}
break;
case 550:
#line 2365 "c-parse.y"
! { (yyval.arginfotype) = XOBNEW (&parser_obstack, struct c_arg_info);
! (yyval.arginfotype)->parms = 0;
! (yyval.arginfotype)->tags = 0;
! (yyval.arginfotype)->others = 0;
/* Suppress -Wold-style-definition for this case. */
! (yyval.arginfotype)->types = error_mark_node;
error ("ISO C requires a named argument before %<...%>");
;}
break;
case 551:
#line 2374 "c-parse.y"
! { (yyval.arginfotype) = get_parm_info (/*ellipsis=*/false); ;}
break;
case 552:
#line 2376 "c-parse.y"
! { (yyval.arginfotype) = get_parm_info (/*ellipsis=*/true); ;}
break;
case 553:
#line 2381 "c-parse.y"
! { push_parm_decl ((yyvsp[0].parmtype)); ;}
break;
case 554:
#line 2383 "c-parse.y"
! { push_parm_decl ((yyvsp[0].parmtype)); ;}
break;
case 555:
#line 2390 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 556:
#line 2394 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 557:
#line 2398 "c-parse.y"
! { (yyval.parmtype) = (yyvsp[0].parmtype);
POP_DECLSPEC_STACK; ;}
break;
case 558:
#line 2401 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 559:
#line 2406 "c-parse.y"
! { (yyval.parmtype) = (yyvsp[0].parmtype);
POP_DECLSPEC_STACK; ;}
break;
case 560:
#line 2414 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 561:
#line 2418 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 562:
#line 2422 "c-parse.y"
! { (yyval.parmtype) = (yyvsp[0].parmtype);
POP_DECLSPEC_STACK; ;}
break;
case 563:
#line 2425 "c-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 564:
#line 2430 "c-parse.y"
! { (yyval.parmtype) = (yyvsp[0].parmtype);
POP_DECLSPEC_STACK; ;}
break;
case 565:
#line 2436 "c-parse.y"
! { prefix_attributes = chainon (prefix_attributes, (yyvsp[-3].ttype));
all_prefix_attributes = prefix_attributes; ;}
break;
--- 5072,5199 ----
case 547:
#line 2347 "c-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype; ;}
break;
case 548:
#line 2349 "c-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! yyval.arginfotype->parms = 0;
! yyval.arginfotype->tags = 0;
! yyval.arginfotype->types = 0;
! yyval.arginfotype->others = 0; ;}
break;
case 549:
#line 2359 "c-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! yyval.arginfotype->parms = 0;
! yyval.arginfotype->tags = 0;
! yyval.arginfotype->types = 0;
! yyval.arginfotype->others = 0; ;}
break;
case 550:
#line 2365 "c-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! yyval.arginfotype->parms = 0;
! yyval.arginfotype->tags = 0;
! yyval.arginfotype->others = 0;
/* Suppress -Wold-style-definition for this case. */
! yyval.arginfotype->types = error_mark_node;
error ("ISO C requires a named argument before %<...%>");
;}
break;
case 551:
#line 2374 "c-parse.y"
! { yyval.arginfotype = get_parm_info (/*ellipsis=*/false); ;}
break;
case 552:
#line 2376 "c-parse.y"
! { yyval.arginfotype = get_parm_info (/*ellipsis=*/true); ;}
break;
case 553:
#line 2381 "c-parse.y"
! { push_parm_decl (yyvsp[0].parmtype); ;}
break;
case 554:
#line 2383 "c-parse.y"
! { push_parm_decl (yyvsp[0].parmtype); ;}
break;
case 555:
#line 2390 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 556:
#line 2394 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 557:
#line 2398 "c-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
POP_DECLSPEC_STACK; ;}
break;
case 558:
#line 2401 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 559:
#line 2406 "c-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
POP_DECLSPEC_STACK; ;}
break;
case 560:
#line 2414 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 561:
#line 2418 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 562:
#line 2422 "c-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
POP_DECLSPEC_STACK; ;}
break;
case 563:
#line 2425 "c-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 564:
#line 2430 "c-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
POP_DECLSPEC_STACK; ;}
break;
case 565:
#line 2436 "c-parse.y"
! { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
all_prefix_attributes = prefix_attributes; ;}
break;
*************** yyreduce:
*** 5238,5284 ****
case 567:
#line 2448 "c-parse.y"
! { (yyval.arginfotype) = (yyvsp[0].arginfotype);
pop_scope (); ;}
break;
case 569:
#line 2455 "c-parse.y"
! { (yyval.arginfotype) = XOBNEW (&parser_obstack, struct c_arg_info);
! (yyval.arginfotype)->parms = 0;
! (yyval.arginfotype)->tags = 0;
! (yyval.arginfotype)->types = (yyvsp[-1].ttype);
! (yyval.arginfotype)->others = 0;
/* Make sure we have a parmlist after attributes. */
! if ((yyvsp[-3].ttype) != 0)
YYERROR1;
;}
break;
case 570:
#line 2470 "c-parse.y"
! { (yyval.ttype) = build_tree_list (NULL_TREE, (yyvsp[0].ttype)); ;}
break;
case 571:
#line 2472 "c-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), build_tree_list (NULL_TREE, (yyvsp[0].ttype))); ;}
break;
case 572:
#line 2478 "c-parse.y"
! { (yyval.ttype) = build_tree_list (NULL_TREE, (yyvsp[0].ttype)); ;}
break;
case 573:
#line 2480 "c-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), build_tree_list (NULL_TREE, (yyvsp[0].ttype))); ;}
break;
case 574:
#line 2485 "c-parse.y"
! { (yyval.itype) = SAVE_EXT_FLAGS ();
pedantic = 0;
warn_pointer_arith = 0;
warn_traditional = 0;
--- 5205,5251 ----
case 567:
#line 2448 "c-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype;
pop_scope (); ;}
break;
case 569:
#line 2455 "c-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! yyval.arginfotype->parms = 0;
! yyval.arginfotype->tags = 0;
! yyval.arginfotype->types = yyvsp[-1].ttype;
! yyval.arginfotype->others = 0;
/* Make sure we have a parmlist after attributes. */
! if (yyvsp[-3].ttype != 0)
YYERROR1;
;}
break;
case 570:
#line 2470 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;}
break;
case 571:
#line 2472 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;}
break;
case 572:
#line 2478 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;}
break;
case 573:
#line 2480 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;}
break;
case 574:
#line 2485 "c-parse.y"
! { yyval.itype = SAVE_EXT_FLAGS ();
pedantic = 0;
warn_pointer_arith = 0;
warn_traditional = 0;
*************** yyreduce:
*** 5288,5295 ****
}
! /* Line 1037 of yacc.c. */
! #line 5293 "c-parse.c"
yyvsp -= yylen;
yyssp -= yylen;
--- 5255,5262 ----
}
! /* Line 991 of yacc.c. */
! #line 5259 "c-parse.c"
yyvsp -= yylen;
yyssp -= yylen;
*************** yyerrlab:
*** 5330,5362 ****
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
- const char* yyprefix;
char *yymsg;
! int yyx;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! int yyxbegin = yyn < 0 ? -yyn : 0;
!
! /* Stay within bounds of both yycheck and yytname. */
! int yychecklim = YYLAST - yyn;
! int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
! int yycount = 0;
!
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! {
! yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
! yycount += 1;
! if (yycount == 5)
! {
! yysize = 0;
! break;
! }
! }
! yysize += (sizeof ("syntax error, unexpected ")
! + yystrlen (yytname[yytype]));
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
--- 5297,5314 ----
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
char *yymsg;
! int yyx, yycount;
+ yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! yysize += yystrlen (yytname[yyx]) + 15, yycount++;
! yysize += yystrlen ("syntax error, unexpected ") + 1;
! yysize += yystrlen (yytname[yytype]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
*************** yyerrlab:
*** 5365,5377 ****
if (yycount < 5)
{
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! yyp = yystpcpy (yyp, yyprefix);
yyp = yystpcpy (yyp, yytname[yyx]);
! yyprefix = " or ";
}
}
yyerror (yymsg);
--- 5317,5332 ----
if (yycount < 5)
{
! yycount = 0;
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *));
! yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! const char *yyq = ! yycount ? ", expecting " : " or ";
! yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
! yycount++;
}
}
yyerror (yymsg);
*************** yyerrlab:
*** 5389,5446 ****
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse look-ahead token after an
error, discard it. */
! if (yychar <= YYEOF)
{
! /* If at end of input, pop the error token,
! then the rest of the stack, then return failure. */
! if (yychar == YYEOF)
! for (;;)
! {
!
! YYPOPSTACK;
! if (yyssp == yyss)
! YYABORT;
! yydestruct ("Error: popping",
! yystos[*yyssp], yyvsp);
! }
}
! else
! {
! yydestruct ("Error: discarding", yytoken, &yylval);
! yychar = YYEMPTY;
! }
}
! /* Else will try to reuse look-ahead token after shifting the error
token. */
! goto yyerrlab1;
! /*---------------------------------------------------.
! | yyerrorlab -- error raised explicitly by YYERROR. |
! `---------------------------------------------------*/
! yyerrorlab:
! #ifdef __GNUC__
! /* Pacify GCC when the user code never invokes YYERROR and the label
! yyerrorlab therefore never appears in user code. */
! if (0)
! goto yyerrorlab;
#endif
- yyvsp -= yylen;
- yyssp -= yylen;
- yystate = *yyssp;
- goto yyerrlab1;
! /*-------------------------------------------------------------.
! | yyerrlab1 -- common code for both syntax error and YYERROR. |
! `-------------------------------------------------------------*/
! yyerrlab1:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
--- 5344,5398 ----
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse lookahead token after an
error, discard it. */
! /* Return failure if at end of input. */
! if (yychar == YYEOF)
{
! /* Pop the error token. */
! YYPOPSTACK;
! /* Pop the rest of the stack. */
! while (yyss < yyssp)
! {
! YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
! yydestruct (yystos[*yyssp], yyvsp);
! YYPOPSTACK;
! }
! YYABORT;
}
!
! YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
! yydestruct (yytoken, &yylval);
! yychar = YYEMPTY;
!
}
! /* Else will try to reuse lookahead token after shifting the error
token. */
! goto yyerrlab2;
! /*----------------------------------------------------.
! | yyerrlab1 -- error raised explicitly by an action. |
! `----------------------------------------------------*/
! yyerrlab1:
! /* Suppress GCC warning that yyerrlab1 is unused when no action
! invokes YYERROR. */
! #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) \
! && !defined __cplusplus
! __attribute__ ((__unused__))
#endif
+ goto yyerrlab2;
!
! /*---------------------------------------------------------------.
! | yyerrlab2 -- pop states until the error token can be shifted. |
! `---------------------------------------------------------------*/
! yyerrlab2:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
*************** yyerrlab1:
*** 5461,5481 ****
if (yyssp == yyss)
YYABORT;
- yydestruct ("Error: popping", yystos[yystate], yyvsp);
- YYPOPSTACK;
- yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
! *++yyvsp = yylval;
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
yystate = yyn;
goto yynewstate;
--- 5413,5433 ----
if (yyssp == yyss)
YYABORT;
+ YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+ yydestruct (yystos[yystate], yyvsp);
+ yyvsp--;
+ yystate = *--yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
! YYDPRINTF ((stderr, "Shifting error token, "));
+ *++yyvsp = yylval;
yystate = yyn;
goto yynewstate;
*************** yyacceptlab:
*** 5492,5500 ****
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
yyabortlab:
- yydestruct ("Error: discarding lookahead",
- yytoken, &yylval);
- yychar = YYEMPTY;
yyresult = 1;
goto yyreturn;
--- 5444,5449 ----
diff -Nrcpad gcc-4.0.3/gcc/c-pragma.c gcc-4.0.4/gcc/c-pragma.c
*** gcc-4.0.3/gcc/c-pragma.c 2005-06-06 19:21:03.000000000 +0000
--- gcc-4.0.4/gcc/c-pragma.c 2006-07-18 10:19:28.000000000 +0000
*************** handle_pragma_pack (cpp_reader * ARG_UNU
*** 156,161 ****
--- 156,163 ----
}
else if (token == CPP_NUMBER)
{
+ if (TREE_CODE (x) != INTEGER_CST)
+ GCC_BAD ("invalid constant in %<#pragma pack%> - ignored");
align = TREE_INT_CST_LOW (x);
action = set;
if (c_lex (&x) != CPP_CLOSE_PAREN)
*************** handle_pragma_pack (cpp_reader * ARG_UNU
*** 186,191 ****
--- 188,195 ----
}
else if (token == CPP_NUMBER && action == push && align == -1)
{
+ if (TREE_CODE (x) != INTEGER_CST)
+ GCC_BAD ("invalid constant in %<#pragma pack%> - ignored");
align = TREE_INT_CST_LOW (x);
if (align == -1)
action = set;
diff -Nrcpad gcc-4.0.3/gcc/cselib.c gcc-4.0.4/gcc/cselib.c
*** gcc-4.0.3/gcc/cselib.c 2005-02-11 18:12:33.000000000 +0000
--- gcc-4.0.4/gcc/cselib.c 2006-09-19 21:25:28.000000000 +0000
*************** cselib_hash_rtx (rtx x, enum machine_mod
*** 605,618 ****
/* Assume there is only one rtx object for any given label. */
case LABEL_REF:
! hash
! += ((unsigned) LABEL_REF << 7) + (unsigned long) XEXP (x, 0);
return hash ? hash : (unsigned int) LABEL_REF;
case SYMBOL_REF:
! hash
! += ((unsigned) SYMBOL_REF << 7) + (unsigned long) XSTR (x, 0);
! return hash ? hash : (unsigned int) SYMBOL_REF;
case PRE_DEC:
case PRE_INC:
--- 605,632 ----
/* Assume there is only one rtx object for any given label. */
case LABEL_REF:
! /* We don't hash on the address of the CODE_LABEL to avoid bootstrap
! differences and differences between each stage's debugging dumps. */
! hash += (((unsigned int) LABEL_REF << 7)
! + CODE_LABEL_NUMBER (XEXP (x, 0)));
return hash ? hash : (unsigned int) LABEL_REF;
case SYMBOL_REF:
! {
! /* Don't hash on the symbol's address to avoid bootstrap differences.
! Different hash values may cause expressions to be recorded in
! different orders and thus different registers to be used in the
! final assembler. This also avoids differences in the dump files
! between various stages. */
! unsigned int h = 0;
! const unsigned char *p = (const unsigned char *) XSTR (x, 0);
!
! while (*p)
! h += (h << 7) + *p++; /* ??? revisit */
!
! hash += ((unsigned int) SYMBOL_REF << 7) + h;
! return hash ? hash : (unsigned int) SYMBOL_REF;
! }
case PRE_DEC:
case PRE_INC:
diff -Nrcpad gcc-4.0.3/gcc/c-typeck.c gcc-4.0.4/gcc/c-typeck.c
*** gcc-4.0.3/gcc/c-typeck.c 2006-02-28 11:36:26.000000000 +0000
--- gcc-4.0.4/gcc/c-typeck.c 2006-10-25 14:55:09.000000000 +0000
*************** static tree convert_for_assignment (tree
*** 89,95 ****
static tree valid_compound_expr_initializer (tree, tree);
static void push_string (const char *);
static void push_member_name (tree);
- static void push_array_bounds (int);
static int spelling_length (void);
static char *print_spelling (char *);
static void warning_init (const char *);
--- 89,94 ----
*************** c_expr_sizeof_type (struct c_type_name *
*** 1956,1962 ****
type = groktypename (t);
ret.value = c_sizeof (type);
ret.original_code = ERROR_MARK;
! pop_maybe_used (C_TYPE_VARIABLE_SIZE (type));
return ret;
}
--- 1955,1962 ----
type = groktypename (t);
ret.value = c_sizeof (type);
ret.original_code = ERROR_MARK;
! pop_maybe_used (type != error_mark_node
! ? C_TYPE_VARIABLE_SIZE (type) : false);
return ret;
}
*************** struct spelling
*** 4023,4029 ****
int kind;
union
{
! int i;
const char *s;
} u;
};
--- 4023,4029 ----
int kind;
union
{
! unsigned HOST_WIDE_INT i;
const char *s;
} u;
};
*************** push_member_name (tree decl)
*** 4083,4089 ****
/* Push an array bounds on the stack. Printed as [BOUNDS]. */
static void
! push_array_bounds (int bounds)
{
PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
}
--- 4083,4089 ----
/* Push an array bounds on the stack. Printed as [BOUNDS]. */
static void
! push_array_bounds (unsigned HOST_WIDE_INT bounds)
{
PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
}
*************** print_spelling (char *buffer)
*** 4118,4124 ****
for (p = spelling_base; p < spelling; p++)
if (p->kind == SPELLING_BOUNDS)
{
! sprintf (d, "[%d]", p->u.i);
d += strlen (d);
}
else
--- 4118,4124 ----
for (p = spelling_base; p < spelling; p++)
if (p->kind == SPELLING_BOUNDS)
{
! sprintf (d, "[" HOST_WIDE_INT_PRINT_UNSIGNED "]", p->u.i);
d += strlen (d);
}
else
*************** digest_init (tree type, tree init, bool
*** 4353,4364 ****
conversion. */
inside_init = convert (type, inside_init);
! if (require_constant && !flag_isoc99
&& TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
{
/* As an extension, allow initializing objects with static storage
duration with compound literals (which are then treated just as
! the brace enclosed list they contain). */
tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
inside_init = DECL_INITIAL (decl);
}
--- 4353,4366 ----
conversion. */
inside_init = convert (type, inside_init);
! if (require_constant
! && (code == VECTOR_TYPE || !flag_isoc99)
&& TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
{
/* As an extension, allow initializing objects with static storage
duration with compound literals (which are then treated just as
! the brace enclosed list they contain). Also allow this for
! vectors, as we can only assign them with compound literals. */
tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
inside_init = DECL_INITIAL (decl);
}
*************** really_start_incremental_init (tree type
*** 4791,4797 ****
/* Vectors are like simple fixed-size arrays. */
constructor_max_index =
build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
! constructor_index = convert (bitsizetype, bitsize_zero_node);
constructor_unfilled_index = constructor_index;
}
else
--- 4793,4799 ----
/* Vectors are like simple fixed-size arrays. */
constructor_max_index =
build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
! constructor_index = bitsize_zero_node;
constructor_unfilled_index = constructor_index;
}
else
*************** push_init_level (int implicit)
*** 4908,4914 ****
else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
{
constructor_type = TREE_TYPE (constructor_type);
! push_array_bounds (tree_low_cst (constructor_index, 0));
constructor_depth++;
}
--- 4910,4916 ----
else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
{
constructor_type = TREE_TYPE (constructor_type);
! push_array_bounds (tree_low_cst (constructor_index, 1));
constructor_depth++;
}
*************** process_init_element (struct c_expr valu
*** 6313,6319 ****
/* Now output the actual element. */
if (value.value)
{
! push_array_bounds (tree_low_cst (constructor_index, 0));
output_init_element (value.value, strict_string,
elttype, constructor_index, 1);
RESTORE_SPELLING_DEPTH (constructor_depth);
--- 6315,6321 ----
/* Now output the actual element. */
if (value.value)
{
! push_array_bounds (tree_low_cst (constructor_index, 1));
output_init_element (value.value, strict_string,
elttype, constructor_index, 1);
RESTORE_SPELLING_DEPTH (constructor_depth);
diff -Nrcpad gcc-4.0.3/gcc/doc/contrib.texi gcc-4.0.4/gcc/doc/contrib.texi
*** gcc-4.0.3/gcc/doc/contrib.texi 2006-02-11 19:21:33.000000000 +0000
--- gcc-4.0.4/gcc/doc/contrib.texi 2007-01-17 19:26:08.000000000 +0000
***************
*** 1,5 ****
@c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,
! @c 2001,2002,2003,2004,2005 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
--- 1,5 ----
@c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,
! @c 2001,2002,2003,2004,2005,2007 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
*************** improvements, and string clean up and te
*** 543,549 ****
@item
All of the Mauve project
! @uref{http://sources.redhat.com/cgi-bin/cvsweb.cgi/~checkout~/mauve/THANKS?rev=1.2&cvsroot=mauve&only_with_tag=HEAD,,contributors},
for Java test code.
@item
--- 543,549 ----
@item
All of the Mauve project
! @uref{http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/mauve/THANKS?rev=1.2&cvsroot=mauve&only_with_tag=HEAD,,contributors},
for Java test code.
@item
diff -Nrcpad gcc-4.0.3/gcc/doc/cpp.1 gcc-4.0.4/gcc/doc/cpp.1
*** gcc-4.0.3/gcc/doc/cpp.1 2006-03-09 20:52:35.000000000 +0000
--- gcc-4.0.4/gcc/doc/cpp.1 2007-01-31 10:51:40.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "CPP 1"
! .TH CPP 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
cpp \- The C Preprocessor
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "CPP 1"
! .TH CPP 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
cpp \- The C Preprocessor
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/cpp.info gcc-4.0.4/gcc/doc/cpp.info
*** gcc-4.0.3/gcc/doc/cpp.info 2006-03-09 20:52:34.000000000 +0000
--- gcc-4.0.4/gcc/doc/cpp.info 2007-01-31 10:51:36.000000000 +0000
***************
*** 1,5 ****
This is doc/cpp.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/doc/cpp.texi.
Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
--- 1,5 ----
This is doc/cpp.info, produced by makeinfo version 4.8 from
! /home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/doc/cpp.texi.
Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
*************** it.
*** 3405,3411 ****
Currently, CPP requires its input to be ASCII or UTF-8. The
execution character set may be controlled by the user, with the
! `-ftarget-charset' and `-ftarget-wide-charset' options.
* Identifier characters.
--- 3405,3411 ----
Currently, CPP requires its input to be ASCII or UTF-8. The
execution character set may be controlled by the user, with the
! `-fexec-charset' and `-fwide-exec-charset' options.
* Identifier characters.
*************** Concept Index
*** 5110,5189 ****
Tag Table:
! Node: Top1085
! Node: Overview3769
! Node: Character sets6590
! Ref: Character sets-Footnote-19049
! Node: Initial processing9230
! Ref: trigraphs10789
! Node: Tokenization14991
! Ref: Tokenization-Footnote-122046
! Node: The preprocessing language22157
! Node: Header Files25035
! Node: Include Syntax26915
! Node: Include Operation28552
! Node: Search Path30400
! Node: Once-Only Headers33590
! Node: Computed Includes35235
! Node: Wrapper Headers38379
! Node: System Headers40805
! Node: Macros42855
! Node: Object-like Macros43996
! Node: Function-like Macros47586
! Node: Macro Arguments49202
! Node: Stringification53347
! Node: Concatenation56553
! Node: Variadic Macros59661
! Node: Predefined Macros64448
! Node: Standard Predefined Macros65036
! Node: Common Predefined Macros70972
! Node: System-specific Predefined Macros78925
! Node: C++ Named Operators80946
! Node: Undefining and Redefining Macros81910
! Node: Directives Within Macro Arguments84014
! Node: Macro Pitfalls85562
! Node: Misnesting86095
! Node: Operator Precedence Problems87207
! Node: Swallowing the Semicolon89073
! Node: Duplication of Side Effects91096
! Node: Self-Referential Macros93279
! Node: Argument Prescan95688
! Node: Newlines in Arguments99442
! Node: Conditionals100393
! Node: Conditional Uses102223
! Node: Conditional Syntax103581
! Node: Ifdef103901
! Node: If107062
! Node: Defined109366
! Node: Else110649
! Node: Elif111219
! Node: Deleted Code112508
! Node: Diagnostics113755
! Node: Line Control115372
! Node: Pragmas119176
! Node: Other Directives123446
! Node: Preprocessor Output124639
! Node: Traditional Mode127840
! Node: Traditional lexical analysis128898
! Node: Traditional macros131401
! Node: Traditional miscellany135203
! Node: Traditional warnings136200
! Node: Implementation Details138397
! Node: Implementation-defined behavior139018
! Ref: Identifier characters139755
! Node: Implementation limits142676
! Node: Obsolete Features145350
! Node: Assertions145805
! Node: Obsolete once-only headers148346
! Node: Differences from previous versions150081
! Node: Invocation154289
! Ref: Wtrigraphs158620
! Ref: dashMF163404
! Ref: fdollars-in-identifiers171164
! Node: Environment Variables178622
! Node: GNU Free Documentation License181588
! Node: Index of Directives204011
! Node: Option Index205940
! Node: Concept Index211832
End Tag Table
--- 5110,5189 ----
Tag Table:
! Node: Top1082
! Node: Overview3766
! Node: Character sets6587
! Ref: Character sets-Footnote-19046
! Node: Initial processing9227
! Ref: trigraphs10786
! Node: Tokenization14988
! Ref: Tokenization-Footnote-122043
! Node: The preprocessing language22154
! Node: Header Files25032
! Node: Include Syntax26912
! Node: Include Operation28549
! Node: Search Path30397
! Node: Once-Only Headers33587
! Node: Computed Includes35232
! Node: Wrapper Headers38376
! Node: System Headers40802
! Node: Macros42852
! Node: Object-like Macros43993
! Node: Function-like Macros47583
! Node: Macro Arguments49199
! Node: Stringification53344
! Node: Concatenation56550
! Node: Variadic Macros59658
! Node: Predefined Macros64445
! Node: Standard Predefined Macros65033
! Node: Common Predefined Macros70969
! Node: System-specific Predefined Macros78922
! Node: C++ Named Operators80943
! Node: Undefining and Redefining Macros81907
! Node: Directives Within Macro Arguments84011
! Node: Macro Pitfalls85559
! Node: Misnesting86092
! Node: Operator Precedence Problems87204
! Node: Swallowing the Semicolon89070
! Node: Duplication of Side Effects91093
! Node: Self-Referential Macros93276
! Node: Argument Prescan95685
! Node: Newlines in Arguments99439
! Node: Conditionals100390
! Node: Conditional Uses102220
! Node: Conditional Syntax103578
! Node: Ifdef103898
! Node: If107059
! Node: Defined109363
! Node: Else110646
! Node: Elif111216
! Node: Deleted Code112505
! Node: Diagnostics113752
! Node: Line Control115369
! Node: Pragmas119173
! Node: Other Directives123443
! Node: Preprocessor Output124636
! Node: Traditional Mode127837
! Node: Traditional lexical analysis128895
! Node: Traditional macros131398
! Node: Traditional miscellany135200
! Node: Traditional warnings136197
! Node: Implementation Details138394
! Node: Implementation-defined behavior139015
! Ref: Identifier characters139748
! Node: Implementation limits142669
! Node: Obsolete Features145343
! Node: Assertions145798
! Node: Obsolete once-only headers148339
! Node: Differences from previous versions150074
! Node: Invocation154282
! Ref: Wtrigraphs158613
! Ref: dashMF163397
! Ref: fdollars-in-identifiers171157
! Node: Environment Variables178615
! Node: GNU Free Documentation License181581
! Node: Index of Directives204004
! Node: Option Index205933
! Node: Concept Index211825
End Tag Table
diff -Nrcpad gcc-4.0.3/gcc/doc/cppinternals.info gcc-4.0.4/gcc/doc/cppinternals.info
*** gcc-4.0.3/gcc/doc/cppinternals.info 2006-03-09 20:52:34.000000000 +0000
--- gcc-4.0.4/gcc/doc/cppinternals.info 2007-01-31 10:51:38.000000000 +0000
***************
*** 1,5 ****
This is doc/cppinternals.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/doc/cppinternals.texi.
INFO-DIR-SECTION Programming
START-INFO-DIR-ENTRY
--- 1,5 ----
This is doc/cppinternals.info, produced by makeinfo version 4.8 from
! /home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/doc/cppinternals.texi.
INFO-DIR-SECTION Programming
START-INFO-DIR-ENTRY
*************** Concept Index
*** 1019,1035 ****
Tag Table:
! Node: Top977
! Node: Conventions2662
! Node: Lexer3604
! Ref: Invalid identifiers11517
! Ref: Lexing a line13466
! Node: Hash Nodes18239
! Node: Macro Expansion21118
! Node: Token Spacing30065
! Node: Line Numbering35925
! Node: Guard Macros40010
! Node: Files44805
! Node: Concept Index48271
End Tag Table
--- 1019,1035 ----
Tag Table:
! Node: Top974
! Node: Conventions2659
! Node: Lexer3601
! Ref: Invalid identifiers11514
! Ref: Lexing a line13463
! Node: Hash Nodes18236
! Node: Macro Expansion21115
! Node: Token Spacing30062
! Node: Line Numbering35922
! Node: Guard Macros40007
! Node: Files44802
! Node: Concept Index48268
End Tag Table
diff -Nrcpad gcc-4.0.3/gcc/doc/cpp.texi gcc-4.0.4/gcc/doc/cpp.texi
*** gcc-4.0.3/gcc/doc/cpp.texi 2005-04-14 17:17:30.000000000 +0000
--- gcc-4.0.4/gcc/doc/cpp.texi 2006-09-11 08:34:36.000000000 +0000
*************** execution character set.
*** 3757,3763 ****
Currently, CPP requires its input to be ASCII or UTF-8. The execution
character set may be controlled by the user, with the
! @option{-ftarget-charset} and @option{-ftarget-wide-charset} options.
@item Identifier characters.
@anchor{Identifier characters}
--- 3757,3763 ----
Currently, CPP requires its input to be ASCII or UTF-8. The execution
character set may be controlled by the user, with the
! @option{-fexec-charset} and @option{-fwide-exec-charset} options.
@item Identifier characters.
@anchor{Identifier characters}
diff -Nrcpad gcc-4.0.3/gcc/doc/extend.texi gcc-4.0.4/gcc/doc/extend.texi
*** gcc-4.0.3/gcc/doc/extend.texi 2005-07-20 10:36:32.000000000 +0000
--- gcc-4.0.4/gcc/doc/extend.texi 2006-10-16 08:40:32.000000000 +0000
*************** Generates the @code{movhps} machine inst
*** 6287,6302 ****
Generates the @code{movlps} machine instruction as a store to memory.
@end table
The following built-in functions are available when @option{-msse3} is used.
All of them generate the machine instruction that is part of the name.
@smallexample
v2df __builtin_ia32_addsubpd (v2df, v2df)
! v2df __builtin_ia32_addsubps (v2df, v2df)
v2df __builtin_ia32_haddpd (v2df, v2df)
! v2df __builtin_ia32_haddps (v2df, v2df)
v2df __builtin_ia32_hsubpd (v2df, v2df)
! v2df __builtin_ia32_hsubps (v2df, v2df)
v16qi __builtin_ia32_lddqu (char const *)
void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
v2df __builtin_ia32_movddup (v2df)
--- 6287,6461 ----
Generates the @code{movlps} machine instruction as a store to memory.
@end table
+ The following built-in functions are available when @option{-msse2} is used.
+ All of them generate the machine instruction that is part of the name.
+
+ @smallexample
+ int __builtin_ia32_comisdeq (v2df, v2df)
+ int __builtin_ia32_comisdlt (v2df, v2df)
+ int __builtin_ia32_comisdle (v2df, v2df)
+ int __builtin_ia32_comisdgt (v2df, v2df)
+ int __builtin_ia32_comisdge (v2df, v2df)
+ int __builtin_ia32_comisdneq (v2df, v2df)
+ int __builtin_ia32_ucomisdeq (v2df, v2df)
+ int __builtin_ia32_ucomisdlt (v2df, v2df)
+ int __builtin_ia32_ucomisdle (v2df, v2df)
+ int __builtin_ia32_ucomisdgt (v2df, v2df)
+ int __builtin_ia32_ucomisdge (v2df, v2df)
+ int __builtin_ia32_ucomisdneq (v2df, v2df)
+ v2df __builtin_ia32_cmpeqpd (v2df, v2df)
+ v2df __builtin_ia32_cmpltpd (v2df, v2df)
+ v2df __builtin_ia32_cmplepd (v2df, v2df)
+ v2df __builtin_ia32_cmpgtpd (v2df, v2df)
+ v2df __builtin_ia32_cmpgepd (v2df, v2df)
+ v2df __builtin_ia32_cmpunordpd (v2df, v2df)
+ v2df __builtin_ia32_cmpneqpd (v2df, v2df)
+ v2df __builtin_ia32_cmpnltpd (v2df, v2df)
+ v2df __builtin_ia32_cmpnlepd (v2df, v2df)
+ v2df __builtin_ia32_cmpngtpd (v2df, v2df)
+ v2df __builtin_ia32_cmpngepd (v2df, v2df)
+ v2df __builtin_ia32_cmpordpd (v2df, v2df)
+ v2df __builtin_ia32_cmpeqsd (v2df, v2df)
+ v2df __builtin_ia32_cmpltsd (v2df, v2df)
+ v2df __builtin_ia32_cmplesd (v2df, v2df)
+ v2df __builtin_ia32_cmpunordsd (v2df, v2df)
+ v2df __builtin_ia32_cmpneqsd (v2df, v2df)
+ v2df __builtin_ia32_cmpnltsd (v2df, v2df)
+ v2df __builtin_ia32_cmpnlesd (v2df, v2df)
+ v2df __builtin_ia32_cmpordsd (v2df, v2df)
+ v2di __builtin_ia32_paddq (v2di, v2di)
+ v2di __builtin_ia32_psubq (v2di, v2di)
+ v2df __builtin_ia32_addpd (v2df, v2df)
+ v2df __builtin_ia32_subpd (v2df, v2df)
+ v2df __builtin_ia32_mulpd (v2df, v2df)
+ v2df __builtin_ia32_divpd (v2df, v2df)
+ v2df __builtin_ia32_addsd (v2df, v2df)
+ v2df __builtin_ia32_subsd (v2df, v2df)
+ v2df __builtin_ia32_mulsd (v2df, v2df)
+ v2df __builtin_ia32_divsd (v2df, v2df)
+ v2df __builtin_ia32_minpd (v2df, v2df)
+ v2df __builtin_ia32_maxpd (v2df, v2df)
+ v2df __builtin_ia32_minsd (v2df, v2df)
+ v2df __builtin_ia32_maxsd (v2df, v2df)
+ v2df __builtin_ia32_andpd (v2df, v2df)
+ v2df __builtin_ia32_andnpd (v2df, v2df)
+ v2df __builtin_ia32_orpd (v2df, v2df)
+ v2df __builtin_ia32_xorpd (v2df, v2df)
+ v2df __builtin_ia32_movsd (v2df, v2df)
+ v2df __builtin_ia32_unpckhpd (v2df, v2df)
+ v2df __builtin_ia32_unpcklpd (v2df, v2df)
+ v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
+ v4si __builtin_ia32_paddd128 (v4si, v4si)
+ v2di __builtin_ia32_paddq128 (v2di, v2di)
+ v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
+ v4si __builtin_ia32_psubd128 (v4si, v4si)
+ v2di __builtin_ia32_psubq128 (v2di, v2di)
+ v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
+ v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
+ v2di __builtin_ia32_pand128 (v2di, v2di)
+ v2di __builtin_ia32_pandn128 (v2di, v2di)
+ v2di __builtin_ia32_por128 (v2di, v2di)
+ v2di __builtin_ia32_pxor128 (v2di, v2di)
+ v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
+ v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
+ v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
+ v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
+ v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
+ v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
+ v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
+ v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
+ v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
+ v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
+ v4si __builtin_ia32_punpckldq128 (v4si, v4si)
+ v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
+ v16qi __builtin_ia32_packsswb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_packssdw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_packuswb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
+ void __builtin_ia32_maskmovdqu (v16qi, v16qi)
+ v2df __builtin_ia32_loadupd (double *)
+ void __builtin_ia32_storeupd (double *, v2df)
+ v2df __builtin_ia32_loadhpd (v2df, double *)
+ v2df __builtin_ia32_loadlpd (v2df, double *)
+ int __builtin_ia32_movmskpd (v2df)
+ int __builtin_ia32_pmovmskb128 (v16qi)
+ void __builtin_ia32_movnti (int *, int)
+ void __builtin_ia32_movntpd (double *, v2df)
+ void __builtin_ia32_movntdq (v2df *, v2df)
+ v4si __builtin_ia32_pshufd (v4si, int)
+ v8hi __builtin_ia32_pshuflw (v8hi, int)
+ v8hi __builtin_ia32_pshufhw (v8hi, int)
+ v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
+ v2df __builtin_ia32_sqrtpd (v2df)
+ v2df __builtin_ia32_sqrtsd (v2df)
+ v2df __builtin_ia32_shufpd (v2df, v2df, int)
+ v2df __builtin_ia32_cvtdq2pd (v4si)
+ v4sf __builtin_ia32_cvtdq2ps (v4si)
+ v4si __builtin_ia32_cvtpd2dq (v2df)
+ v2si __builtin_ia32_cvtpd2pi (v2df)
+ v4sf __builtin_ia32_cvtpd2ps (v2df)
+ v4si __builtin_ia32_cvttpd2dq (v2df)
+ v2si __builtin_ia32_cvttpd2pi (v2df)
+ v2df __builtin_ia32_cvtpi2pd (v2si)
+ int __builtin_ia32_cvtsd2si (v2df)
+ int __builtin_ia32_cvttsd2si (v2df)
+ long long __builtin_ia32_cvtsd2si64 (v2df)
+ long long __builtin_ia32_cvttsd2si64 (v2df)
+ v4si __builtin_ia32_cvtps2dq (v4sf)
+ v2df __builtin_ia32_cvtps2pd (v4sf)
+ v4si __builtin_ia32_cvttps2dq (v4sf)
+ v2df __builtin_ia32_cvtsi2sd (v2df, int)
+ v2df __builtin_ia32_cvtsi642sd (v2df, long long)
+ v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
+ v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
+ void __builtin_ia32_clflush (const void *)
+ void __builtin_ia32_lfence (void)
+ void __builtin_ia32_mfence (void)
+ v16qi __builtin_ia32_loaddqu (const char *)
+ void __builtin_ia32_storedqu (char *, v16qi)
+ unsigned long long __builtin_ia32_pmuludq (v2si, v2si)
+ v2di __builtin_ia32_pmuludq128 (v4si, v4si)
+ v8hi __builtin_ia32_psllw128 (v8hi, v2di)
+ v4si __builtin_ia32_pslld128 (v4si, v2di)
+ v2di __builtin_ia32_psllq128 (v4si, v2di)
+ v8hi __builtin_ia32_psrlw128 (v8hi, v2di)
+ v4si __builtin_ia32_psrld128 (v4si, v2di)
+ v2di __builtin_ia32_psrlq128 (v2di, v2di)
+ v8hi __builtin_ia32_psraw128 (v8hi, v2di)
+ v4si __builtin_ia32_psrad128 (v4si, v2di)
+ v2di __builtin_ia32_pslldqi128 (v2di, int)
+ v8hi __builtin_ia32_psllwi128 (v8hi, int)
+ v4si __builtin_ia32_pslldi128 (v4si, int)
+ v2di __builtin_ia32_psllqi128 (v2di, int)
+ v2di __builtin_ia32_psrldqi128 (v2di, int)
+ v8hi __builtin_ia32_psrlwi128 (v8hi, int)
+ v4si __builtin_ia32_psrldi128 (v4si, int)
+ v2di __builtin_ia32_psrlqi128 (v2di, int)
+ v8hi __builtin_ia32_psrawi128 (v8hi, int)
+ v4si __builtin_ia32_psradi128 (v4si, int)
+ v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
+ @end smallexample
+
The following built-in functions are available when @option{-msse3} is used.
All of them generate the machine instruction that is part of the name.
@smallexample
v2df __builtin_ia32_addsubpd (v2df, v2df)
! v4sf __builtin_ia32_addsubps (v4sf, v4sf)
v2df __builtin_ia32_haddpd (v2df, v2df)
! v4sf __builtin_ia32_haddps (v4sf, v4sf)
v2df __builtin_ia32_hsubpd (v2df, v2df)
! v4sf __builtin_ia32_hsubps (v4sf, v4sf)
v16qi __builtin_ia32_lddqu (char const *)
void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
v2df __builtin_ia32_movddup (v2df)
diff -Nrcpad gcc-4.0.3/gcc/doc/fsf-funding.7 gcc-4.0.4/gcc/doc/fsf-funding.7
*** gcc-4.0.3/gcc/doc/fsf-funding.7 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/fsf-funding.7 2007-01-31 10:51:52.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "FSF-FUNDING 7"
! .TH FSF-FUNDING 7 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
fsf\-funding \- Funding Free Software
.SH "DESCRIPTION"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "FSF-FUNDING 7"
! .TH FSF-FUNDING 7 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
fsf\-funding \- Funding Free Software
.SH "DESCRIPTION"
diff -Nrcpad gcc-4.0.3/gcc/doc/g++.1 gcc-4.0.4/gcc/doc/g++.1
*** gcc-4.0.3/gcc/doc/g++.1 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/g++.1 2007-01-31 10:51:52.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GCC 1"
! .TH GCC 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gcc \- GNU project C and C++ compiler
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GCC 1"
! .TH GCC 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gcc \- GNU project C and C++ compiler
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/gcc.1 gcc-4.0.4/gcc/doc/gcc.1
*** gcc-4.0.3/gcc/doc/gcc.1 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/gcc.1 2007-01-31 10:51:51.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GCC 1"
! .TH GCC 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gcc \- GNU project C and C++ compiler
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GCC 1"
! .TH GCC 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gcc \- GNU project C and C++ compiler
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/gcc.info gcc-4.0.4/gcc/doc/gcc.info
*** gcc-4.0.3/gcc/doc/gcc.info 2006-03-09 20:52:34.000000000 +0000
--- gcc-4.0.4/gcc/doc/gcc.info 2007-01-31 10:51:37.000000000 +0000
***************
*** 1,5 ****
This is doc/gcc.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/doc/gcc.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
--- 1,5 ----
This is doc/gcc.info, produced by makeinfo version 4.8 from
! /home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/doc/gcc.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
*************** Introduction
*** 58,64 ****
This manual documents how to use the GNU compilers, as well as their
features and incompatibilities, and how to report bugs. It corresponds
! to GCC version 4.0.3. The internals of the GNU compilers, including
how to port them to new targets and some information about how to write
front ends for new languages, are documented in a separate manual.
*Note Introduction: (gccint)Top.
--- 58,64 ----
This manual documents how to use the GNU compilers, as well as their
features and incompatibilities, and how to report bugs. It corresponds
! to GCC version 4.0.4. The internals of the GNU compilers, including
how to port them to new targets and some information about how to write
front ends for new languages, are documented in a separate manual.
*Note Introduction: (gccint)Top.
*************** All of them generate the machine instruc
*** 19378,19392 ****
`void __builtin_ia32_storelps (v4sf, v2si *)'
Generates the `movlps' machine instruction as a store to memory.
The following built-in functions are available when `-msse3' is used.
All of them generate the machine instruction that is part of the name.
v2df __builtin_ia32_addsubpd (v2df, v2df)
! v2df __builtin_ia32_addsubps (v2df, v2df)
v2df __builtin_ia32_haddpd (v2df, v2df)
! v2df __builtin_ia32_haddps (v2df, v2df)
v2df __builtin_ia32_hsubpd (v2df, v2df)
! v2df __builtin_ia32_hsubps (v2df, v2df)
v16qi __builtin_ia32_lddqu (char const *)
void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
v2df __builtin_ia32_movddup (v2df)
--- 19378,19549 ----
`void __builtin_ia32_storelps (v4sf, v2si *)'
Generates the `movlps' machine instruction as a store to memory.
+ The following built-in functions are available when `-msse2' is used.
+ All of them generate the machine instruction that is part of the name.
+
+ int __builtin_ia32_comisdeq (v2df, v2df)
+ int __builtin_ia32_comisdlt (v2df, v2df)
+ int __builtin_ia32_comisdle (v2df, v2df)
+ int __builtin_ia32_comisdgt (v2df, v2df)
+ int __builtin_ia32_comisdge (v2df, v2df)
+ int __builtin_ia32_comisdneq (v2df, v2df)
+ int __builtin_ia32_ucomisdeq (v2df, v2df)
+ int __builtin_ia32_ucomisdlt (v2df, v2df)
+ int __builtin_ia32_ucomisdle (v2df, v2df)
+ int __builtin_ia32_ucomisdgt (v2df, v2df)
+ int __builtin_ia32_ucomisdge (v2df, v2df)
+ int __builtin_ia32_ucomisdneq (v2df, v2df)
+ v2df __builtin_ia32_cmpeqpd (v2df, v2df)
+ v2df __builtin_ia32_cmpltpd (v2df, v2df)
+ v2df __builtin_ia32_cmplepd (v2df, v2df)
+ v2df __builtin_ia32_cmpgtpd (v2df, v2df)
+ v2df __builtin_ia32_cmpgepd (v2df, v2df)
+ v2df __builtin_ia32_cmpunordpd (v2df, v2df)
+ v2df __builtin_ia32_cmpneqpd (v2df, v2df)
+ v2df __builtin_ia32_cmpnltpd (v2df, v2df)
+ v2df __builtin_ia32_cmpnlepd (v2df, v2df)
+ v2df __builtin_ia32_cmpngtpd (v2df, v2df)
+ v2df __builtin_ia32_cmpngepd (v2df, v2df)
+ v2df __builtin_ia32_cmpordpd (v2df, v2df)
+ v2df __builtin_ia32_cmpeqsd (v2df, v2df)
+ v2df __builtin_ia32_cmpltsd (v2df, v2df)
+ v2df __builtin_ia32_cmplesd (v2df, v2df)
+ v2df __builtin_ia32_cmpunordsd (v2df, v2df)
+ v2df __builtin_ia32_cmpneqsd (v2df, v2df)
+ v2df __builtin_ia32_cmpnltsd (v2df, v2df)
+ v2df __builtin_ia32_cmpnlesd (v2df, v2df)
+ v2df __builtin_ia32_cmpordsd (v2df, v2df)
+ v2di __builtin_ia32_paddq (v2di, v2di)
+ v2di __builtin_ia32_psubq (v2di, v2di)
+ v2df __builtin_ia32_addpd (v2df, v2df)
+ v2df __builtin_ia32_subpd (v2df, v2df)
+ v2df __builtin_ia32_mulpd (v2df, v2df)
+ v2df __builtin_ia32_divpd (v2df, v2df)
+ v2df __builtin_ia32_addsd (v2df, v2df)
+ v2df __builtin_ia32_subsd (v2df, v2df)
+ v2df __builtin_ia32_mulsd (v2df, v2df)
+ v2df __builtin_ia32_divsd (v2df, v2df)
+ v2df __builtin_ia32_minpd (v2df, v2df)
+ v2df __builtin_ia32_maxpd (v2df, v2df)
+ v2df __builtin_ia32_minsd (v2df, v2df)
+ v2df __builtin_ia32_maxsd (v2df, v2df)
+ v2df __builtin_ia32_andpd (v2df, v2df)
+ v2df __builtin_ia32_andnpd (v2df, v2df)
+ v2df __builtin_ia32_orpd (v2df, v2df)
+ v2df __builtin_ia32_xorpd (v2df, v2df)
+ v2df __builtin_ia32_movsd (v2df, v2df)
+ v2df __builtin_ia32_unpckhpd (v2df, v2df)
+ v2df __builtin_ia32_unpcklpd (v2df, v2df)
+ v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
+ v4si __builtin_ia32_paddd128 (v4si, v4si)
+ v2di __builtin_ia32_paddq128 (v2di, v2di)
+ v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
+ v4si __builtin_ia32_psubd128 (v4si, v4si)
+ v2di __builtin_ia32_psubq128 (v2di, v2di)
+ v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
+ v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
+ v2di __builtin_ia32_pand128 (v2di, v2di)
+ v2di __builtin_ia32_pandn128 (v2di, v2di)
+ v2di __builtin_ia32_por128 (v2di, v2di)
+ v2di __builtin_ia32_pxor128 (v2di, v2di)
+ v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
+ v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
+ v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
+ v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
+ v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
+ v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
+ v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
+ v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
+ v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
+ v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
+ v4si __builtin_ia32_punpckldq128 (v4si, v4si)
+ v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
+ v16qi __builtin_ia32_packsswb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_packssdw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_packuswb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
+ void __builtin_ia32_maskmovdqu (v16qi, v16qi)
+ v2df __builtin_ia32_loadupd (double *)
+ void __builtin_ia32_storeupd (double *, v2df)
+ v2df __builtin_ia32_loadhpd (v2df, double *)
+ v2df __builtin_ia32_loadlpd (v2df, double *)
+ int __builtin_ia32_movmskpd (v2df)
+ int __builtin_ia32_pmovmskb128 (v16qi)
+ void __builtin_ia32_movnti (int *, int)
+ void __builtin_ia32_movntpd (double *, v2df)
+ void __builtin_ia32_movntdq (v2df *, v2df)
+ v4si __builtin_ia32_pshufd (v4si, int)
+ v8hi __builtin_ia32_pshuflw (v8hi, int)
+ v8hi __builtin_ia32_pshufhw (v8hi, int)
+ v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
+ v2df __builtin_ia32_sqrtpd (v2df)
+ v2df __builtin_ia32_sqrtsd (v2df)
+ v2df __builtin_ia32_shufpd (v2df, v2df, int)
+ v2df __builtin_ia32_cvtdq2pd (v4si)
+ v4sf __builtin_ia32_cvtdq2ps (v4si)
+ v4si __builtin_ia32_cvtpd2dq (v2df)
+ v2si __builtin_ia32_cvtpd2pi (v2df)
+ v4sf __builtin_ia32_cvtpd2ps (v2df)
+ v4si __builtin_ia32_cvttpd2dq (v2df)
+ v2si __builtin_ia32_cvttpd2pi (v2df)
+ v2df __builtin_ia32_cvtpi2pd (v2si)
+ int __builtin_ia32_cvtsd2si (v2df)
+ int __builtin_ia32_cvttsd2si (v2df)
+ long long __builtin_ia32_cvtsd2si64 (v2df)
+ long long __builtin_ia32_cvttsd2si64 (v2df)
+ v4si __builtin_ia32_cvtps2dq (v4sf)
+ v2df __builtin_ia32_cvtps2pd (v4sf)
+ v4si __builtin_ia32_cvttps2dq (v4sf)
+ v2df __builtin_ia32_cvtsi2sd (v2df, int)
+ v2df __builtin_ia32_cvtsi642sd (v2df, long long)
+ v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
+ v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
+ void __builtin_ia32_clflush (const void *)
+ void __builtin_ia32_lfence (void)
+ void __builtin_ia32_mfence (void)
+ v16qi __builtin_ia32_loaddqu (const char *)
+ void __builtin_ia32_storedqu (char *, v16qi)
+ unsigned long long __builtin_ia32_pmuludq (v2si, v2si)
+ v2di __builtin_ia32_pmuludq128 (v4si, v4si)
+ v8hi __builtin_ia32_psllw128 (v8hi, v2di)
+ v4si __builtin_ia32_pslld128 (v4si, v2di)
+ v2di __builtin_ia32_psllq128 (v4si, v2di)
+ v8hi __builtin_ia32_psrlw128 (v8hi, v2di)
+ v4si __builtin_ia32_psrld128 (v4si, v2di)
+ v2di __builtin_ia32_psrlq128 (v2di, v2di)
+ v8hi __builtin_ia32_psraw128 (v8hi, v2di)
+ v4si __builtin_ia32_psrad128 (v4si, v2di)
+ v2di __builtin_ia32_pslldqi128 (v2di, int)
+ v8hi __builtin_ia32_psllwi128 (v8hi, int)
+ v4si __builtin_ia32_pslldi128 (v4si, int)
+ v2di __builtin_ia32_psllqi128 (v2di, int)
+ v2di __builtin_ia32_psrldqi128 (v2di, int)
+ v8hi __builtin_ia32_psrlwi128 (v8hi, int)
+ v4si __builtin_ia32_psrldi128 (v4si, int)
+ v2di __builtin_ia32_psrlqi128 (v2di, int)
+ v8hi __builtin_ia32_psrawi128 (v8hi, int)
+ v4si __builtin_ia32_psradi128 (v4si, int)
+ v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
+
The following built-in functions are available when `-msse3' is used.
All of them generate the machine instruction that is part of the name.
v2df __builtin_ia32_addsubpd (v2df, v2df)
! v4sf __builtin_ia32_addsubps (v4sf, v4sf)
v2df __builtin_ia32_haddpd (v2df, v2df)
! v4sf __builtin_ia32_haddps (v4sf, v4sf)
v2df __builtin_ia32_hsubpd (v2df, v2df)
! v4sf __builtin_ia32_hsubps (v4sf, v4sf)
v16qi __builtin_ia32_lddqu (char const *)
void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
v2df __builtin_ia32_movddup (v2df)
*************** Keyword Index
*** 29925,30149 ****
Tag Table:
! Node: Top2058
! Node: G++ and GCC3740
! Node: Standards5805
! Node: Invoking GCC12932
! Node: Option Summary16702
! Node: Overall Options43042
! Node: Invoking G++51344
! Node: C Dialect Options52966
! Node: C++ Dialect Options63976
! Node: Objective-C and Objective-C++ Dialect Options81566
! Node: Language Independent Options91016
! Node: Warning Options92827
! Node: Debugging Options134362
! Node: Optimize Options163593
! Node: Preprocessor Options232913
! Ref: Wtrigraphs236877
! Ref: dashMF241634
! Ref: fdollars-in-identifiers250530
! Node: Assembler Options258391
! Node: Link Options259096
! Ref: Link Options-Footnote-1267348
! Node: Directory Options267682
! Node: Spec Files273049
! Node: Target Options292337
! Node: Submodel Options293643
! Node: ARC Options295392
! Node: ARM Options296582
! Node: AVR Options307790
! Node: Blackfin Options309923
! Node: CRIS Options312691
! Node: Darwin Options316913
! Node: DEC Alpha Options323226
! Node: DEC Alpha/VMS Options334704
! Node: FRV Options335089
! Node: H8/300 Options341473
! Node: HPPA Options342534
! Node: i386 and x86-64 Options352127
! Node: IA-64 Options369880
! Node: M32R/D Options373873
! Node: M680x0 Options377461
! Node: M68hc1x Options384694
! Node: MCore Options386262
! Node: MIPS Options387283
! Node: MMIX Options401345
! Node: MN10300 Options403827
! Node: NS32K Options404887
! Node: PDP-11 Options409432
! Node: PowerPC Options411269
! Node: RS/6000 and PowerPC Options411503
! Node: S/390 and zSeries Options437333
! Node: SH Options444381
! Node: SPARC Options447643
! Node: System V Options458274
! Node: TMS320C3x/C4x Options459108
! Node: V850 Options464633
! Node: VAX Options467778
! Node: x86-64 Options468325
! Node: Xstormy16 Options468539
! Node: Xtensa Options468828
! Node: zSeries Options472668
! Node: Code Gen Options472864
! Node: Environment Variables492124
! Node: Precompiled Headers499796
! Node: Running Protoize506347
! Node: C Implementation512684
! Node: Translation implementation514347
! Node: Environment implementation514921
! Node: Identifiers implementation515471
! Node: Characters implementation516525
! Node: Integers implementation519331
! Node: Floating point implementation521156
! Node: Arrays and pointers implementation524085
! Ref: Arrays and pointers implementation-Footnote-1525520
! Node: Hints implementation525644
! Node: Structures unions enumerations and bit-fields implementation527110
! Node: Qualifiers implementation529073
! Node: Declarators implementation529456
! Node: Statements implementation529798
! Node: Preprocessing directives implementation530125
! Node: Library functions implementation532230
! Node: Architecture implementation532870
! Node: Locale-specific behavior implementation533573
! Node: C Extensions533878
! Node: Statement Exprs538057
! Node: Local Labels542570
! Node: Labels as Values545549
! Ref: Labels as Values-Footnote-1547603
! Node: Nested Functions547786
! Node: Constructing Calls551680
! Node: Typeof554016
! Node: Conditionals557182
! Node: Long Long558073
! Node: Complex559574
! Node: Hex Floats562140
! Node: Zero Length563175
! Node: Empty Structures566452
! Node: Variable Length566868
! Node: Variadic Macros569635
! Node: Escaped Newlines572017
! Node: Subscripting572856
! Node: Pointer Arith573579
! Node: Initializers574147
! Node: Compound Literals574643
! Node: Designated Inits576805
! Node: Case Ranges580460
! Node: Cast to Union581143
! Node: Mixed Declarations582239
! Node: Function Attributes582745
! Node: Attribute Syntax617332
! Node: Function Prototypes628416
! Node: C++ Comments630197
! Node: Dollar Signs630716
! Node: Character Escapes631181
! Node: Alignment631475
! Node: Variable Attributes632792
! Node: Type Attributes646239
! Node: Inline659657
! Node: Extended Asm664361
! Ref: Example of asm with clobbered asm reg670447
! Node: Constraints684543
! Node: Simple Constraints685393
! Node: Multi-Alternative691921
! Node: Modifiers693638
! Node: Machine Constraints696326
! Node: Asm Labels720296
! Node: Explicit Reg Vars721972
! Node: Global Reg Vars723580
! Node: Local Reg Vars728130
! Node: Alternate Keywords730571
! Node: Incomplete Enums731999
! Node: Function Names732756
! Node: Return Address734946
! Node: Vector Extensions737743
! Node: Offsetof741245
! Node: Other Builtins742030
! Node: Target Builtins763135
! Node: Alpha Built-in Functions763836
! Node: ARM Built-in Functions766828
! Node: Blackfin Built-in Functions773535
! Node: FR-V Built-in Functions774152
! Node: Argument Types774982
! Node: Directly-mapped Integer Functions776738
! Node: Directly-mapped Media Functions777820
! Node: Other Built-in Functions784852
! Node: X86 Built-in Functions786048
! Node: MIPS Paired-Single Support796440
! Node: Paired-Single Arithmetic798045
! Node: Paired-Single Built-in Functions798985
! Node: MIPS-3D Built-in Functions801649
! Node: PowerPC AltiVec Built-in Functions807018
! Node: SPARC VIS Built-in Functions908322
! Node: Target Format Checks909981
! Node: Solaris Format Checks910388
! Node: Pragmas910785
! Node: ARM Pragmas911352
! Node: RS/6000 and PowerPC Pragmas911970
! Node: Darwin Pragmas912711
! Node: Solaris Pragmas913778
! Node: Symbol-Renaming Pragmas914939
! Node: Structure-Packing Pragmas917561
! Node: Weak Pragmas918790
! Node: Unnamed Fields919565
! Node: Thread-Local921075
! Node: C99 Thread-Local Edits923159
! Node: C++98 Thread-Local Edits925171
! Node: C++ Extensions928616
! Node: Volatiles930188
! Node: Restricted Pointers933534
! Node: Vague Linkage935128
! Node: C++ Interface938784
! Ref: C++ Interface-Footnote-1943081
! Node: Template Instantiation943218
! Node: Bound member functions950230
! Node: C++ Attributes951773
! Node: Strong Using953413
! Node: Java Exceptions954662
! Node: Deprecated Features956058
! Node: Backwards Compatibility959037
! Node: Objective-C960392
! Node: Executing code before main960973
! Node: What you can and what you cannot do in +load963579
! Node: Type encoding965746
! Node: Garbage Collection968989
! Node: Constant string objects971613
! Node: compatibility_alias974121
! Node: Compatibility974999
! Node: Gcov981566
! Node: Gcov Intro982036
! Node: Invoking Gcov984752
! Node: Gcov and Optimization996603
! Node: Gcov Data Files999256
! Node: Trouble1000370
! Node: Actual Bugs1001910
! Node: Cross-Compiler Problems1002650
! Node: Interoperation1003064
! Node: Incompatibilities1010662
! Node: Fixed Headers1018812
! Node: Standard Libraries1020475
! Node: Disappointments1021847
! Node: C++ Misunderstandings1026205
! Node: Static Definitions1027024
! Node: Name lookup1028077
! Ref: Name lookup-Footnote-11032855
! Node: Temporaries1033042
! Node: Copy Assignment1035018
! Node: Protoize Caveats1036825
! Node: Non-bugs1040787
! Node: Warnings and Errors1051410
! Node: Bugs1053174
! Node: Bug Criteria1053738
! Node: Bug Reporting1055948
! Node: Service1056340
! Node: Contributing1057159
! Node: Funding1057899
! Node: GNU Project1060388
! Node: Copying1061034
! Node: GNU Free Documentation License1080184
! Node: Contributors1102580
! Node: Option Index1132949
! Node: Keyword Index1258663
End Tag Table
--- 30082,30306 ----
Tag Table:
! Node: Top2055
! Node: G++ and GCC3737
! Node: Standards5802
! Node: Invoking GCC12929
! Node: Option Summary16699
! Node: Overall Options43039
! Node: Invoking G++51341
! Node: C Dialect Options52963
! Node: C++ Dialect Options63973
! Node: Objective-C and Objective-C++ Dialect Options81563
! Node: Language Independent Options91013
! Node: Warning Options92824
! Node: Debugging Options134359
! Node: Optimize Options163590
! Node: Preprocessor Options232910
! Ref: Wtrigraphs236874
! Ref: dashMF241631
! Ref: fdollars-in-identifiers250527
! Node: Assembler Options258388
! Node: Link Options259093
! Ref: Link Options-Footnote-1267345
! Node: Directory Options267679
! Node: Spec Files273046
! Node: Target Options292334
! Node: Submodel Options293640
! Node: ARC Options295389
! Node: ARM Options296579
! Node: AVR Options307787
! Node: Blackfin Options309920
! Node: CRIS Options312688
! Node: Darwin Options316910
! Node: DEC Alpha Options323223
! Node: DEC Alpha/VMS Options334701
! Node: FRV Options335086
! Node: H8/300 Options341470
! Node: HPPA Options342531
! Node: i386 and x86-64 Options352124
! Node: IA-64 Options369877
! Node: M32R/D Options373870
! Node: M680x0 Options377458
! Node: M68hc1x Options384691
! Node: MCore Options386259
! Node: MIPS Options387280
! Node: MMIX Options401342
! Node: MN10300 Options403824
! Node: NS32K Options404884
! Node: PDP-11 Options409429
! Node: PowerPC Options411266
! Node: RS/6000 and PowerPC Options411500
! Node: S/390 and zSeries Options437330
! Node: SH Options444378
! Node: SPARC Options447640
! Node: System V Options458271
! Node: TMS320C3x/C4x Options459105
! Node: V850 Options464630
! Node: VAX Options467775
! Node: x86-64 Options468322
! Node: Xstormy16 Options468536
! Node: Xtensa Options468825
! Node: zSeries Options472665
! Node: Code Gen Options472861
! Node: Environment Variables492121
! Node: Precompiled Headers499793
! Node: Running Protoize506344
! Node: C Implementation512681
! Node: Translation implementation514344
! Node: Environment implementation514918
! Node: Identifiers implementation515468
! Node: Characters implementation516522
! Node: Integers implementation519328
! Node: Floating point implementation521153
! Node: Arrays and pointers implementation524082
! Ref: Arrays and pointers implementation-Footnote-1525517
! Node: Hints implementation525641
! Node: Structures unions enumerations and bit-fields implementation527107
! Node: Qualifiers implementation529070
! Node: Declarators implementation529453
! Node: Statements implementation529795
! Node: Preprocessing directives implementation530122
! Node: Library functions implementation532227
! Node: Architecture implementation532867
! Node: Locale-specific behavior implementation533570
! Node: C Extensions533875
! Node: Statement Exprs538054
! Node: Local Labels542567
! Node: Labels as Values545546
! Ref: Labels as Values-Footnote-1547600
! Node: Nested Functions547783
! Node: Constructing Calls551677
! Node: Typeof554013
! Node: Conditionals557179
! Node: Long Long558070
! Node: Complex559571
! Node: Hex Floats562137
! Node: Zero Length563172
! Node: Empty Structures566449
! Node: Variable Length566865
! Node: Variadic Macros569632
! Node: Escaped Newlines572014
! Node: Subscripting572853
! Node: Pointer Arith573576
! Node: Initializers574144
! Node: Compound Literals574640
! Node: Designated Inits576802
! Node: Case Ranges580457
! Node: Cast to Union581140
! Node: Mixed Declarations582236
! Node: Function Attributes582742
! Node: Attribute Syntax617329
! Node: Function Prototypes628413
! Node: C++ Comments630194
! Node: Dollar Signs630713
! Node: Character Escapes631178
! Node: Alignment631472
! Node: Variable Attributes632789
! Node: Type Attributes646236
! Node: Inline659654
! Node: Extended Asm664358
! Ref: Example of asm with clobbered asm reg670444
! Node: Constraints684540
! Node: Simple Constraints685390
! Node: Multi-Alternative691918
! Node: Modifiers693635
! Node: Machine Constraints696323
! Node: Asm Labels720293
! Node: Explicit Reg Vars721969
! Node: Global Reg Vars723577
! Node: Local Reg Vars728127
! Node: Alternate Keywords730568
! Node: Incomplete Enums731996
! Node: Function Names732753
! Node: Return Address734943
! Node: Vector Extensions737740
! Node: Offsetof741242
! Node: Other Builtins742027
! Node: Target Builtins763132
! Node: Alpha Built-in Functions763833
! Node: ARM Built-in Functions766825
! Node: Blackfin Built-in Functions773532
! Node: FR-V Built-in Functions774149
! Node: Argument Types774979
! Node: Directly-mapped Integer Functions776735
! Node: Directly-mapped Media Functions777817
! Node: Other Built-in Functions784849
! Node: X86 Built-in Functions786045
! Node: MIPS Paired-Single Support803727
! Node: Paired-Single Arithmetic805332
! Node: Paired-Single Built-in Functions806272
! Node: MIPS-3D Built-in Functions808936
! Node: PowerPC AltiVec Built-in Functions814305
! Node: SPARC VIS Built-in Functions915609
! Node: Target Format Checks917268
! Node: Solaris Format Checks917675
! Node: Pragmas918072
! Node: ARM Pragmas918639
! Node: RS/6000 and PowerPC Pragmas919257
! Node: Darwin Pragmas919998
! Node: Solaris Pragmas921065
! Node: Symbol-Renaming Pragmas922226
! Node: Structure-Packing Pragmas924848
! Node: Weak Pragmas926077
! Node: Unnamed Fields926852
! Node: Thread-Local928362
! Node: C99 Thread-Local Edits930446
! Node: C++98 Thread-Local Edits932458
! Node: C++ Extensions935903
! Node: Volatiles937475
! Node: Restricted Pointers940821
! Node: Vague Linkage942415
! Node: C++ Interface946071
! Ref: C++ Interface-Footnote-1950368
! Node: Template Instantiation950505
! Node: Bound member functions957517
! Node: C++ Attributes959060
! Node: Strong Using960700
! Node: Java Exceptions961949
! Node: Deprecated Features963345
! Node: Backwards Compatibility966324
! Node: Objective-C967679
! Node: Executing code before main968260
! Node: What you can and what you cannot do in +load970866
! Node: Type encoding973033
! Node: Garbage Collection976276
! Node: Constant string objects978900
! Node: compatibility_alias981408
! Node: Compatibility982286
! Node: Gcov988853
! Node: Gcov Intro989323
! Node: Invoking Gcov992039
! Node: Gcov and Optimization1003890
! Node: Gcov Data Files1006543
! Node: Trouble1007657
! Node: Actual Bugs1009197
! Node: Cross-Compiler Problems1009937
! Node: Interoperation1010351
! Node: Incompatibilities1017949
! Node: Fixed Headers1026099
! Node: Standard Libraries1027762
! Node: Disappointments1029134
! Node: C++ Misunderstandings1033492
! Node: Static Definitions1034311
! Node: Name lookup1035364
! Ref: Name lookup-Footnote-11040142
! Node: Temporaries1040329
! Node: Copy Assignment1042305
! Node: Protoize Caveats1044112
! Node: Non-bugs1048074
! Node: Warnings and Errors1058697
! Node: Bugs1060461
! Node: Bug Criteria1061025
! Node: Bug Reporting1063235
! Node: Service1063627
! Node: Contributing1064446
! Node: Funding1065186
! Node: GNU Project1067675
! Node: Copying1068321
! Node: GNU Free Documentation License1087471
! Node: Contributors1109867
! Node: Option Index1140236
! Node: Keyword Index1265950
End Tag Table
diff -Nrcpad gcc-4.0.3/gcc/doc/gccinstall.info gcc-4.0.4/gcc/doc/gccinstall.info
*** gcc-4.0.3/gcc/doc/gccinstall.info 2006-03-09 20:52:34.000000000 +0000
--- gcc-4.0.4/gcc/doc/gccinstall.info 2007-01-31 10:51:37.000000000 +0000
***************
*** 1,5 ****
This is doc/gccinstall.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/doc/install.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
--- 1,5 ----
This is doc/gccinstall.info, produced by makeinfo version 4.8 from
! /home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/doc/install.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
*************** The following options only apply to buil
*** 1045,1052 ****
`--without-headers'
Tells GCC not use any target headers from a libc when building a
cross compiler. When crossing to GNU/Linux, you need the headers
! so GCC can build the exception handling for libgcc. See CrossGCC
! for more information on this option.
`--with-libs'
`--with-libs=``DIR1 DIR2 ... DIRN'''
--- 1045,1051 ----
`--without-headers'
Tells GCC not use any target headers from a libc when building a
cross compiler. When crossing to GNU/Linux, you need the headers
! so GCC can build the exception handling for libgcc.
`--with-libs'
`--with-libs=``DIR1 DIR2 ... DIRN'''
*************** need to disable comparison in the `Makef
*** 1325,1334 ****
5.2 Building a cross compiler
=============================
! We recommend reading the crossgcc FAQ for information about building
! cross compilers.
!
! When building a cross compiler, it is not generally possible to do a
3-stage bootstrap of the compiler. This makes for an interesting
problem as parts of GCC can only be built with GCC.
--- 1324,1330 ----
5.2 Building a cross compiler
=============================
! When building a cross compiler, it is not generally possible to do a
3-stage bootstrap of the compiler. This makes for an interesting
problem as parts of GCC can only be built with GCC.
*************** GCC you first have to install a pre-buil
*** 2833,2846 ****
page for details.
The Solaris 2 `/bin/sh' will often fail to configure `libstdc++-v3',
! `boehm-gc' or `libjava'. We therefore recommend to use the following
! sequence of commands to bootstrap and install GCC:
% CONFIG_SHELL=/bin/ksh
% export CONFIG_SHELL
! and then proceed as described in the build instructions. In
! addition we strongly recommend specifying an absolute path to invoke
SRCDIR/configure.
Solaris 2 comes with a number of optional OS packages. Some of these
--- 2829,2842 ----
page for details.
The Solaris 2 `/bin/sh' will often fail to configure `libstdc++-v3',
! `boehm-gc' or `libjava'. We therefore recommend using the following
! initial sequence of commands
% CONFIG_SHELL=/bin/ksh
% export CONFIG_SHELL
! and proceed as described in the configure instructions. In addition
! we strongly recommend specifying an absolute path to invoke
SRCDIR/configure.
Solaris 2 comes with a number of optional OS packages. Some of these
*************** runtime in some cases for C++ programs.
*** 2873,2879 ****
because of a single bug. It has been fixed on the 2.15 branch in the
CVS repository. You can obtain a working version by checking out the
binutils-2_15-branch from the CVS repository or applying the patch
! `http://sources.redhat.com/ml/binutils-cvs/2004-09/msg00036.html' to the
release.
We recommend using GNU binutils 2.16 or later in conjunction with
--- 2869,2875 ----
because of a single bug. It has been fixed on the 2.15 branch in the
CVS repository. You can obtain a working version by checking out the
binutils-2_15-branch from the CVS repository or applying the patch
! `http://sourceware.org/ml/binutils-cvs/2004-09/msg00036.html' to the
release.
We recommend using GNU binutils 2.16 or later in conjunction with
*************** following:
*** 2968,2978 ****
To work around this problem, compile with `-gstabs+' instead of
plain `-g'.
! When configuring the GNU Multiple Precision Library (GMP) on a
! Solaris 7 or later system, the canonical target triplet must be
! specified as the `build' parameter on the configure line:
! ./configure --build=sparc-sun-solaris2.7 --prefix=xxx --enable-mpfr
sparc-sun-solaris2.7
====================
--- 2964,2977 ----
To work around this problem, compile with `-gstabs+' instead of
plain `-g'.
! When configuring the GNU Multiple Precision Library (GMP) or the MPFR
! library on a Solaris 7 or later system, the canonical target triplet
! must be specified as the `build' parameter on the configure line. This
! triplet can be obtained by invoking ./config.guess in the toplevel
! source directory of GCC (and not that of GMP or MPFR). For example on
! a Solaris 7 system:
! % ./configure --build=sparc-sun-solaris2.7 --prefix=xxx
sparc-sun-solaris2.7
====================
*************** mishandled unaligned relocations on `spa
*** 3035,3047 ****
sparc64-*-solaris2*
===================
! The following compiler flags must be specified in the configure step in
! order to bootstrap this target with the Sun compiler:
! % CC="cc -xildoff -xarch=v9" SRCDIR/configure [OPTIONS] [TARGET]
! `-xildoff' turns off the incremental linker, and `-xarch=v9'
! specifies the SPARC-V9 architecture to the Sun linker and assembler.
sparcv9-*-solaris2*
===================
--- 3034,3052 ----
sparc64-*-solaris2*
===================
! When configuring the GNU Multiple Precision Library (GMP) or the MPFR
! library, the canonical target triplet must be specified as the `build'
! parameter on the configure line. For example on a Solaris 7 system:
! % ./configure --build=sparc64-sun-solaris2.7 --prefix=xxx
! The following compiler flags must be specified in the configure step
! in order to bootstrap this target with the Sun compiler:
!
! % CC="cc -xarch=v9 -xildoff" SRCDIR/configure [OPTIONS] [TARGET]
!
! `-xarch=v9' specifies the SPARC-V9 architecture to the Sun toolchain
! and `-xildoff' turns off the incremental linker.
sparcv9-*-solaris2*
===================
*************** requirements would be likely to be accep
*** 3193,3200 ****
affect the support for more modern targets.
For some systems, old versions of GNU binutils may also be useful,
! and are available from `pub/binutils/old-releases' on
! sources.redhat.com mirror sites.
Some of the information on specific systems above relates to such
older systems, but much of the information about GCC on such systems
--- 3198,3205 ----
affect the support for more modern targets.
For some systems, old versions of GNU binutils may also be useful,
! and are available from `pub/binutils/old-releases' on sourceware.org
! mirror sites.
Some of the information on specific systems above relates to such
older systems, but much of the information about GCC on such systems
*************** Concept Index
*** 3831,3917 ****
Tag Table:
! Node: Top1924
! Node: Installing GCC2482
! Node: Prerequisites3997
! Node: Downloading the source10602
! Node: Configuration12283
! Ref: with-gnu-as25112
! Ref: with-as26299
! Ref: with-gnu-ld27304
! Node: Building50828
! Node: Testing61190
! Node: Final install69068
! Node: Binaries73931
! Node: Specific75709
! Ref: alpha-x-x75996
! Ref: alpha-dec-osf76485
! Ref: alphaev5-cray-unicosmk80062
! Ref: arc-x-elf81009
! Ref: arm-x-elf81109
! Ref: xscale-x-x81130
! Ref: arm-x-coff81366
! Ref: arm-x-aout81568
! Ref: avr81690
! Ref: bfin82374
! Ref: c4x82616
! Ref: cris83214
! Ref: dos84196
! Ref: x-x-freebsd84519
! Ref: h8300-hms86902
! Ref: hppa-hp-hpux87254
! Ref: hppa-hp-hpux1089194
! Ref: hppa-hp-hpux1190251
! Ref: x-x-linux-gnu97106
! Ref: ix86-x-linuxaout97298
! Ref: ix86-x-linux97457
! Ref: ix86-x-sco32v597770
! Ref: ix86-x-solaris21099939
! Ref: ix86-x-udk100325
! Ref: ia64-x-linux101689
! Ref: ia64-x-hpux102459
! Ref: x-ibm-aix103014
! Ref: ip2k-x-elf108870
! Ref: iq2000-x-elf109101
! Ref: m32r-x-elf109241
! Ref: m6811-elf109343
! Ref: m6812-elf109493
! Ref: m68k-hp-hpux109643
! Ref: mips-x-x111382
! Ref: mips-sgi-irix5113051
! Ref: mips-sgi-irix6113999
! Ref: powerpc-x-x116691
! Ref: powerpc-x-darwin116836
! Ref: powerpc-x-elf117425
! Ref: powerpc-x-linux-gnu117544
! Ref: powerpc-x-netbsd117646
! Ref: powerpc-x-eabisim117842
! Ref: powerpc-x-eabi117968
! Ref: powerpcle-x-elf118044
! Ref: powerpcle-x-eabisim118174
! Ref: powerpcle-x-eabi118307
! Ref: s390-x-linux118390
! Ref: s390x-x-linux118462
! Ref: s390x-ibm-tpf118549
! Ref: x-x-solaris2118680
! Ref: sparc-sun-solaris2122695
! Ref: sparc-sun-solaris27125684
! Ref: sparc-x-linux128148
! Ref: sparc64-x-solaris2128373
! Ref: sparcv9-x-solaris2128749
! Ref: x-x-sysv128834
! Ref: vax-dec-ultrix129795
! Ref: x-x-vxworks129947
! Ref: x86-64-x-x131469
! Ref: xtensa-x-elf131797
! Ref: xtensa-x-linux132466
! Ref: windows132804
! Ref: os2133058
! Ref: older133249
! Ref: elf135374
! Node: Old135632
! Node: Configurations138769
! Node: GNU Free Documentation License142751
! Node: Concept Index165157
End Tag Table
--- 3836,3922 ----
Tag Table:
! Node: Top1921
! Node: Installing GCC2479
! Node: Prerequisites3994
! Node: Downloading the source10599
! Node: Configuration12280
! Ref: with-gnu-as25109
! Ref: with-as26296
! Ref: with-gnu-ld27301
! Node: Building50769
! Node: Testing61041
! Node: Final install68919
! Node: Binaries73782
! Node: Specific75560
! Ref: alpha-x-x75847
! Ref: alpha-dec-osf76336
! Ref: alphaev5-cray-unicosmk79913
! Ref: arc-x-elf80860
! Ref: arm-x-elf80960
! Ref: xscale-x-x80981
! Ref: arm-x-coff81217
! Ref: arm-x-aout81419
! Ref: avr81541
! Ref: bfin82225
! Ref: c4x82467
! Ref: cris83065
! Ref: dos84047
! Ref: x-x-freebsd84370
! Ref: h8300-hms86753
! Ref: hppa-hp-hpux87105
! Ref: hppa-hp-hpux1089045
! Ref: hppa-hp-hpux1190102
! Ref: x-x-linux-gnu96957
! Ref: ix86-x-linuxaout97149
! Ref: ix86-x-linux97308
! Ref: ix86-x-sco32v597621
! Ref: ix86-x-solaris21099790
! Ref: ix86-x-udk100176
! Ref: ia64-x-linux101540
! Ref: ia64-x-hpux102310
! Ref: x-ibm-aix102865
! Ref: ip2k-x-elf108721
! Ref: iq2000-x-elf108952
! Ref: m32r-x-elf109092
! Ref: m6811-elf109194
! Ref: m6812-elf109344
! Ref: m68k-hp-hpux109494
! Ref: mips-x-x111233
! Ref: mips-sgi-irix5112902
! Ref: mips-sgi-irix6113850
! Ref: powerpc-x-x116542
! Ref: powerpc-x-darwin116687
! Ref: powerpc-x-elf117276
! Ref: powerpc-x-linux-gnu117395
! Ref: powerpc-x-netbsd117497
! Ref: powerpc-x-eabisim117693
! Ref: powerpc-x-eabi117819
! Ref: powerpcle-x-elf117895
! Ref: powerpcle-x-eabisim118025
! Ref: powerpcle-x-eabi118158
! Ref: s390-x-linux118241
! Ref: s390x-x-linux118313
! Ref: s390x-ibm-tpf118400
! Ref: x-x-solaris2118531
! Ref: sparc-sun-solaris2122518
! Ref: sparc-sun-solaris27125682
! Ref: sparc-x-linux128146
! Ref: sparc64-x-solaris2128371
! Ref: sparcv9-x-solaris2129016
! Ref: x-x-sysv129101
! Ref: vax-dec-ultrix130062
! Ref: x-x-vxworks130214
! Ref: x86-64-x-x131736
! Ref: xtensa-x-elf132064
! Ref: xtensa-x-linux132733
! Ref: windows133071
! Ref: os2133325
! Ref: older133516
! Ref: elf135637
! Node: Old135895
! Node: Configurations139032
! Node: GNU Free Documentation License143014
! Node: Concept Index165420
End Tag Table
diff -Nrcpad gcc-4.0.3/gcc/doc/gccint.info gcc-4.0.4/gcc/doc/gccint.info
*** gcc-4.0.3/gcc/doc/gccint.info 2006-03-09 20:52:34.000000000 +0000
--- gcc-4.0.4/gcc/doc/gccint.info 2007-01-31 10:51:37.000000000 +0000
***************
*** 1,5 ****
This is doc/gccint.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/doc/gccint.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
--- 1,5 ----
This is doc/gccint.info, produced by makeinfo version 4.8 from
! /home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/doc/gccint.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
*************** Introduction
*** 58,64 ****
This manual documents the internals of the GNU compilers, including how
to port them to new targets and some information about how to write
! front ends for new languages. It corresponds to GCC version 4.0.3.
The use of the GNU compilers is documented in a separate manual. *Note
Introduction: (gcc)Top.
--- 58,64 ----
This manual documents the internals of the GNU compilers, including how
to port them to new targets and some information about how to write
! front ends for new languages. It corresponds to GCC version 4.0.4.
The use of the GNU compilers is documented in a separate manual. *Note
Introduction: (gcc)Top.
*************** For example:
*** 2017,2022 ****
--- 2017,2026 ----
is not covered by the effective-target keyword. This directive
must appear after any `dg-do' directive in the test.
+ `{ dg-shouldfail COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }'
+ Expect the test executable to return a nonzero exit status if the
+ conditions (which are the same as for `dg-skip-if') are met.
+
`{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
This DejaGnu directive appears on a source line that is expected
to get an error message, or else specifies the source line
*************** For example:
*** 2071,2076 ****
--- 2075,2097 ----
The GCC testsuite defines the following directives to be used
within `dg-final'.
+ `cleanup-coverage-files'
+ Removes coverage data files generated for this test.
+
+ `cleanup-repo-files'
+ Removes files generated for this test for `-frepo'.
+
+ `cleanup-rtl-dump SUFFIX'
+ Removes RTL dump files generated for this test.
+
+ `cleanup-tree-dump SUFFIX'
+ Removes tree dump files matching SUFFIX which were generated
+ for this test.
+
+ `cleanup-saved-temps'
+ Removes files for the current test which were kept for
+ `--save-temps'.
+
`scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
Passes if REGEXP matches text in FILENAME.
*************** Concept Index
*** 30721,30973 ****
Tag Table:
! Node: Top2083
! Node: Contributing4840
! Node: Portability5581
! Node: Interface7369
! Node: Libgcc10409
! Node: Integer library routines12155
! Node: Soft float library routines18840
! Node: Exception handling routines28298
! Node: Miscellaneous routines29393
! Node: Languages29776
! Node: Source Tree31323
! Node: Configure Terms31941
! Node: Top Level34899
! Node: gcc Directory37247
! Node: Subdirectories38216
! Node: Configuration40554
! Node: Config Fragments41274
! Node: System Config42618
! Node: Configuration Files43554
! Node: Build46240
! Node: Makefile46652
! Node: Library Files50890
! Node: Headers51452
! Node: Documentation53431
! Node: Texinfo Manuals54281
! Node: Man Page Generation56463
! Node: Miscellaneous Docs58378
! Node: Front End59733
! Node: Front End Directory63500
! Node: Front End Config68945
! Node: Back End71863
! Node: Testsuites75304
! Node: Test Idioms76096
! Node: Test Directives79496
! Node: Ada Tests88607
! Node: C Tests89899
! Node: libgcj Tests94254
! Node: gcov Testing95674
! Node: profopt Testing98658
! Node: compat Testing100101
! Node: Passes104323
! Node: Parsing pass105062
! Node: Gimplification pass108590
! Node: Pass manager110417
! Node: Tree-SSA passes111745
! Node: RTL passes127043
! Node: Trees138705
! Node: Deficiencies141431
! Node: Tree overview141668
! Node: Macros and Functions145791
! Node: Identifiers145937
! Node: Containers147462
! Node: Types148617
! Node: Scopes161225
! Node: Namespaces161987
! Node: Classes164799
! Node: Declarations169556
! Node: Functions175607
! Node: Function Basics178010
! Node: Function Bodies185175
! Node: Attributes197151
! Node: Expression trees198392
! Node: Tree SSA227598
! Node: GENERIC229453
! Node: GIMPLE231061
! Node: Interfaces232406
! Node: Temporaries234282
! Ref: Temporaries-Footnote-1235600
! Node: GIMPLE Expressions235663
! Node: Compound Expressions236433
! Node: Compound Lvalues236679
! Node: Conditional Expressions237457
! Node: Logical Operators238132
! Node: Statements238623
! Node: Blocks239329
! Node: Statement Sequences240744
! Node: Empty Statements241079
! Node: Loops241655
! Node: Selection Statements241897
! Node: Jumps242748
! Node: Cleanups243391
! Node: GIMPLE Exception Handling244041
! Node: GIMPLE Example245210
! Node: Rough GIMPLE Grammar246619
! Node: Annotations251550
! Node: Statement Operands252214
! Node: SSA263421
! Node: Alias analysis269917
! Node: RTL275991
! Node: RTL Objects278095
! Node: RTL Classes281969
! Node: Accessors286921
! Node: Special Accessors289315
! Node: Flags293185
! Node: Machine Modes308639
! Node: Constants317357
! Node: Regs and Memory323470
! Node: Arithmetic336525
! Node: Comparisons344658
! Node: Bit-Fields348950
! Node: Vector Operations350502
! Node: Conversions352128
! Node: RTL Declarations355443
! Node: Side Effects356264
! Node: Incdec372380
! Node: Assembler375720
! Node: Insns377252
! Node: Calls403079
! Node: Sharing405672
! Node: Reading RTL408782
! Node: Control Flow409772
! Node: Basic Blocks410743
! Node: Edges415311
! Node: Profile information423873
! Node: Maintaining the CFG428559
! Node: Liveness information435574
! Node: Machine Desc437994
! Node: Overview440449
! Node: Patterns442490
! Node: Example445928
! Node: RTL Template447363
! Node: Output Template458018
! Node: Output Statement461984
! Node: Predicates465946
! Node: Machine-Independent Predicates468864
! Node: Defining Predicates473496
! Node: Constraints478145
! Node: Simple Constraints479174
! Node: Multi-Alternative491562
! Node: Class Preferences494403
! Node: Modifiers495295
! Node: Machine Constraints499215
! Node: Standard Names523188
! Ref: shift patterns534394
! Ref: prologue instruction pattern569484
! Ref: epilogue instruction pattern569977
! Node: Pattern Ordering572428
! Node: Dependent Patterns573664
! Node: Jump Patterns576478
! Node: Looping Patterns582211
! Node: Insn Canonicalizations586813
! Node: Expander Definitions590975
! Node: Insn Splitting599093
! Node: Including Patterns608680
! Node: Peephole Definitions610460
! Node: define_peephole611713
! Node: define_peephole2618044
! Node: Insn Attributes621111
! Node: Defining Attributes622217
! Node: Expressions624234
! Node: Tagging Insns630836
! Node: Attr Example635189
! Node: Insn Lengths637563
! Node: Constant Attributes640622
! Node: Delay Slots641791
! Node: Processor pipeline description645015
! Ref: Processor pipeline description-Footnote-1662352
! Node: Conditional Execution662682
! Node: Constant Definitions665535
! Node: Macros667127
! Node: Mode Macros667556
! Node: Defining Mode Macros668508
! Node: String Substitutions669993
! Node: Examples671789
! Node: Code Macros673232
! Node: Target Macros675447
! Node: Target Structure678253
! Node: Driver679522
! Node: Run-time Target701782
! Node: Per-Function Data712372
! Node: Storage Layout715135
! Node: Type Layout739610
! Node: Registers750486
! Node: Register Basics751409
! Node: Allocation Order756976
! Node: Values in Registers758421
! Node: Leaf Functions764097
! Node: Stack Registers766955
! Node: Register Classes768071
! Node: Stack and Calling794244
! Node: Frame Layout794747
! Node: Exception Handling803930
! Node: Stack Checking810278
! Node: Frame Registers813907
! Node: Elimination820511
! Node: Stack Arguments824540
! Node: Register Arguments831115
! Node: Scalar Return845342
! Node: Aggregate Return850113
! Node: Caller Saves853564
! Node: Function Entry854740
! Node: Profiling867356
! Node: Tail Calls869012
! Node: Varargs869844
! Node: Trampolines877804
! Node: Library Calls884579
! Node: Addressing Modes888999
! Node: Condition Code903049
! Node: Costs911336
! Node: Scheduling923336
! Node: Sections936391
! Node: PIC947487
! Node: Assembler Format950333
! Node: File Framework951412
! Node: Data Output956975
! Node: Uninitialized Data964406
! Node: Label Output969938
! Node: Initialization991013
! Node: Macros for Initialization996975
! Node: Instruction Output1003038
! Node: Dispatch Tables1012032
! Node: Exception Region Output1015517
! Node: Alignment Output1020564
! Node: Debugging Info1024708
! Node: All Debuggers1025378
! Node: DBX Options1028233
! Node: DBX Hooks1033682
! Node: File Names and DBX1035608
! Node: SDB and DWARF1037719
! Node: VMS Debug1041416
! Node: Floating Point1041986
! Node: Mode Switching1046808
! Node: Target Attributes1050734
! Node: MIPS Coprocessors1055223
! Node: PCH Target1056797
! Node: C++ ABI1058058
! Node: Misc1060933
! Ref: TARGET_SHIFT_TRUNCATION_MASK1069836
! Node: Host Config1101404
! Node: Host Common1102464
! Node: Filesystem1104843
! Node: Host Misc1108958
! Node: Fragments1111318
! Node: Target Fragment1112513
! Node: Host Fragment1117941
! Node: Collect21119383
! Node: Header Dirs1121926
! Node: Type Information1123349
! Node: GTY Options1125537
! Node: GGC Roots1135671
! Node: Files1136391
! Node: Funding1139055
! Node: GNU Project1141551
! Node: Copying1142200
! Node: GNU Free Documentation License1161353
! Node: Contributors1183752
! Node: Option Index1214124
! Node: Concept Index1214709
End Tag Table
--- 30742,30994 ----
Tag Table:
! Node: Top2080
! Node: Contributing4837
! Node: Portability5578
! Node: Interface7366
! Node: Libgcc10406
! Node: Integer library routines12152
! Node: Soft float library routines18837
! Node: Exception handling routines28295
! Node: Miscellaneous routines29390
! Node: Languages29773
! Node: Source Tree31320
! Node: Configure Terms31938
! Node: Top Level34896
! Node: gcc Directory37244
! Node: Subdirectories38213
! Node: Configuration40551
! Node: Config Fragments41271
! Node: System Config42615
! Node: Configuration Files43551
! Node: Build46237
! Node: Makefile46649
! Node: Library Files50887
! Node: Headers51449
! Node: Documentation53428
! Node: Texinfo Manuals54278
! Node: Man Page Generation56460
! Node: Miscellaneous Docs58375
! Node: Front End59730
! Node: Front End Directory63497
! Node: Front End Config68942
! Node: Back End71860
! Node: Testsuites75301
! Node: Test Idioms76093
! Node: Test Directives79493
! Node: Ada Tests89333
! Node: C Tests90625
! Node: libgcj Tests94980
! Node: gcov Testing96400
! Node: profopt Testing99384
! Node: compat Testing100827
! Node: Passes105049
! Node: Parsing pass105788
! Node: Gimplification pass109316
! Node: Pass manager111143
! Node: Tree-SSA passes112471
! Node: RTL passes127769
! Node: Trees139431
! Node: Deficiencies142157
! Node: Tree overview142394
! Node: Macros and Functions146517
! Node: Identifiers146663
! Node: Containers148188
! Node: Types149343
! Node: Scopes161951
! Node: Namespaces162713
! Node: Classes165525
! Node: Declarations170282
! Node: Functions176333
! Node: Function Basics178736
! Node: Function Bodies185901
! Node: Attributes197877
! Node: Expression trees199118
! Node: Tree SSA228324
! Node: GENERIC230179
! Node: GIMPLE231787
! Node: Interfaces233132
! Node: Temporaries235008
! Ref: Temporaries-Footnote-1236326
! Node: GIMPLE Expressions236389
! Node: Compound Expressions237159
! Node: Compound Lvalues237405
! Node: Conditional Expressions238183
! Node: Logical Operators238858
! Node: Statements239349
! Node: Blocks240055
! Node: Statement Sequences241470
! Node: Empty Statements241805
! Node: Loops242381
! Node: Selection Statements242623
! Node: Jumps243474
! Node: Cleanups244117
! Node: GIMPLE Exception Handling244767
! Node: GIMPLE Example245936
! Node: Rough GIMPLE Grammar247345
! Node: Annotations252276
! Node: Statement Operands252940
! Node: SSA264147
! Node: Alias analysis270643
! Node: RTL276717
! Node: RTL Objects278821
! Node: RTL Classes282695
! Node: Accessors287647
! Node: Special Accessors290041
! Node: Flags293911
! Node: Machine Modes309365
! Node: Constants318083
! Node: Regs and Memory324196
! Node: Arithmetic337251
! Node: Comparisons345384
! Node: Bit-Fields349676
! Node: Vector Operations351228
! Node: Conversions352854
! Node: RTL Declarations356169
! Node: Side Effects356990
! Node: Incdec373106
! Node: Assembler376446
! Node: Insns377978
! Node: Calls403805
! Node: Sharing406398
! Node: Reading RTL409508
! Node: Control Flow410498
! Node: Basic Blocks411469
! Node: Edges416037
! Node: Profile information424599
! Node: Maintaining the CFG429285
! Node: Liveness information436300
! Node: Machine Desc438720
! Node: Overview441175
! Node: Patterns443216
! Node: Example446654
! Node: RTL Template448089
! Node: Output Template458744
! Node: Output Statement462710
! Node: Predicates466672
! Node: Machine-Independent Predicates469590
! Node: Defining Predicates474222
! Node: Constraints478871
! Node: Simple Constraints479900
! Node: Multi-Alternative492288
! Node: Class Preferences495129
! Node: Modifiers496021
! Node: Machine Constraints499941
! Node: Standard Names523914
! Ref: shift patterns535120
! Ref: prologue instruction pattern570210
! Ref: epilogue instruction pattern570703
! Node: Pattern Ordering573154
! Node: Dependent Patterns574390
! Node: Jump Patterns577204
! Node: Looping Patterns582937
! Node: Insn Canonicalizations587539
! Node: Expander Definitions591701
! Node: Insn Splitting599819
! Node: Including Patterns609406
! Node: Peephole Definitions611186
! Node: define_peephole612439
! Node: define_peephole2618770
! Node: Insn Attributes621837
! Node: Defining Attributes622943
! Node: Expressions624960
! Node: Tagging Insns631562
! Node: Attr Example635915
! Node: Insn Lengths638289
! Node: Constant Attributes641348
! Node: Delay Slots642517
! Node: Processor pipeline description645741
! Ref: Processor pipeline description-Footnote-1663078
! Node: Conditional Execution663408
! Node: Constant Definitions666261
! Node: Macros667853
! Node: Mode Macros668282
! Node: Defining Mode Macros669234
! Node: String Substitutions670719
! Node: Examples672515
! Node: Code Macros673958
! Node: Target Macros676173
! Node: Target Structure678979
! Node: Driver680248
! Node: Run-time Target702508
! Node: Per-Function Data713098
! Node: Storage Layout715861
! Node: Type Layout740336
! Node: Registers751212
! Node: Register Basics752135
! Node: Allocation Order757702
! Node: Values in Registers759147
! Node: Leaf Functions764823
! Node: Stack Registers767681
! Node: Register Classes768797
! Node: Stack and Calling794970
! Node: Frame Layout795473
! Node: Exception Handling804656
! Node: Stack Checking811004
! Node: Frame Registers814633
! Node: Elimination821237
! Node: Stack Arguments825266
! Node: Register Arguments831841
! Node: Scalar Return846068
! Node: Aggregate Return850839
! Node: Caller Saves854290
! Node: Function Entry855466
! Node: Profiling868082
! Node: Tail Calls869738
! Node: Varargs870570
! Node: Trampolines878530
! Node: Library Calls885305
! Node: Addressing Modes889725
! Node: Condition Code903775
! Node: Costs912062
! Node: Scheduling924062
! Node: Sections937117
! Node: PIC948213
! Node: Assembler Format951059
! Node: File Framework952138
! Node: Data Output957701
! Node: Uninitialized Data965132
! Node: Label Output970664
! Node: Initialization991739
! Node: Macros for Initialization997701
! Node: Instruction Output1003764
! Node: Dispatch Tables1012758
! Node: Exception Region Output1016243
! Node: Alignment Output1021290
! Node: Debugging Info1025434
! Node: All Debuggers1026104
! Node: DBX Options1028959
! Node: DBX Hooks1034408
! Node: File Names and DBX1036334
! Node: SDB and DWARF1038445
! Node: VMS Debug1042142
! Node: Floating Point1042712
! Node: Mode Switching1047534
! Node: Target Attributes1051460
! Node: MIPS Coprocessors1055949
! Node: PCH Target1057523
! Node: C++ ABI1058784
! Node: Misc1061659
! Ref: TARGET_SHIFT_TRUNCATION_MASK1070562
! Node: Host Config1102130
! Node: Host Common1103190
! Node: Filesystem1105569
! Node: Host Misc1109684
! Node: Fragments1112044
! Node: Target Fragment1113239
! Node: Host Fragment1118667
! Node: Collect21120109
! Node: Header Dirs1122652
! Node: Type Information1124075
! Node: GTY Options1126263
! Node: GGC Roots1136397
! Node: Files1137117
! Node: Funding1139781
! Node: GNU Project1142277
! Node: Copying1142926
! Node: GNU Free Documentation License1162079
! Node: Contributors1184478
! Node: Option Index1214850
! Node: Concept Index1215435
End Tag Table
diff -Nrcpad gcc-4.0.3/gcc/doc/gcj.1 gcc-4.0.4/gcc/doc/gcj.1
*** gcc-4.0.3/gcc/doc/gcj.1 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/gcj.1 2007-01-31 10:51:53.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GCJ 1"
! .TH GCJ 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gcj \- Ahead\-of\-time compiler for the Java language
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GCJ 1"
! .TH GCJ 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gcj \- Ahead\-of\-time compiler for the Java language
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/gcj-dbtool.1 gcc-4.0.4/gcc/doc/gcj-dbtool.1
*** gcc-4.0.3/gcc/doc/gcj-dbtool.1 2006-03-09 20:52:38.000000000 +0000
--- gcc-4.0.4/gcc/doc/gcj-dbtool.1 2007-01-31 10:51:57.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GCJ-DBTOOL 1"
! .TH GCJ-DBTOOL 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gcj\-dbtool \- Manipulate class file mapping databases for libgcj
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GCJ-DBTOOL 1"
! .TH GCJ-DBTOOL 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gcj\-dbtool \- Manipulate class file mapping databases for libgcj
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/gcjh.1 gcc-4.0.4/gcc/doc/gcjh.1
*** gcc-4.0.3/gcc/doc/gcjh.1 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/gcjh.1 2007-01-31 10:51:54.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GCJH 1"
! .TH GCJH 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gcjh \- generate header files from Java class files
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GCJH 1"
! .TH GCJH 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gcjh \- generate header files from Java class files
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/gcj.info gcc-4.0.4/gcc/doc/gcj.info
*** gcc-4.0.3/gcc/doc/gcj.info 2006-03-09 20:52:34.000000000 +0000
--- gcc-4.0.4/gcc/doc/gcj.info 2007-01-31 10:51:38.000000000 +0000
***************
*** 1,5 ****
This is doc/gcj.info, produced by makeinfo version 4.8 from
! /scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/gcj.texi.
Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
Inc.
--- 1,5 ----
This is doc/gcj.info, produced by makeinfo version 4.8 from
! /home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/gcj.texi.
Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
Inc.
*************** for more information.
*** 3209,3258 ****
Tag Table:
! Node: Top2837
! Node: Copying4128
! Node: GNU Free Documentation License23296
! Node: Invoking gcj45698
! Node: Input and output files46397
! Node: Input Options47923
! Node: Encodings51071
! Node: Warnings52277
! Node: Linking53390
! Node: Code Generation55623
! Node: Configure-time Options60640
! Node: Compatibility62063
! Node: Limitations62543
! Node: Extensions64125
! Node: Invoking gcjh66723
! Node: Invoking gjnih69078
! Node: Invoking jv-scan71266
! Node: Invoking jcf-dump72308
! Node: Invoking gij73256
! Node: Invoking gcj-dbtool76507
! Node: Invoking jv-convert78973
! Node: Invoking grmic80052
! Node: Invoking grmiregistry81442
! Node: About CNI81855
! Node: Basic concepts83217
! Node: Packages86113
! Node: Primitive types88441
! Node: Interfaces90109
! Node: Objects and Classes91020
! Node: Class Initialization93220
! Node: Object allocation95563
! Node: Memory allocation96353
! Node: Arrays96984
! Node: Methods99588
! Node: Strings102409
! Node: Mixing with C++103893
! Node: Exception Handling107364
! Node: Synchronization108998
! Node: Invocation110988
! Node: Reflection115913
! Node: System properties116374
! Node: Standard Properties117251
! Node: GNU Classpath Properties121683
! Node: libgcj Runtime Properties122729
! Node: Resources126711
End Tag Table
--- 3209,3258 ----
Tag Table:
! Node: Top2834
! Node: Copying4125
! Node: GNU Free Documentation License23293
! Node: Invoking gcj45695
! Node: Input and output files46394
! Node: Input Options47920
! Node: Encodings51068
! Node: Warnings52274
! Node: Linking53387
! Node: Code Generation55620
! Node: Configure-time Options60637
! Node: Compatibility62060
! Node: Limitations62540
! Node: Extensions64122
! Node: Invoking gcjh66720
! Node: Invoking gjnih69075
! Node: Invoking jv-scan71263
! Node: Invoking jcf-dump72305
! Node: Invoking gij73253
! Node: Invoking gcj-dbtool76504
! Node: Invoking jv-convert78970
! Node: Invoking grmic80049
! Node: Invoking grmiregistry81439
! Node: About CNI81852
! Node: Basic concepts83214
! Node: Packages86110
! Node: Primitive types88438
! Node: Interfaces90106
! Node: Objects and Classes91017
! Node: Class Initialization93217
! Node: Object allocation95560
! Node: Memory allocation96350
! Node: Arrays96981
! Node: Methods99585
! Node: Strings102406
! Node: Mixing with C++103890
! Node: Exception Handling107361
! Node: Synchronization108995
! Node: Invocation110985
! Node: Reflection115910
! Node: System properties116371
! Node: Standard Properties117248
! Node: GNU Classpath Properties121680
! Node: libgcj Runtime Properties122726
! Node: Resources126708
End Tag Table
diff -Nrcpad gcc-4.0.3/gcc/doc/gcov.1 gcc-4.0.4/gcc/doc/gcov.1
*** gcc-4.0.3/gcc/doc/gcov.1 2006-03-09 20:52:35.000000000 +0000
--- gcc-4.0.4/gcc/doc/gcov.1 2007-01-31 10:51:39.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GCOV 1"
! .TH GCOV 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gcov \- coverage testing tool
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GCOV 1"
! .TH GCOV 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gcov \- coverage testing tool
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/gfdl.7 gcc-4.0.4/gcc/doc/gfdl.7
*** gcc-4.0.3/gcc/doc/gfdl.7 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/gfdl.7 2007-01-31 10:51:51.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GFDL 7"
! .TH GFDL 7 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gfdl \- GNU Free Documentation License
.SH "DESCRIPTION"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GFDL 7"
! .TH GFDL 7 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gfdl \- GNU Free Documentation License
.SH "DESCRIPTION"
diff -Nrcpad gcc-4.0.3/gcc/doc/gfortran.1 gcc-4.0.4/gcc/doc/gfortran.1
*** gcc-4.0.3/gcc/doc/gfortran.1 1970-01-01 00:00:00.000000000 +0000
--- gcc-4.0.4/gcc/doc/gfortran.1 2007-01-31 10:51:53.000000000 +0000
***************
*** 0 ****
--- 1,629 ----
+ .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+ .\"
+ .\" Standard preamble:
+ .\" ========================================================================
+ .de Sh \" Subsection heading
+ .br
+ .if t .Sp
+ .ne 5
+ .PP
+ \fB\\$1\fR
+ .PP
+ ..
+ .de Sp \" Vertical space (when we can't use .PP)
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Vb \" Begin verbatim text
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve \" End verbatim text
+ .ft R
+ .fi
+ ..
+ .\" Set up some character translations and predefined strings. \*(-- will
+ .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+ .\" double quote, and \*(R" will give a right double quote. | will give a
+ .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+ .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+ .\" expand to `' in nroff, nothing in troff, for use with C<>.
+ .tr \(*W-|\(bv\*(Tr
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .ie n \{\
+ . ds -- \(*W-
+ . ds PI pi
+ . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ . ds L" ""
+ . ds R" ""
+ . ds C` ""
+ . ds C' ""
+ 'br\}
+ .el\{\
+ . ds -- \|\(em\|
+ . ds PI \(*p
+ . ds L" ``
+ . ds R" ''
+ 'br\}
+ .\"
+ .\" If the F register is turned on, we'll generate index entries on stderr for
+ .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+ .\" entries marked with X<> in POD. Of course, you'll have to process the
+ .\" output yourself in some meaningful fashion.
+ .if \nF \{\
+ . de IX
+ . tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ . nr % 0
+ . rr F
+ .\}
+ .\"
+ .\" For nroff, turn off justification. Always turn off hyphenation; it makes
+ .\" way too many mistakes in technical documents.
+ .hy 0
+ .if n .na
+ .\"
+ .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+ .\" Fear. Run. Save yourself. No user-serviceable parts.
+ . \" fudge factors for nroff and troff
+ .if n \{\
+ . ds #H 0
+ . ds #V .8m
+ . ds #F .3m
+ . ds #[ \f1
+ . ds #] \fP
+ .\}
+ .if t \{\
+ . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ . ds #V .6m
+ . ds #F 0
+ . ds #[ \&
+ . ds #] \&
+ .\}
+ . \" simple accents for nroff and troff
+ .if n \{\
+ . ds ' \&
+ . ds ` \&
+ . ds ^ \&
+ . ds , \&
+ . ds ~ ~
+ . ds /
+ .\}
+ .if t \{\
+ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ .\}
+ . \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ . \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ . \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ . ds : e
+ . ds 8 ss
+ . ds o a
+ . ds d- d\h'-1'\(ga
+ . ds D- D\h'-1'\(hy
+ . ds th \o'bp'
+ . ds Th \o'LP'
+ . ds ae ae
+ . ds Ae AE
+ .\}
+ .rm #[ #] #H #V #F C
+ .\" ========================================================================
+ .\"
+ .IX Title "GFORTRAN 1"
+ .TH GFORTRAN 1 "2007-01-31" "gcc-4.0.4" "GNU"
+ .SH "NAME"
+ gfortran \- GNU Fortran 95 compiler
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ gfortran [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR]
+ [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
+ [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR]
+ [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
+ [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
+ [\fB\-f\fR\fIoption\fR...]
+ [\fB\-m\fR\fImachine-option\fR...]
+ [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR...
+ .PP
+ Only the most useful options are listed here; see below for the
+ remainder.
+ .SH "DESCRIPTION"
+ .IX Header "DESCRIPTION"
+ The \fBgfortran\fR command supports all the options supported by the
+ \&\fBgcc\fR command. Only options specific to gfortran are documented here.
+ .PP
+ \&\fIGfortran is not yet a fully conformant Fortran 95 compiler\fR.
+ It can generate code for most constructs and expressions,
+ but work remains to be done. In particular, there are known
+ deficiencies with \s-1ENTRY\s0, \s-1NAMELIST\s0, and sophisticated use of
+ \&\s-1MODULES\s0, \s-1POINTERS\s0 and \s-1DERIVED\s0 \s-1TYPES\s0. For those whose Fortran
+ codes conform to either the Fortran 77 standard or the
+ \&\s-1GNU\s0 Fortran 77 language, we recommend to use \fBg77\fR
+ from \s-1GCC\s0 3.4. We recommend that distributors continue to provide
+ packages of g77\-3.4 until we announce that \fBgfortran\fR
+ fully replaces \fBg77\fR.
+ The gfortran developers welcome any feedback on user experience
+ with \fBgfortran\fR at <\fBfortran@gcc.gnu.org\fR>.
+ .PP
+ All \fBgcc\fR and \fBgfortran\fR options
+ are accepted both by \fBgfortran\fR and by \fBgcc\fR
+ (as well as any other drivers built at the same time,
+ such as \fBg++\fR),
+ since adding \fBgfortran\fR to the \fBgcc\fR distribution
+ enables acceptance of \fBgfortran\fR options
+ by all of the relevant drivers.
+ .PP
+ In some cases, options have positive and negative forms;
+ the negative form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.
+ This manual documents only one of these two forms, whichever
+ one is not the default.
+ .SH "OPTIONS"
+ .IX Header "OPTIONS"
+ Here is a summary of all the options specific to \s-1GNU\s0 Fortran, grouped
+ by type. Explanations are in the following sections.
+ .IP "\fIFortran Language Options\fR" 4
+ .IX Item "Fortran Language Options"
+ \&\fB\-ffree\-form \-fno\-fixed\-form
+ \&\-fdollar\-ok \-fimplicit\-none \-fmax\-identifier\-length
+ \&\-std=\fR\fIstd\fR
+ \&\fB\-ffixed\-line\-length\-\fR\fIn\fR \fB\-ffixed\-line\-length\-none
+ \&\-fdefault\-double\-8 \-fdefault\-integer\-8 \-fdefault\-real\-8\fR
+ .IP "\fIWarning Options\fR" 4
+ .IX Item "Warning Options"
+ \&\fB\-fsyntax\-only \-pedantic \-pedantic\-errors
+ \&\-w \-Wall \-Waliasing \-Wconversion
+ \&\-Wimplicit\-interface \-Wnonstd\-intrinsics \-Wsurprising \-Wunderflow
+ \&\-Wunused\-labels \-Wline\-truncation \-W\fR
+ .IP "\fIDebugging Options\fR" 4
+ .IX Item "Debugging Options"
+ \&\fB\-fdump\-parse\-tree\fR
+ .IP "\fIDirectory Options\fR" 4
+ .IX Item "Directory Options"
+ \&\fB\-I\fR\fIdir\fR \fB\-M\fR\fIdir\fR
+ .IP "\fICode Generation Options\fR" 4
+ .IX Item "Code Generation Options"
+ \&\fB\-fno\-automatic \-ff2c \-fno\-underscoring \-fsecond\-underscore
+ \&\-fbounds\-check \-fmax\-stack\-var\-size=\fR\fIn\fR
+ \&\fB\-fpackderived \-frepack\-arrays\fR
+ .Sh "Options Controlling Fortran Dialect"
+ .IX Subsection "Options Controlling Fortran Dialect"
+ The following options control the dialect of Fortran
+ that the compiler accepts:
+ .IP "\fB\-ffree\-form\fR" 4
+ .IX Item "-ffree-form"
+ .PD 0
+ .IP "\fB\-ffixed\-form\fR" 4
+ .IX Item "-ffixed-form"
+ .PD
+ Specify the layout used by the the source file. The free form layout
+ was introduced in Fortran 90. Fixed form was traditionally used in
+ older Fortran programs.
+ .IP "\fB\-fdefault\-double\-8\fR" 4
+ .IX Item "-fdefault-double-8"
+ Set the \*(L"\s-1DOUBLE\s0 \s-1PRECISION\s0\*(R" type to an 8 byte wide.
+ .IP "\fB\-fdefault\-integer\-8\fR" 4
+ .IX Item "-fdefault-integer-8"
+ Set the default integer and logical types to an 8 byte wide type.
+ Do nothing if this is already the default.
+ .IP "\fB\-fdefault\-real\-8\fR" 4
+ .IX Item "-fdefault-real-8"
+ Set the default real type to an 8 byte wide type.
+ Do nothing if this is already the default.
+ .IP "\fB\-fdollar\-ok\fR" 4
+ .IX Item "-fdollar-ok"
+ Allow \fB$\fR as a valid character in a symbol name.
+ .IP "\fB\-fno\-backslash\fR" 4
+ .IX Item "-fno-backslash"
+ .PD 0
+ .IP "B" 4
+ .IX Item "B"
+ .PD
+ Compile switch to change the interpretation of a backslash from
+ ``C''\-style escape characters to a single backslash character.
+ .ie n .IP """\-ffixed\-line\-length\-\f(CIn\f(CW""" 4
+ .el .IP "\f(CW\-ffixed\-line\-length\-\f(CIn\f(CW\fR" 4
+ .IX Item "-ffixed-line-length-n"
+ Set column after which characters are ignored in typical fixed-form
+ lines in the source file, and through which spaces are assumed (as
+ if padded to that length) after the ends of short fixed-form lines.
+ .Sp
+ Popular values for \fIn\fR include 72 (the
+ standard and the default), 80 (card image), and 132 (corresponds
+ to ``extended\-source'' options in some popular compilers).
+ \&\fIn\fR may be \fBnone\fR, meaning that the entire line is meaningful
+ and that continued character constants never have implicit spaces appended
+ to them to fill out the line.
+ \&\fB\-ffixed\-line\-length\-0\fR means the same thing as
+ \&\fB\-ffixed\-line\-length\-none\fR.
+ .ie n .IP """\-fmax\-identifier\-length=\f(CIn\f(CW""" 4
+ .el .IP "\f(CW\-fmax\-identifier\-length=\f(CIn\f(CW\fR" 4
+ .IX Item "-fmax-identifier-length=n"
+ Specify the maximum allowed identifier length. Typical values are
+ 31 (Fortran 95) and 63 (Fortran 200x).
+ .ie n .IP """\-fimplicit\-none""" 4
+ .el .IP "\f(CW\-fimplicit\-none\fR" 4
+ .IX Item "-fimplicit-none"
+ Specify that no implicit typing is allowed, unless overridden by explicit
+ \&\fB\s-1IMPLICIT\s0\fR statements. This is the equivalent of adding
+ \&\fBimplicit none\fR to the start of every procedure.
+ .ie n .IP """\-std=\f(CIstd\f(CW""" 4
+ .el .IP "\f(CW\-std=\f(CIstd\f(CW\fR" 4
+ .IX Item "-std=std"
+ Conform to the specified standard. Allowed values for \fIstd\fR are
+ \&\fBgnu\fR, \fBf95\fR, \fBf2003\fR and \fBlegacy\fR.
+ .Sh "Options to Request or Suppress Warnings"
+ .IX Subsection "Options to Request or Suppress Warnings"
+ Warnings are diagnostic messages that report constructions which
+ are not inherently erroneous but which are risky or suggest there
+ might have been an error.
+ .PP
+ You can request many specific warnings with options beginning \fB\-W\fR,
+ for example \fB\-Wimplicit\fR to request warnings on implicit
+ declarations. Each of these specific warning options also has a
+ negative form beginning \fB\-Wno\-\fR to turn off warnings;
+ for example, \fB\-Wno\-implicit\fR. This manual lists only one of the
+ two forms, whichever is not the default.
+ .PP
+ These options control the amount and kinds of warnings produced by \s-1GNU\s0
+ Fortran:
+ .IP "\fB\-fsyntax\-only\fR" 4
+ .IX Item "-fsyntax-only"
+ Check the code for syntax errors, but don't do anything beyond that.
+ .IP "\fB\-pedantic\fR" 4
+ .IX Item "-pedantic"
+ Issue warnings for uses of extensions to \s-1FORTRAN\s0 95.
+ \&\fB\-pedantic\fR also applies to C\-language constructs where they
+ occur in \s-1GNU\s0 Fortran source files, such as use of \fB\ee\fR in a
+ character constant within a directive like \fB#include\fR.
+ .Sp
+ Valid \s-1FORTRAN\s0 95 programs should compile properly with or without
+ this option.
+ However, without this option, certain \s-1GNU\s0 extensions and traditional
+ Fortran features are supported as well.
+ With this option, many of them are rejected.
+ .Sp
+ Some users try to use \fB\-pedantic\fR to check programs for conformance.
+ They soon find that it does not do quite what they want\-\-\-it finds some
+ nonstandard practices, but not all.
+ However, improvements to \fBgfortran\fR in this area are welcome.
+ .Sp
+ This should be used in conjunction with \-std=\fIstd\fR.
+ .IP "\fB\-pedantic\-errors\fR" 4
+ .IX Item "-pedantic-errors"
+ Like \fB\-pedantic\fR, except that errors are produced rather than
+ warnings.
+ .IP "\fB\-w\fR" 4
+ .IX Item "-w"
+ Inhibit all warning messages.
+ .IP "\fB\-Wall\fR" 4
+ .IX Item "-Wall"
+ Enables commonly used warning options that which pertain to usage that
+ we recommend avoiding and that we believe is easy to avoid.
+ This currently includes \fB\-Wunused\-labels\fR, \fB\-Waliasing\fR,
+ \&\fB\-Wsurprising\fR, \fB\-Wnonstd\-intrinsic\fR and
+ \&\fB\-Wline\-truncation\fR.
+ .IP "\fB\-Waliasing\fR" 4
+ .IX Item "-Waliasing"
+ Warn about possible aliasing of dummy arguments. The following example
+ will trigger the warning as it would be illegal to \f(CW\*(C`bar\*(C'\fR to
+ modify either parameter.
+ .Sp
+ .Vb 2
+ \& INTEGER A
+ \& CALL BAR(A,A)
+ .Ve
+ .IP "\fB\-Wconversion\fR" 4
+ .IX Item "-Wconversion"
+ Warn about implicit conversions between different types.
+ .IP "\fB\-Wimplicit\-interface\fR" 4
+ .IX Item "-Wimplicit-interface"
+ Warn about when procedure are called without an explicit interface.
+ Note this only checks that an explicit interface is present. It does not
+ check that the declared interfaces are consistent across program units.
+ .IP "\fB\-Wnonstd\-intrinsic\fR" 4
+ .IX Item "-Wnonstd-intrinsic"
+ Warn if the user tries to use an intrinsic that does not belong to the
+ standard the user has chosen via the \-std option.
+ .IP "\fB\-Wsurprising\fR" 4
+ .IX Item "-Wsurprising"
+ Produce a warning when ``suspicious'' code constructs are encountered.
+ While technically legal these usually indicate that an error has been made.
+ .Sp
+ This currently produces a warning under the following circumstances:
+ .RS 4
+ .IP "*" 4
+ An \s-1INTEGER\s0 \s-1SELECT\s0 construct has a \s-1CASE\s0 that can never be matched as its
+ lower value is greater than its upper value.
+ .IP "*" 4
+ A \s-1LOGICAL\s0 \s-1SELECT\s0 construct has three \s-1CASE\s0 statements.
+ .RE
+ .RS 4
+ .RE
+ .IP "\fB\-Wunderflow\fR" 4
+ .IX Item "-Wunderflow"
+ Produce a warning when numerical constant expressions are
+ encountered, which yield an \s-1UNDERFLOW\s0 during compilation.
+ .IP "\fB\-Wunused\-labels\fR" 4
+ .IX Item "-Wunused-labels"
+ Warn whenever a label is defined but never referenced.
+ .IP "\fB\-Werror\fR" 4
+ .IX Item "-Werror"
+ Turns all warnings into errors.
+ .IP "\fB\-W\fR" 4
+ .IX Item "-W"
+ Turns on ``extra warnings'' and, if optimization is specified
+ via \fB\-O\fR, the \fB\-Wuninitialized\fR option.
+ (This might change in future versions of \fBgfortran\fR
+ .PP
+ Some of these have no effect when compiling programs written in Fortran.
+ .Sh "Options for Debugging Your Program or \s-1GNU\s0 Fortran"
+ .IX Subsection "Options for Debugging Your Program or GNU Fortran"
+ \&\s-1GNU\s0 Fortran has various special options that are used for debugging
+ either your program or \fBgfortran\fR
+ .IP "\fB\-fdump\-parse\-tree\fR" 4
+ .IX Item "-fdump-parse-tree"
+ Output the internal parse tree before starting code generation. Only
+ really useful for debugging gfortran itself.
+ .Sh "Options for Directory Search"
+ .IX Subsection "Options for Directory Search"
+ There options affect how affect how \fBgfortran\fR searches
+ for files specified via the \f(CW\*(C`INCLUDE\*(C'\fR directive, and where it searches
+ for previously compiled modules.
+ .PP
+ It also affects the search paths used by \fBcpp\fR when used to preprocess
+ Fortran source.
+ .IP "\fB\-I\fR\fIdir\fR" 4
+ .IX Item "-Idir"
+ These affect interpretation of the \f(CW\*(C`INCLUDE\*(C'\fR directive
+ (as well as of the \f(CW\*(C`#include\*(C'\fR directive of the \fBcpp\fR
+ preprocessor).
+ .Sp
+ Also note that the general behavior of \fB\-I\fR and
+ \&\f(CW\*(C`INCLUDE\*(C'\fR is pretty much the same as of \fB\-I\fR with
+ \&\f(CW\*(C`#include\*(C'\fR in the \fBcpp\fR preprocessor, with regard to
+ looking for \fIheader.gcc\fR files and other such things.
+ .Sp
+ This path is also used to search for \fB.mod\fR files when previously
+ compiled modules are required by a \f(CW\*(C`USE\*(C'\fR statement.
+ .IP "\fB\-M\fR\fIdir\fR" 4
+ .IX Item "-Mdir"
+ .PD 0
+ .IP "\fB\-J\fR\fIdir\fR" 4
+ .IX Item "-Jdir"
+ .PD
+ This option specifies where to put \fB.mod\fR files for compiled modules.
+ It is also added to the list of directories to searched by an \f(CW\*(C`USE\*(C'\fR
+ statement.
+ .Sp
+ The default is the current directory.
+ .Sp
+ \&\fB\-J\fR is an alias for \fB\-M\fR to avoid conflicts with existing
+ \&\s-1GCC\s0 options.
+ .Sh "Options for Code Generation Conventions"
+ .IX Subsection "Options for Code Generation Conventions"
+ These machine-independent options control the interface conventions
+ used in code generation.
+ .PP
+ Most of them have both positive and negative forms; the negative form
+ of \fB\-ffoo\fR would be \fB\-fno\-foo\fR. In the table below, only
+ one of the forms is listed\-\-\-the one which is not the default. You
+ can figure out the other form by either removing \fBno\-\fR or adding
+ it.
+ .IP "\fB\-fno\-automatic\fR" 4
+ .IX Item "-fno-automatic"
+ Treat each program unit as if the \f(CW\*(C`SAVE\*(C'\fR statement was specified for
+ every local variable and array referenced in it. Does not affect common
+ blocks. (Some Fortran compilers provide this option under the name
+ \&\fB\-static\fR.)
+ .IP "\fB\-ff2c\fR" 4
+ .IX Item "-ff2c"
+ Generate code designed to be compatible with code generated
+ by \fBg77\fR and \fBf2c\fR.
+ .Sp
+ The calling conventions used by \fBg77\fR (originally implemented
+ in \fBf2c\fR) require functions that return type
+ default \f(CW\*(C`REAL\*(C'\fR to actually return the C type \f(CW\*(C`double\*(C'\fR, and
+ functions that return type \f(CW\*(C`COMPLEX\*(C'\fR to return the values via an
+ extra argument in the calling sequence that points to where to
+ store the return value. Under the default \s-1GNU\s0 calling conventions, such
+ functions simply return their results as they would in \s-1GNU\s0
+ C \*(-- default \f(CW\*(C`REAL\*(C'\fR functions return the C type \f(CW\*(C`float\*(C'\fR, and
+ \&\f(CW\*(C`COMPLEX\*(C'\fR functions return the \s-1GNU\s0 C type \f(CW\*(C`complex\*(C'\fR.
+ Additionally, this option implies the \fB\-fsecond\-underscore\fR
+ option, unless \fB\-fno\-second\-underscore\fR is explicitly requested.
+ .Sp
+ This does not affect the generation of code that interfaces with
+ the \fBlibgfortran\fR library.
+ .Sp
+ \&\fICaution:\fR It is not a good idea to mix Fortran code compiled
+ with \f(CW\*(C`\-ff2c\*(C'\fR with code compiled with the default \f(CW\*(C`\-fno\-f2c\*(C'\fR
+ calling conventions as, calling \f(CW\*(C`COMPLEX\*(C'\fR or default \f(CW\*(C`REAL\*(C'\fR
+ functions between program parts which were compiled with different
+ calling conventions will break at execution time.
+ .Sp
+ \&\fICaution:\fR This will break code which passes intrinsic functions
+ of type default \f(CW\*(C`REAL\*(C'\fR or \f(CW\*(C`COMPLEX\*(C'\fR as actual arguments, as
+ the library implementations use the \fB\-fno\-f2c\fR calling conventions.
+ .IP "\fB\-fno\-underscoring\fR" 4
+ .IX Item "-fno-underscoring"
+ Do not transform names of entities specified in the Fortran
+ source file by appending underscores to them.
+ .Sp
+ With \fB\-funderscoring\fR in effect, \fBgfortran\fR appends one
+ underscore to external names with no underscores.
+ .Sp
+ This is done to ensure compatibility with code produced by many
+ \&\s-1UNIX\s0 Fortran compilers.
+ .Sp
+ \&\fICaution\fR: The default behavior of \fBgfortran\fR is
+ incompatible with \fBf2c\fR and \fBg77\fR, please use the
+ \&\fB\-ff2c\fR option if you want object files compiled with
+ \&\fBgfortran\fR to be compatible with object code created with these
+ tools.
+ .Sp
+ Use of \fB\-fno\-underscoring\fR is not recommended unless you are
+ experimenting with issues such as integration of (\s-1GNU\s0) Fortran into
+ existing system environments (vis\-a\-vis existing libraries, tools, and
+ so on).
+ .Sp
+ For example, with \fB\-funderscoring\fR, and assuming other defaults like
+ \&\fB\-fcase\-lower\fR and that \fBj()\fR and \fB\f(BImax_count()\fB\fR are
+ external functions while \fBmy_var\fR and \fBlvar\fR are local variables,
+ a statement like
+ .Sp
+ .Vb 1
+ \& I = J() + MAX_COUNT (MY_VAR, LVAR)
+ .Ve
+ .Sp
+ is implemented as something akin to:
+ .Sp
+ .Vb 1
+ \& i = j_() + max_count__(&my_var__, &lvar);
+ .Ve
+ .Sp
+ With \fB\-fno\-underscoring\fR, the same statement is implemented as:
+ .Sp
+ .Vb 1
+ \& i = j() + max_count(&my_var, &lvar);
+ .Ve
+ .Sp
+ Use of \fB\-fno\-underscoring\fR allows direct specification of
+ user-defined names while debugging and when interfacing \fBgfortran\fR
+ code with other languages.
+ .Sp
+ Note that just because the names match does \fInot\fR mean that the
+ interface implemented by \fBgfortran\fR for an external name matches the
+ interface implemented by some other language for that same name.
+ That is, getting code produced by \fBgfortran\fR to link to code produced
+ by some other compiler using this or any other method can be only a
+ small part of the overall solution\-\-\-getting the code generated by
+ both compilers to agree on issues other than naming can require
+ significant effort, and, unlike naming disagreements, linkers normally
+ cannot detect disagreements in these other areas.
+ .Sp
+ Also, note that with \fB\-fno\-underscoring\fR, the lack of appended
+ underscores introduces the very real possibility that a user-defined
+ external name will conflict with a name in a system library, which
+ could make finding unresolved-reference bugs quite difficult in some
+ cases\-\-\-they might occur at program run time, and show up only as
+ buggy behavior at run time.
+ .Sp
+ In future versions of \fBgfortran\fR we hope to improve naming and linking
+ issues so that debugging always involves using the names as they appear
+ in the source, even if the names as seen by the linker are mangled to
+ prevent accidental linking between procedures with incompatible
+ interfaces.
+ .IP "\fB\-fsecond\-underscore\fR" 4
+ .IX Item "-fsecond-underscore"
+ By default, \fBgfortran\fR appends an underscore to external
+ names. If this option is used \fBgfortran\fR appends two
+ underscores to names with underscores and one underscore to external names
+ with no underscores. (\fBgfortran\fR also appends two underscores to
+ internal names with underscores to avoid naming collisions with external
+ names.
+ .Sp
+ This option has no effect if \fB\-fno\-underscoring\fR is
+ in effect. It is implied by the \fB\-ff2c\fR option.
+ .Sp
+ Otherwise, with this option, an external name such as \fB\s-1MAX_COUNT\s0\fR
+ is implemented as a reference to the link-time external symbol
+ \&\fBmax_count_\|_\fR, instead of \fBmax_count_\fR. This is required
+ for compatibility with \fBg77\fR and \fBf2c\fR, and is implied
+ by use of the \fB\-ff2c\fR option.
+ .IP "\fB\-fbounds\-check\fR" 4
+ .IX Item "-fbounds-check"
+ Enable generation of run-time checks for array subscripts
+ and against the declared minimum and maximum values. It also
+ checks array indices for assumed and deferred
+ shape arrays against the actual allocated bounds.
+ .Sp
+ In the future this may also include other forms of checking, eg. checking
+ substring references.
+ .IP "\fB\-fmax\-stack\-var\-size=\fR\fIn\fR" 4
+ .IX Item "-fmax-stack-var-size=n"
+ This option specifies the size in bytes of the largest array that will be put
+ on the stack.
+ .Sp
+ This option currently only affects local arrays declared with constant
+ bounds, and may not apply to all character variables.
+ Future versions of \fBgfortran\fR may improve this behavior.
+ .Sp
+ The default value for \fIn\fR is 32768.
+ .IP "\fB\-fpackderived\fR" 4
+ .IX Item "-fpackderived"
+ This option tells gfortran to pack derived type members as closely as
+ possible. Code compiled with this option is likely to be incompatible
+ with code compiled without this option, and may execute slower.
+ .IP "\fB\-frepack\-arrays\fR" 4
+ .IX Item "-frepack-arrays"
+ In some circumstances \fBgfortran\fR may pass assumed shape array
+ sections via a descriptor describing a discontiguous area of memory.
+ This option adds code to the function prologue to repack the data into
+ a contiguous block at runtime.
+ .Sp
+ This should result in faster accesses to the array. However it can introduce
+ significant overhead to the function call, especially when the passed data
+ is discontiguous.
+ .SH "ENVIRONMENT"
+ .IX Header "ENVIRONMENT"
+ \&\s-1GNU\s0 Fortran 95 currently does not make use of any environment
+ variables to control its operation above and beyond those
+ that affect the operation of \fBgcc\fR.
+ .SH "BUGS"
+ .IX Header "BUGS"
+ For instructions on reporting bugs, see
+ <\fBhttp://gcc.gnu.org/bugs.html\fR>.
+ .SH "SEE ALSO"
+ .IX Header "SEE ALSO"
+ \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
+ \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
+ and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIgfortran\fR, \fIas\fR,
+ \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
+ .SH "AUTHOR"
+ .IX Header "AUTHOR"
+ See the Info entry for \fBgfortran\fR for contributors to \s-1GCC\s0 and
+ \&\s-1GFORTRAN\s0.
+ .SH "COPYRIGHT"
+ .IX Header "COPYRIGHT"
+ Copyright (c) 2004
+ Free Software Foundation, Inc.
+ .PP
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or
+ any later version published by the Free Software Foundation; with the
+ Invariant Sections being ``\s-1GNU\s0 General Public License'' and ``Funding
+ Free Software'', the Front-Cover texts being (a) (see below), and with
+ the Back-Cover Texts being (b) (see below). A copy of the license is
+ included in the \fIgfdl\fR\|(7) man page.
+ .PP
+ (a) The \s-1FSF\s0's Front-Cover Text is:
+ .PP
+ .Vb 1
+ \& A GNU Manual
+ .Ve
+ .PP
+ (b) The \s-1FSF\s0's Back-Cover Text is:
+ .PP
+ .Vb 3
+ \& You have freedom to copy and modify this GNU Manual, like GNU
+ \& software. Copies published by the Free Software Foundation raise
+ \& funds for GNU development.
+ .Ve
diff -Nrcpad gcc-4.0.3/gcc/doc/gij.1 gcc-4.0.4/gcc/doc/gij.1
*** gcc-4.0.3/gcc/doc/gij.1 2006-03-09 20:52:38.000000000 +0000
--- gcc-4.0.4/gcc/doc/gij.1 2007-01-31 10:51:55.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GIJ 1"
! .TH GIJ 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gij \- GNU interpreter for Java bytecode
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GIJ 1"
! .TH GIJ 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gij \- GNU interpreter for Java bytecode
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/gjnih.1 gcc-4.0.4/gcc/doc/gjnih.1
*** gcc-4.0.3/gcc/doc/gjnih.1 2006-03-09 20:52:38.000000000 +0000
--- gcc-4.0.4/gcc/doc/gjnih.1 2007-01-31 10:51:57.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GJNIH 1"
! .TH GJNIH 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gjnih \- generate JNI header files from Java class files
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GJNIH 1"
! .TH GJNIH 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gjnih \- generate JNI header files from Java class files
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/gpl.7 gcc-4.0.4/gcc/doc/gpl.7
*** gcc-4.0.3/gcc/doc/gpl.7 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/gpl.7 2007-01-31 10:51:52.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GPL 7"
! .TH GPL 7 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
gpl \- GNU General Public License
.SH "DESCRIPTION"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GPL 7"
! .TH GPL 7 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
gpl \- GNU General Public License
.SH "DESCRIPTION"
diff -Nrcpad gcc-4.0.3/gcc/doc/grmic.1 gcc-4.0.4/gcc/doc/grmic.1
*** gcc-4.0.3/gcc/doc/grmic.1 2006-03-09 20:52:38.000000000 +0000
--- gcc-4.0.4/gcc/doc/grmic.1 2007-01-31 10:51:56.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GRMIC 1"
! .TH GRMIC 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
grmic \- Generate stubs for Remote Method Invocation
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GRMIC 1"
! .TH GRMIC 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
grmic \- Generate stubs for Remote Method Invocation
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/grmiregistry.1 gcc-4.0.4/gcc/doc/grmiregistry.1
*** gcc-4.0.3/gcc/doc/grmiregistry.1 2006-03-09 20:52:38.000000000 +0000
--- gcc-4.0.4/gcc/doc/grmiregistry.1 2007-01-31 10:51:56.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "GRMIREGISTRY 1"
! .TH GRMIREGISTRY 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
grmiregistry \- Remote object registry
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "GRMIREGISTRY 1"
! .TH GRMIREGISTRY 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
grmiregistry \- Remote object registry
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/include/gcc-common.texi gcc-4.0.4/gcc/doc/include/gcc-common.texi
*** gcc-4.0.3/gcc/doc/include/gcc-common.texi 2005-09-29 01:29:50.000000000 +0000
--- gcc-4.0.4/gcc/doc/include/gcc-common.texi 2006-03-11 01:18:16.000000000 +0000
***************
*** 4,10 ****
@c Common values used in the GCC manuals:
! @set version-GCC 4.0.3
@c DEVELOPMENT is set to indicate an in-development version,
@c as compared to a release version. When making a release
--- 4,10 ----
@c Common values used in the GCC manuals:
! @set version-GCC 4.0.4
@c DEVELOPMENT is set to indicate an in-development version,
@c as compared to a release version. When making a release
diff -Nrcpad gcc-4.0.3/gcc/doc/install.texi gcc-4.0.4/gcc/doc/install.texi
*** gcc-4.0.3/gcc/doc/install.texi 2005-08-04 09:54:58.000000000 +0000
--- gcc-4.0.4/gcc/doc/install.texi 2007-01-17 19:26:08.000000000 +0000
***************
*** 43,49 ****
@end ifset
@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! @c 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
@c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com
@c Include everything if we're not making html
--- 43,49 ----
@end ifset
@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! @c 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
@c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com
@c Include everything if we're not making html
*************** will be run on these files to make them
*** 1218,1225 ****
Tells GCC not use any target headers from a libc when building a cross
compiler. When crossing to GNU/Linux, you need the headers so GCC
can build the exception handling for libgcc.
- See @uref{http://www.objsw.com/CrossGCC/,,CrossGCC} for more information
- on this option.
@item --with-libs
@itemx --with-libs=``@var{dir1} @var{dir2} @dots{} @var{dirN}''
--- 1218,1223 ----
*************** need to disable comparison in the @file{
*** 1530,1539 ****
@section Building a cross compiler
- We recommend reading the
- @uref{http://www.objsw.com/CrossGCC/,,crossgcc FAQ}
- for information about building cross compilers.
-
When building a cross compiler, it is not generally possible to do a
3-stage bootstrap of the compiler. This makes for an interesting problem
as parts of GCC can only be built with GCC@.
--- 1528,1533 ----
*************** The Java runtime tests can be executed v
*** 1824,1837 ****
in the @file{@var{target}/libjava/testsuite} directory in
the build tree.
! The @uref{http://sources.redhat.com/mauve/,,Mauve Project} provides
a suite of tests for the Java Class Libraries. This suite can be run
as part of libgcj testing by placing the Mauve tree within the libjava
testsuite at @file{libjava/testsuite/libjava.mauve/mauve}, or by
specifying the location of that tree when invoking @samp{make}, as in
@samp{make MAUVEDIR=~/mauve check}.
! @uref{http://sources.redhat.com/mauve/,,Jacks}
is a free testsuite that tests Java compiler front ends. This suite
can be run as part of libgcj testing by placing the Jacks tree within
the libjava testsuite at @file{libjava/testsuite/libjava.jacks/jacks}.
--- 1818,1831 ----
in the @file{@var{target}/libjava/testsuite} directory in
the build tree.
! The @uref{http://sourceware.org/mauve/,,Mauve Project} provides
a suite of tests for the Java Class Libraries. This suite can be run
as part of libgcj testing by placing the Mauve tree within the libjava
testsuite at @file{libjava/testsuite/libjava.mauve/mauve}, or by
specifying the location of that tree when invoking @samp{make}, as in
@samp{make MAUVEDIR=~/mauve check}.
! @uref{http://sourceware.org/mauve/,,Jacks}
is a free testsuite that tests Java compiler front ends. This suite
can be run as part of libgcj testing by placing the Jacks tree within
the libjava testsuite at @file{libjava/testsuite/libjava.jacks/jacks}.
*************** SGI---@uref{http://freeware.sgi.com/,,SG
*** 2106,2112 ****
Microsoft Windows:
@itemize
@item
! The @uref{http://sources.redhat.com/cygwin/,,Cygwin} project;
@item
The @uref{http://www.mingw.org/,,MinGW} project.
@end itemize
--- 2100,2106 ----
Microsoft Windows:
@itemize
@item
! The @uref{http://sourceware.org/cygwin/,,Cygwin} project;
@item
The @uref{http://www.mingw.org/,,MinGW} project.
@end itemize
*************** GCC you first have to install a pre-buil
*** 3498,3512 ****
The Solaris 2 @command{/bin/sh} will often fail to configure
@file{libstdc++-v3}, @file{boehm-gc} or @file{libjava}. We therefore
! recommend to use the following sequence of commands to bootstrap and
! install GCC:
@smallexample
% CONFIG_SHELL=/bin/ksh
% export CONFIG_SHELL
@end smallexample
! and then proceed as described in @uref{build.html,,the build instructions}.
In addition we strongly recommend specifying an absolute path to invoke
@var{srcdir}/configure.
--- 3492,3505 ----
The Solaris 2 @command{/bin/sh} will often fail to configure
@file{libstdc++-v3}, @file{boehm-gc} or @file{libjava}. We therefore
! recommend using the following initial sequence of commands
@smallexample
% CONFIG_SHELL=/bin/ksh
% export CONFIG_SHELL
@end smallexample
! and proceed as described in @uref{configure.html,,the configure instructions}.
In addition we strongly recommend specifying an absolute path to invoke
@var{srcdir}/configure.
*************** The stock GNU binutils 2.15 release is b
*** 3543,3549 ****
single bug. It has been fixed on the 2.15 branch in the CVS repository.
You can obtain a working version by checking out the binutils-2_15-branch
from the CVS repository or applying the patch
! @uref{http://sources.redhat.com/ml/binutils-cvs/2004-09/msg00036.html} to the
release.
We recommend using GNU binutils 2.16 or later in conjunction with GCC 4.x.
--- 3536,3542 ----
single bug. It has been fixed on the 2.15 branch in the CVS repository.
You can obtain a working version by checking out the binutils-2_15-branch
from the CVS repository or applying the patch
! @uref{http://sourceware.org/ml/binutils-cvs/2004-09/msg00036.html} to the
release.
We recommend using GNU binutils 2.16 or later in conjunction with GCC 4.x.
*************** ld: warning: relocation error: R_SPARC_U
*** 3642,3653 ****
To work around this problem, compile with @option{-gstabs+} instead of
plain @option{-g}.
! When configuring the GNU Multiple Precision Library (GMP) on a Solaris 7
! or later system, the canonical target triplet must be specified as the
! @command{build} parameter on the configure line:
@smallexample
! ./configure --build=sparc-sun-solaris2.7 --prefix=xxx --enable-mpfr
@end smallexample
@html
--- 3635,3649 ----
To work around this problem, compile with @option{-gstabs+} instead of
plain @option{-g}.
! When configuring the GNU Multiple Precision Library (GMP) or the MPFR
! library on a Solaris 7 or later system, the canonical target triplet
! must be specified as the @command{build} parameter on the configure
! line. This triplet can be obtained by invoking ./config.guess in
! the toplevel source directory of GCC (and not that of GMP or MPFR).
! For example on a Solaris 7 system:
@smallexample
! % ./configure --build=sparc-sun-solaris2.7 --prefix=xxx
@end smallexample
@html
*************** releases mishandled unaligned relocation
*** 3727,3741 ****
@end html
@heading @anchor{sparc64-x-solaris2}sparc64-*-solaris2*
The following compiler flags must be specified in the configure
step in order to bootstrap this target with the Sun compiler:
@smallexample
! % CC="cc -xildoff -xarch=v9" @var{srcdir}/configure [@var{options}] [@var{target}]
@end smallexample
! @option{-xildoff} turns off the incremental linker, and @option{-xarch=v9}
! specifies the SPARC-V9 architecture to the Sun linker and assembler.
@html
--- 3723,3746 ----
@end html
@heading @anchor{sparc64-x-solaris2}sparc64-*-solaris2*
+ When configuring the GNU Multiple Precision Library (GMP) or the
+ MPFR library, the canonical target triplet must be specified as
+ the @command{build} parameter on the configure line. For example
+ on a Solaris 7 system:
+
+ @smallexample
+ % ./configure --build=sparc64-sun-solaris2.7 --prefix=xxx
+ @end smallexample
+
The following compiler flags must be specified in the configure
step in order to bootstrap this target with the Sun compiler:
@smallexample
! % CC="cc -xarch=v9 -xildoff" @var{srcdir}/configure [@var{options}] [@var{target}]
@end smallexample
! @option{-xarch=v9} specifies the SPARC-V9 architecture to the Sun toolchain
! and @option{-xildoff} turns off the incremental linker.
@html
*************** modern targets.
*** 3919,3925 ****
For some systems, old versions of GNU binutils may also be useful,
and are available from @file{pub/binutils/old-releases} on
! @uref{http://sources.redhat.com/mirrors.html,,sources.redhat.com mirror sites}.
Some of the information on specific systems above relates to
such older systems, but much of the information
--- 3924,3930 ----
For some systems, old versions of GNU binutils may also be useful,
and are available from @file{pub/binutils/old-releases} on
! @uref{http://sourceware.org/mirrors.html,,sourceware.org mirror sites}.
Some of the information on specific systems above relates to
such older systems, but much of the information
diff -Nrcpad gcc-4.0.3/gcc/doc/jcf-dump.1 gcc-4.0.4/gcc/doc/jcf-dump.1
*** gcc-4.0.3/gcc/doc/jcf-dump.1 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/jcf-dump.1 2007-01-31 10:51:55.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "JCF-DUMP 1"
! .TH JCF-DUMP 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
jcf\-dump \- print information about Java class files
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "JCF-DUMP 1"
! .TH JCF-DUMP 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
jcf\-dump \- print information about Java class files
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/jv-convert.1 gcc-4.0.4/gcc/doc/jv-convert.1
*** gcc-4.0.3/gcc/doc/jv-convert.1 2006-03-09 20:52:38.000000000 +0000
--- gcc-4.0.4/gcc/doc/jv-convert.1 2007-01-31 10:51:56.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "JV-CONVERT 1"
! .TH JV-CONVERT 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
jv\-convert \- Convert file from one encoding to another
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "JV-CONVERT 1"
! .TH JV-CONVERT 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
jv\-convert \- Convert file from one encoding to another
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/jv-scan.1 gcc-4.0.4/gcc/doc/jv-scan.1
*** gcc-4.0.3/gcc/doc/jv-scan.1 2006-03-09 20:52:37.000000000 +0000
--- gcc-4.0.4/gcc/doc/jv-scan.1 2007-01-31 10:51:54.000000000 +0000
***************
*** 129,135 ****
.\" ========================================================================
.\"
.IX Title "JV-SCAN 1"
! .TH JV-SCAN 1 "2006-03-09" "gcc-4.0.3" "GNU"
.SH "NAME"
jv\-scan \- print information about Java source file
.SH "SYNOPSIS"
--- 129,135 ----
.\" ========================================================================
.\"
.IX Title "JV-SCAN 1"
! .TH JV-SCAN 1 "2007-01-31" "gcc-4.0.4" "GNU"
.SH "NAME"
jv\-scan \- print information about Java source file
.SH "SYNOPSIS"
diff -Nrcpad gcc-4.0.3/gcc/doc/sourcebuild.texi gcc-4.0.4/gcc/doc/sourcebuild.texi
*** gcc-4.0.3/gcc/doc/sourcebuild.texi 2005-04-15 10:29:41.000000000 +0000
--- gcc-4.0.4/gcc/doc/sourcebuild.texi 2007-01-17 19:26:08.000000000 +0000
***************
*** 1,4 ****
! @c Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
--- 1,4 ----
! @c Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
*************** Skip the test if the test target, includ
*** 1003,1008 ****
--- 1003,1012 ----
is not covered by the effective-target keyword.
This directive must appear after any @code{dg-do} directive in the test.
+ @item @{ dg-shouldfail @var{comment} @{ @var{selector} @} @{ @var{include-opts} @} @{ @var{exclude-opts} @} @}
+ Expect the test executable to return a nonzero exit status if the
+ conditions (which are the same as for @code{dg-skip-if}) are met.
+
@item @{ dg-error @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
This DejaGnu directive appears on a source line that is expected to get
an error message, or else specifies the source line associated with the
*************** The GCC testsuite defines the following
*** 1056,1061 ****
--- 1060,1081 ----
@code{dg-final}.
@table @code
+ @item cleanup-coverage-files
+ Removes coverage data files generated for this test.
+
+ @item cleanup-repo-files
+ Removes files generated for this test for @option{-frepo}.
+
+ @item cleanup-rtl-dump @var{suffix}
+ Removes RTL dump files generated for this test.
+
+ @item cleanup-tree-dump @var{suffix}
+ Removes tree dump files matching @var{suffix} which were generated for
+ this test.
+
+ @item cleanup-saved-temps
+ Removes files for the current test which were kept for @option{--save-temps}.
+
@item scan-file @var{filename} @var{regexp} [@{ target/xfail @var{selector} @}]
Passes if @var{regexp} matches text in @var{filename}.
*************** Runtime tests are executed via @samp{mak
*** 1256,1262 ****
tree. Additional runtime tests can be checked into this testsuite.
Regression testing of the core packages in libgcj is also covered by the
! Mauve testsuite. The @uref{http://sources.redhat.com/mauve/,,Mauve Project}
develops tests for the Java Class Libraries. These tests are run as part
of libgcj testing by placing the Mauve tree within the libjava testsuite
sources at @file{libjava/testsuite/libjava.mauve/mauve}, or by specifying
--- 1276,1282 ----
tree. Additional runtime tests can be checked into this testsuite.
Regression testing of the core packages in libgcj is also covered by the
! Mauve testsuite. The @uref{http://sourceware.org/mauve/,,Mauve Project}
develops tests for the Java Class Libraries. These tests are run as part
of libgcj testing by placing the Mauve tree within the libjava testsuite
sources at @file{libjava/testsuite/libjava.mauve/mauve}, or by specifying
*************** failures for a test run against the list
*** 1269,1275 ****
Update this file when adding new failing tests to Mauve, or when fixing
bugs in libgcj that had caused Mauve test failures.
! The @uref{http://sources.redhat.com/mauve/,,
Jacks} project provides a testsuite for Java compilers that can be used
to test changes that affect the GCJ front end. This testsuite is run as
part of Java testing by placing the Jacks tree within the libjava
--- 1289,1295 ----
Update this file when adding new failing tests to Mauve, or when fixing
bugs in libgcj that had caused Mauve test failures.
! The @uref{http://sourceware.org/mauve/,,
Jacks} project provides a testsuite for Java compilers that can be used
to test changes that affect the GCJ front end. This testsuite is run as
part of Java testing by placing the Jacks tree within the libjava
diff -Nrcpad gcc-4.0.3/gcc/dwarf2out.c gcc-4.0.4/gcc/dwarf2out.c
*** gcc-4.0.3/gcc/dwarf2out.c 2005-12-08 23:50:40.000000000 +0000
--- gcc-4.0.4/gcc/dwarf2out.c 2006-12-27 23:39:58.000000000 +0000
*************** static dw_cfa_location cfa_temp;
*** 1443,1451 ****
cfa.base_offset = -cfa_temp.offset
cfa_temp.offset -= mode_size(mem)
! Rule 15:
! (set {unspec, unspec_volatile})
! effects: target-dependent */
static void
dwarf2out_frame_debug_expr (rtx expr, const char *label)
--- 1443,1451 ----
cfa.base_offset = -cfa_temp.offset
cfa_temp.offset -= mode_size(mem)
! Rule 15:
! (set {unspec, unspec_volatile})
! effects: target-dependent */
static void
dwarf2out_frame_debug_expr (rtx expr, const char *label)
*************** loc_descriptor_from_tree_1 (tree loc, in
*** 8929,8934 ****
--- 8929,8935 ----
/* FALLTHRU */
case RESULT_DECL:
+ case FUNCTION_DECL:
{
rtx rtl = rtl_for_decl_location (loc);
*************** gen_type_die (tree type, dw_die_ref cont
*** 12264,12270 ****
}
if (TREE_CODE (type) == ENUMERAL_TYPE)
! gen_enumeration_type_die (type, context_die);
else
gen_struct_or_union_type_die (type, context_die);
--- 12265,12276 ----
}
if (TREE_CODE (type) == ENUMERAL_TYPE)
! {
! /* This might have been written out by the call to
! declare_in_namespace. */
! if (!TREE_ASM_WRITTEN (type))
! gen_enumeration_type_die (type, context_die);
! }
else
gen_struct_or_union_type_die (type, context_die);
diff -Nrcpad gcc-4.0.3/gcc/expmed.c gcc-4.0.4/gcc/expmed.c
*** gcc-4.0.3/gcc/expmed.c 2005-11-27 14:27:26.000000000 +0000
--- gcc-4.0.4/gcc/expmed.c 2006-06-22 01:01:07.000000000 +0000
***************
*** 1,7 ****
/* Medium-level subroutines: convert bit-field store and extract
and shifts, multiplies and divides to rtl instructions.
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GCC.
--- 1,8 ----
/* Medium-level subroutines: convert bit-field store and extract
and shifts, multiplies and divides to rtl instructions.
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
! 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
! Free Software Foundation, Inc.
This file is part of GCC.
*************** store_bit_field (rtx str_rtx, unsigned H
*** 616,622 ****
/* Ensure insv's size is wide enough for this field. */
&& (GET_MODE_BITSIZE (op_mode) >= bitsize)
&& ! ((REG_P (op0) || GET_CODE (op0) == SUBREG)
! && (bitsize + bitpos > GET_MODE_BITSIZE (op_mode))))
{
int xbitpos = bitpos;
rtx value1;
--- 617,625 ----
/* Ensure insv's size is wide enough for this field. */
&& (GET_MODE_BITSIZE (op_mode) >= bitsize)
&& ! ((REG_P (op0) || GET_CODE (op0) == SUBREG)
! && (bitsize + bitpos > GET_MODE_BITSIZE (op_mode)))
! && insn_data[CODE_FOR_insv].operand[1].predicate (GEN_INT (bitsize),
! VOIDmode))
{
int xbitpos = bitpos;
rtx value1;
*************** store_fixed_bit_field (rtx op0, unsigned
*** 773,779 ****
{
enum machine_mode mode;
unsigned int total_bits = BITS_PER_WORD;
! rtx subtarget, temp;
int all_zero = 0;
int all_one = 0;
--- 776,782 ----
{
enum machine_mode mode;
unsigned int total_bits = BITS_PER_WORD;
! rtx temp;
int all_zero = 0;
int all_one = 0;
*************** store_fixed_bit_field (rtx op0, unsigned
*** 899,922 ****
/* Now clear the chosen bits in OP0,
except that if VALUE is -1 we need not bother. */
! subtarget = (REG_P (op0) || ! flag_force_mem) ? op0 : 0;
if (! all_one)
{
! temp = expand_binop (mode, and_optab, op0,
mask_rtx (mode, bitpos, bitsize, 1),
! subtarget, 1, OPTAB_LIB_WIDEN);
! subtarget = temp;
}
- else
- temp = op0;
/* Now logical-or VALUE into OP0, unless it is zero. */
if (! all_zero)
! temp = expand_binop (mode, ior_optab, temp, value,
! subtarget, 1, OPTAB_LIB_WIDEN);
if (op0 != temp)
emit_move_insn (op0, temp);
}
--- 902,929 ----
/* Now clear the chosen bits in OP0,
except that if VALUE is -1 we need not bother. */
+ /* We keep the intermediates in registers to allow CSE to combine
+ consecutive bitfield assignments. */
! temp = force_reg (mode, op0);
if (! all_one)
{
! temp = expand_binop (mode, and_optab, temp,
mask_rtx (mode, bitpos, bitsize, 1),
! NULL_RTX, 1, OPTAB_LIB_WIDEN);
! temp = force_reg (mode, temp);
}
/* Now logical-or VALUE into OP0, unless it is zero. */
if (! all_zero)
! {
! temp = expand_binop (mode, ior_optab, temp, value,
! NULL_RTX, 1, OPTAB_LIB_WIDEN);
! temp = force_reg (mode, temp);
! }
!
if (op0 != temp)
emit_move_insn (op0, temp);
}
*************** expand_shift (enum tree_code code, enum
*** 2236,2248 ****
code below. */
rtx subtarget = target == shifted ? 0 : target;
rtx temp1;
tree type = TREE_TYPE (amount);
! tree new_amount = make_tree (type, op1);
! tree other_amount
= fold (build2 (MINUS_EXPR, type,
build_int_cst (type, GET_MODE_BITSIZE (mode)),
! amount));
shifted = force_reg (mode, shifted);
--- 2243,2259 ----
code below. */
rtx subtarget = target == shifted ? 0 : target;
+ tree new_amount, other_amount;
rtx temp1;
tree type = TREE_TYPE (amount);
! if (GET_MODE (op1) != TYPE_MODE (type)
! && GET_MODE (op1) != VOIDmode)
! op1 = convert_to_mode (TYPE_MODE (type), op1, 1);
! new_amount = make_tree (type, op1);
! other_amount
= fold (build2 (MINUS_EXPR, type,
build_int_cst (type, GET_MODE_BITSIZE (mode)),
! new_amount));
shifted = force_reg (mode, shifted);
diff -Nrcpad gcc-4.0.3/gcc/expr.c gcc-4.0.4/gcc/expr.c
*** gcc-4.0.3/gcc/expr.c 2005-09-10 01:03:28.000000000 +0000
--- gcc-4.0.4/gcc/expr.c 2006-03-22 04:50:31.000000000 +0000
*************** init_block_move_fn (const char *asmspec)
*** 1375,1380 ****
--- 1375,1382 ----
TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
TREE_NOTHROW (fn) = 1;
+ DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
+ DECL_VISIBILITY_SPECIFIED (fn) = 1;
block_move_fn = fn;
}
*************** init_block_clear_fn (const char *asmspec
*** 2578,2583 ****
--- 2580,2587 ----
TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
TREE_NOTHROW (fn) = 1;
+ DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
+ DECL_VISIBILITY_SPECIFIED (fn) = 1;
block_clear_fn = fn;
}
diff -Nrcpad gcc-4.0.3/gcc/fold-const.c gcc-4.0.4/gcc/fold-const.c
*** gcc-4.0.3/gcc/fold-const.c 2006-02-14 01:51:28.000000000 +0000
--- gcc-4.0.4/gcc/fold-const.c 2006-10-19 20:25:18.000000000 +0000
*************** force_fit_type (tree t, int overflowable
*** 285,298 ****
}
/* Add two doubleword integers with doubleword result.
Each argument is given as two `HOST_WIDE_INT' pieces.
One argument is L1 and H1; the other, L2 and H2.
The value is stored as two `HOST_WIDE_INT' pieces in *LV and *HV. */
int
! add_double (unsigned HOST_WIDE_INT l1, HOST_WIDE_INT h1,
! unsigned HOST_WIDE_INT l2, HOST_WIDE_INT h2,
! unsigned HOST_WIDE_INT *lv, HOST_WIDE_INT *hv)
{
unsigned HOST_WIDE_INT l;
HOST_WIDE_INT h;
--- 285,300 ----
}
/* Add two doubleword integers with doubleword result.
+ Return nonzero if the operation overflows according to UNSIGNED_P.
Each argument is given as two `HOST_WIDE_INT' pieces.
One argument is L1 and H1; the other, L2 and H2.
The value is stored as two `HOST_WIDE_INT' pieces in *LV and *HV. */
int
! add_double_with_sign (unsigned HOST_WIDE_INT l1, HOST_WIDE_INT h1,
! unsigned HOST_WIDE_INT l2, HOST_WIDE_INT h2,
! unsigned HOST_WIDE_INT *lv, HOST_WIDE_INT *hv,
! bool unsigned_p)
{
unsigned HOST_WIDE_INT l;
HOST_WIDE_INT h;
*************** add_double (unsigned HOST_WIDE_INT l1, H
*** 302,308 ****
*lv = l;
*hv = h;
! return OVERFLOW_SUM_SIGN (h1, h2, h);
}
/* Negate a doubleword integer with doubleword result.
--- 304,314 ----
*lv = l;
*hv = h;
!
! if (unsigned_p)
! return (unsigned HOST_WIDE_INT) h < (unsigned HOST_WIDE_INT) h1;
! else
! return OVERFLOW_SUM_SIGN (h1, h2, h);
}
/* Negate a doubleword integer with doubleword result.
*************** neg_double (unsigned HOST_WIDE_INT l1, H
*** 329,343 ****
}
/* Multiply two doubleword integers with doubleword result.
! Return nonzero if the operation overflows, assuming it's signed.
Each argument is given as two `HOST_WIDE_INT' pieces.
One argument is L1 and H1; the other, L2 and H2.
The value is stored as two `HOST_WIDE_INT' pieces in *LV and *HV. */
int
! mul_double (unsigned HOST_WIDE_INT l1, HOST_WIDE_INT h1,
! unsigned HOST_WIDE_INT l2, HOST_WIDE_INT h2,
! unsigned HOST_WIDE_INT *lv, HOST_WIDE_INT *hv)
{
HOST_WIDE_INT arg1[4];
HOST_WIDE_INT arg2[4];
--- 335,350 ----
}
/* Multiply two doubleword integers with doubleword result.
! Return nonzero if the operation overflows according to UNSIGNED_P.
Each argument is given as two `HOST_WIDE_INT' pieces.
One argument is L1 and H1; the other, L2 and H2.
The value is stored as two `HOST_WIDE_INT' pieces in *LV and *HV. */
int
! mul_double_with_sign (unsigned HOST_WIDE_INT l1, HOST_WIDE_INT h1,
! unsigned HOST_WIDE_INT l2, HOST_WIDE_INT h2,
! unsigned HOST_WIDE_INT *lv, HOST_WIDE_INT *hv,
! bool unsigned_p)
{
HOST_WIDE_INT arg1[4];
HOST_WIDE_INT arg2[4];
*************** mul_double (unsigned HOST_WIDE_INT l1, H
*** 368,378 ****
prod[i + 4] = carry;
}
! decode (prod, lv, hv); /* This ignores prod[4] through prod[4*2-1] */
!
! /* Check for overflow by calculating the top half of the answer in full;
! it should agree with the low half's sign bit. */
decode (prod + 4, &toplow, &tophigh);
if (h1 < 0)
{
neg_double (l2, h2, &neglow, &neghigh);
--- 375,389 ----
prod[i + 4] = carry;
}
! decode (prod, lv, hv);
decode (prod + 4, &toplow, &tophigh);
+
+ /* Unsigned overflow is immediate. */
+ if (unsigned_p)
+ return (toplow | tophigh) != 0;
+
+ /* Check for signed overflow by calculating the signed representation of the
+ top half of the result; it should agree with the low half's sign bit. */
if (h1 < 0)
{
neg_double (l2, h2, &neglow, &neghigh);
*************** size_binop (enum tree_code code, tree ar
*** 1633,1638 ****
--- 1644,1652 ----
{
tree type = TREE_TYPE (arg0);
+ if (arg0 == error_mark_node || arg1 == error_mark_node)
+ return error_mark_node;
+
gcc_assert (TREE_CODE (type) == INTEGER_TYPE && TYPE_IS_SIZETYPE (type)
&& type == TREE_TYPE (arg1));
*************** size_binop (enum tree_code code, tree ar
*** 1652,1660 ****
return int_const_binop (code, arg0, arg1, 0);
}
- if (arg0 == error_mark_node || arg1 == error_mark_node)
- return error_mark_node;
-
return fold (build2 (code, type, arg0, arg1));
}
--- 1666,1671 ----
*************** operand_equal_p (tree arg0, tree arg1, u
*** 2376,2381 ****
--- 2387,2397 ----
if (TYPE_UNSIGNED (TREE_TYPE (arg0)) != TYPE_UNSIGNED (TREE_TYPE (arg1)))
return 0;
+ /* If both types don't have the same precision, then it is not safe
+ to strip NOPs. */
+ if (TYPE_PRECISION (TREE_TYPE (arg0)) != TYPE_PRECISION (TREE_TYPE (arg1)))
+ return 0;
+
STRIP_NOPS (arg0);
STRIP_NOPS (arg1);
*************** fold_truthop (enum tree_code code, tree
*** 4808,4817 ****
l_const = fold_convert (lntype, l_const);
l_const = unextend (l_const, ll_bitsize, ll_unsignedp, ll_and_mask);
l_const = const_binop (LSHIFT_EXPR, l_const, size_int (xll_bitpos), 0);
! if (! integer_zerop (const_binop (BIT_AND_EXPR, l_const,
! fold (build1 (BIT_NOT_EXPR,
! lntype, ll_mask)),
! 0)))
{
warning ("comparison is always %d", wanted_code == NE_EXPR);
--- 4824,4833 ----
l_const = fold_convert (lntype, l_const);
l_const = unextend (l_const, ll_bitsize, ll_unsignedp, ll_and_mask);
l_const = const_binop (LSHIFT_EXPR, l_const, size_int (xll_bitpos), 0);
! if (integer_nonzerop (const_binop (BIT_AND_EXPR, l_const,
! fold (build1 (BIT_NOT_EXPR,
! lntype, ll_mask)),
! 0)))
{
warning ("comparison is always %d", wanted_code == NE_EXPR);
*************** fold_truthop (enum tree_code code, tree
*** 4823,4832 ****
r_const = fold_convert (lntype, r_const);
r_const = unextend (r_const, rl_bitsize, rl_unsignedp, rl_and_mask);
r_const = const_binop (LSHIFT_EXPR, r_const, size_int (xrl_bitpos), 0);
! if (! integer_zerop (const_binop (BIT_AND_EXPR, r_const,
! fold (build1 (BIT_NOT_EXPR,
! lntype, rl_mask)),
! 0)))
{
warning ("comparison is always %d", wanted_code == NE_EXPR);
--- 4839,4848 ----
r_const = fold_convert (lntype, r_const);
r_const = unextend (r_const, rl_bitsize, rl_unsignedp, rl_and_mask);
r_const = const_binop (LSHIFT_EXPR, r_const, size_int (xrl_bitpos), 0);
! if (integer_nonzerop (const_binop (BIT_AND_EXPR, r_const,
! fold (build1 (BIT_NOT_EXPR,
! lntype, rl_mask)),
! 0)))
{
warning ("comparison is always %d", wanted_code == NE_EXPR);
*************** fold_div_compare (enum tree_code code, t
*** 5797,5824 ****
tree arg01 = TREE_OPERAND (arg0, 1);
unsigned HOST_WIDE_INT lpart;
HOST_WIDE_INT hpart;
int overflow;
/* We have to do this the hard way to detect unsigned overflow.
prod = int_const_binop (MULT_EXPR, arg01, arg1, 0); */
! overflow = mul_double (TREE_INT_CST_LOW (arg01),
! TREE_INT_CST_HIGH (arg01),
! TREE_INT_CST_LOW (arg1),
! TREE_INT_CST_HIGH (arg1), &lpart, &hpart);
prod = build_int_cst_wide (TREE_TYPE (arg00), lpart, hpart);
prod = force_fit_type (prod, -1, overflow, false);
! if (TYPE_UNSIGNED (TREE_TYPE (arg0)))
{
tmp = int_const_binop (MINUS_EXPR, arg01, integer_one_node, 0);
lo = prod;
/* Likewise hi = int_const_binop (PLUS_EXPR, prod, tmp, 0). */
! overflow = add_double (TREE_INT_CST_LOW (prod),
! TREE_INT_CST_HIGH (prod),
! TREE_INT_CST_LOW (tmp),
! TREE_INT_CST_HIGH (tmp),
! &lpart, &hpart);
hi = build_int_cst_wide (TREE_TYPE (arg00), lpart, hpart);
hi = force_fit_type (hi, -1, overflow | TREE_OVERFLOW (prod),
TREE_CONSTANT_OVERFLOW (prod));
--- 5813,5842 ----
tree arg01 = TREE_OPERAND (arg0, 1);
unsigned HOST_WIDE_INT lpart;
HOST_WIDE_INT hpart;
+ bool unsigned_p = TYPE_UNSIGNED (TREE_TYPE (arg0));
int overflow;
/* We have to do this the hard way to detect unsigned overflow.
prod = int_const_binop (MULT_EXPR, arg01, arg1, 0); */
! overflow = mul_double_with_sign (TREE_INT_CST_LOW (arg01),
! TREE_INT_CST_HIGH (arg01),
! TREE_INT_CST_LOW (arg1),
! TREE_INT_CST_HIGH (arg1),
! &lpart, &hpart, unsigned_p);
prod = build_int_cst_wide (TREE_TYPE (arg00), lpart, hpart);
prod = force_fit_type (prod, -1, overflow, false);
! if (unsigned_p)
{
tmp = int_const_binop (MINUS_EXPR, arg01, integer_one_node, 0);
lo = prod;
/* Likewise hi = int_const_binop (PLUS_EXPR, prod, tmp, 0). */
! overflow = add_double_with_sign (TREE_INT_CST_LOW (prod),
! TREE_INT_CST_HIGH (prod),
! TREE_INT_CST_LOW (tmp),
! TREE_INT_CST_HIGH (tmp),
! &lpart, &hpart, unsigned_p);
hi = build_int_cst_wide (TREE_TYPE (arg00), lpart, hpart);
hi = force_fit_type (hi, -1, overflow | TREE_OVERFLOW (prod),
TREE_CONSTANT_OVERFLOW (prod));
*************** fold (tree expr)
*** 9790,9796 ****
if (integer_zerop (TREE_OPERAND (t, 2))
&& truth_value_p (TREE_CODE (arg0))
&& truth_value_p (TREE_CODE (arg1)))
! return fold (build2 (TRUTH_ANDIF_EXPR, type, arg0, arg1));
/* Convert A ? B : 1 into !A || B if A and B are truth values. */
if (integer_onep (TREE_OPERAND (t, 2))
--- 9808,9816 ----
if (integer_zerop (TREE_OPERAND (t, 2))
&& truth_value_p (TREE_CODE (arg0))
&& truth_value_p (TREE_CODE (arg1)))
! return fold (build2 (TRUTH_ANDIF_EXPR, type,
! fold_convert (type, arg0),
! arg1));
/* Convert A ? B : 1 into !A || B if A and B are truth values. */
if (integer_onep (TREE_OPERAND (t, 2))
*************** fold (tree expr)
*** 9800,9806 ****
/* Only perform transformation if ARG0 is easily inverted. */
tem = invert_truthvalue (arg0);
if (TREE_CODE (tem) != TRUTH_NOT_EXPR)
! return fold (build2 (TRUTH_ORIF_EXPR, type, tem, arg1));
}
/* Convert A ? 0 : B into !A && B if A and B are truth values. */
--- 9820,9828 ----
/* Only perform transformation if ARG0 is easily inverted. */
tem = invert_truthvalue (arg0);
if (TREE_CODE (tem) != TRUTH_NOT_EXPR)
! return fold (build2 (TRUTH_ORIF_EXPR, type,
! fold_convert (type, tem),
! arg1));
}
/* Convert A ? 0 : B into !A && B if A and B are truth values. */
*************** fold (tree expr)
*** 9811,9817 ****
/* Only perform transformation if ARG0 is easily inverted. */
tem = invert_truthvalue (arg0);
if (TREE_CODE (tem) != TRUTH_NOT_EXPR)
! return fold (build2 (TRUTH_ANDIF_EXPR, type, tem,
TREE_OPERAND (t, 2)));
}
--- 9833,9840 ----
/* Only perform transformation if ARG0 is easily inverted. */
tem = invert_truthvalue (arg0);
if (TREE_CODE (tem) != TRUTH_NOT_EXPR)
! return fold (build2 (TRUTH_ANDIF_EXPR, type,
! fold_convert (type, tem),
TREE_OPERAND (t, 2)));
}
*************** fold (tree expr)
*** 9819,9825 ****
if (integer_onep (arg1)
&& truth_value_p (TREE_CODE (arg0))
&& truth_value_p (TREE_CODE (TREE_OPERAND (t, 2))))
! return fold (build2 (TRUTH_ORIF_EXPR, type, arg0,
TREE_OPERAND (t, 2)));
return t;
--- 9842,9849 ----
if (integer_onep (arg1)
&& truth_value_p (TREE_CODE (arg0))
&& truth_value_p (TREE_CODE (TREE_OPERAND (t, 2))))
! return fold (build2 (TRUTH_ORIF_EXPR, type,
! fold_convert (type, arg0),
TREE_OPERAND (t, 2)));
return t;
diff -Nrcpad gcc-4.0.3/gcc/fortran/ChangeLog gcc-4.0.4/gcc/fortran/ChangeLog
*** gcc-4.0.3/gcc/fortran/ChangeLog 2006-03-09 20:44:38.000000000 +0000
--- gcc-4.0.4/gcc/fortran/ChangeLog 2007-01-31 10:22:05.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/gcc/fortran/gfortran.info gcc-4.0.4/gcc/fortran/gfortran.info
*** gcc-4.0.3/gcc/fortran/gfortran.info 1970-01-01 00:00:00.000000000 +0000
--- gcc-4.0.4/gcc/fortran/gfortran.info 2007-01-31 10:51:38.000000000 +0000
***************
*** 0 ****
--- 1,5205 ----
+ This is doc/gfortran.info, produced by makeinfo version 4.8 from
+ /home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/fortran/gfortran.texi.
+
+ Copyright (C) 1999-2005 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1 or
+ any later version published by the Free Software Foundation; with the
+ Invariant Sections being "GNU General Public License" and "Funding Free
+ Software", the Front-Cover texts being (a) (see below), and with the
+ Back-Cover Texts being (b) (see below). A copy of the license is
+ included in the section entitled "GNU Free Documentation License".
+
+ (a) The FSF's Front-Cover Text is:
+
+ A GNU Manual
+
+ (b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
+
+ INFO-DIR-SECTION Programming
+ START-INFO-DIR-ENTRY
+ * gfortran: (gfortran). The GNU Fortran 95 Compiler.
+ END-INFO-DIR-ENTRY
+ This file documents the use and the internals of the GNU Fortran 95
+ compiler, (`gfortran').
+
+ Published by the Free Software Foundation 59 Temple Place - Suite 330
+ Boston, MA 02111-1307 USA
+
+ Copyright (C) 1999-2005 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1 or
+ any later version published by the Free Software Foundation; with the
+ Invariant Sections being "GNU General Public License" and "Funding Free
+ Software", the Front-Cover texts being (a) (see below), and with the
+ Back-Cover Texts being (b) (see below). A copy of the license is
+ included in the section entitled "GNU Free Documentation License".
+
+ (a) The FSF's Front-Cover Text is:
+
+ A GNU Manual
+
+ (b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
+
+ Contributed by Steven Bosscher ().
+
+
+ File: gfortran.info, Node: Top, Next: Copying, Up: (DIR)
+
+ Introduction
+ ************
+
+ This manual documents the use of `gfortran', the GNU Fortran 95
+ compiler. You can find in this manual how to invoke `gfortran', as well
+ as its features and incompatibilities.
+
+ * Menu:
+
+ * Copying:: GNU General Public License says
+ how you can copy and share GNU Fortran.
+ * GNU Free Documentation License::
+ How you can copy and share this manual.
+ * Funding:: How to help assure continued work for free software.
+ * Getting Started:: What you should know about `gfortran'.
+ * GFORTRAN and GCC:: You can compile Fortran, C, or other programs.
+ * GFORTRAN and G77:: Why we chose to start from scratch.
+ * Invoking GFORTRAN:: Command options supported by `gfortran'.
+ * Project Status:: Status of `gfortran', roadmap, proposed extensions.
+ * Contributing:: How you can help.
+ * Standards:: Standards supported by `gfortran'
+ * Extensions:: Language extensions implemented by `gfortran'
+ * Intrinsic Procedures:: Intrinsic procedures supported by `gfortran'
+ * Index:: Index of this documentation.
+
+
+ File: gfortran.info, Node: Copying, Next: GNU Free Documentation License, Prev: Top, Up: Top
+
+ GNU GENERAL PUBLIC LICENSE
+ **************************
+
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+ ========
+
+ The licenses for most software are designed to take away your freedom
+ to share and change it. By contrast, the GNU General Public License is
+ intended to guarantee your freedom to share and change free
+ software--to make sure the software is free for all its users. This
+ General Public License applies to most of the Free Software
+ Foundation's software and to any other program whose authors commit to
+ using it. (Some other Free Software Foundation software is covered by
+ the GNU Library General Public License instead.) You can apply it to
+ your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+ price. Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ this service if you wish), that you receive source code or can get it
+ if you want it, that you can change the software or use pieces of it in
+ new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+ anyone to deny you these rights or to ask you to surrender the rights.
+ These restrictions translate to certain responsibilities for you if you
+ distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must give the recipients all the rights that
+ you have. You must make sure that they, too, receive or can get the
+ source code. And you must show them these terms so they know their
+ rights.
+
+ We protect your rights with two steps: (1) copyright the software,
+ and (2) offer you this license which gives you legal permission to copy,
+ distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+ that everyone understands that there is no warranty for this free
+ software. If the software is modified by someone else and passed on, we
+ want its recipients to know that what they have is not the original, so
+ that any problems introduced by others will not reflect on the original
+ authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+ patents. We wish to avoid the danger that redistributors of a free
+ program will individually obtain patent licenses, in effect making the
+ program proprietary. To prevent this, we have made it clear that any
+ patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+ modification follow.
+
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ 0. This License applies to any program or other work which contains a
+ notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License. The "Program",
+ below, refers to any such program or work, and a "work based on
+ the Program" means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or
+ translated into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".) Each
+ licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any
+ warranty; and give any other recipients of the Program a copy of
+ this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+ of it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+ a. You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b. You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program
+ or any part thereof, to be licensed as a whole at no charge
+ to all third parties under the terms of this License.
+
+ c. If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display
+ an announcement including an appropriate copyright notice and
+ a notice that there is no warranty (or else, saying that you
+ provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to
+ view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an
+ announcement, your work based on the Program is not required
+ to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not
+ apply to those sections when you distribute them as separate
+ works. But when you distribute the same sections as part of a
+ whole which is a work based on the Program, the distribution of
+ the whole must be on the terms of this License, whose permissions
+ for other licensees extend to the entire whole, and thus to each
+ and every part regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on
+ a volume of a storage or distribution medium does not bring the
+ other work under the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you also do one of the
+ following:
+
+ a. Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Sections 1 and 2 above on a medium customarily used for
+ software interchange; or,
+
+ b. Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange; or,
+
+ c. Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with
+ such an offer, in accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete
+ source code means all the source code for all modules it contains,
+ plus any associated interface definition files, plus the scripts
+ used to control compilation and installation of the executable.
+ However, as a special exception, the source code distributed need
+ not include anything that is normally distributed (in either
+ source or binary form) with the major components (compiler,
+ kernel, and so on) of the operating system on which the executable
+ runs, unless that component itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Program or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Program (or any work
+ based on the Program), you indicate your acceptance of this
+ License to do so, and all its terms and conditions for copying,
+ distributing or modifying the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program
+ subject to these terms and conditions. You may not impose any
+ further restrictions on the recipients' exercise of the rights
+ granted herein. You are not responsible for enforcing compliance
+ by third parties to this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Program at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Program by all those who
+ receive copies directly or indirectly through you, then the only
+ way you could satisfy both it and this License would be to refrain
+ entirely from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of
+ any such claims; this section has the sole purpose of protecting
+ the integrity of the free software distribution system, which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is
+ willing to distribute software through any other system and a
+ licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Program under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 9. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such
+ new versions will be similar in spirit to the present version, but
+ may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies
+ to it and "any later version", you have the option of following
+ the terms and conditions either of that version or of any later
+ version published by the Free Software Foundation. If the Program
+ does not specify a version number of this License, you may choose
+ any version ever published by the Free Software Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted
+ by the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision
+ will be guided by the two goals of preserving the free status of
+ all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+
+ NO WARRANTY
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
+ WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
+ QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
+ SERVICING, REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+ How to Apply These Terms to Your New Programs
+ =============================================
+
+ If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these
+ terms.
+
+ To do so, attach the following notices to the program. It is safest
+ to attach them to the start of each source file to most effectively
+ convey the exclusion of warranty; and each file should have at least
+ the "copyright" line and a pointer to where the full notice is found.
+
+ ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+ Copyright (C) YEAR NAME OF AUTHOR
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Also add information on how to contact you by electronic and paper
+ mail.
+
+ If the program is interactive, make it output a short notice like
+ this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+ type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+ The hypothetical commands `show w' and `show c' should show the
+ appropriate parts of the General Public License. Of course, the
+ commands you use may be called something other than `show w' and `show
+ c'; they could even be mouse-clicks or menu items--whatever suits your
+ program.
+
+ You should also get your employer (if you work as a programmer) or
+ your school, if any, to sign a "copyright disclaimer" for the program,
+ if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ SIGNATURE OF TY COON, 1 April 1989
+ Ty Coon, President of Vice
+
+ This General Public License does not permit incorporating your
+ program into proprietary programs. If your program is a subroutine
+ library, you may consider it more useful to permit linking proprietary
+ applications with the library. If this is what you want to do, use the
+ GNU Library General Public License instead of this License.
+
+
+ File: gfortran.info, Node: GNU Free Documentation License, Next: Funding, Prev: Copying, Up: Top
+
+ GNU Free Documentation License
+ ******************************
+
+ Version 1.2, November 2002
+
+ Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A
+ copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include proprietary formats that
+ can be read and edited only by proprietary word processors, SGML or
+ XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF
+ produced by some word processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of
+ previous versions (which should, if there were any, be listed
+ in the History section of the Document). You may use the
+ same title as a previous version if the original publisher of
+ that version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on
+ the Title Page. If there is no section Entitled "History" in
+ the Document, create one stating the title, year, authors,
+ and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in
+ the previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in
+ the "History" section. You may omit a network location for a
+ work that was published at least four years before the
+ Document itself, or if the original publisher of the version
+ it refers to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the
+ section all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section
+ titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warrany Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided for under this License. Any other
+ attempt to copy, modify, sublicense or distribute the Document is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ `http://www.gnu.org/copyleft/'.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation.
+
+ ADDENDUM: How to use this License for your documents
+ ====================================================
+
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and license
+ notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+ Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of
+ free software license, such as the GNU General Public License, to
+ permit their use in free software.
+
+
+ File: gfortran.info, Node: Funding, Next: Getting Started, Prev: GNU Free Documentation License, Up: Top
+
+ Funding Free Software
+ *********************
+
+ If you want to have more free software a few years from now, it makes
+ sense for you to help encourage people to contribute funds for its
+ development. The most effective approach known is to encourage
+ commercial redistributors to donate.
+
+ Users of free software systems can boost the pace of development by
+ encouraging for-a-fee distributors to donate part of their selling price
+ to free software developers--the Free Software Foundation, and others.
+
+ The way to convince distributors to do this is to demand it and
+ expect it from them. So when you compare distributors, judge them
+ partly by how much they give to free software development. Show
+ distributors they must compete to be the one who gives the most.
+
+ To make this approach work, you must insist on numbers that you can
+ compare, such as, "We will donate ten dollars to the Frobnitz project
+ for each disk sold." Don't be satisfied with a vague promise, such as
+ "A portion of the profits are donated," since it doesn't give a basis
+ for comparison.
+
+ Even a precise fraction "of the profits from this disk" is not very
+ meaningful, since creative accounting and unrelated business decisions
+ can greatly alter what fraction of the sales price counts as profit.
+ If the price you pay is $50, ten percent of the profit is probably less
+ than a dollar; it might be a few cents, or nothing at all.
+
+ Some redistributors do development work themselves. This is useful
+ too; but to keep everyone honest, you need to inquire how much they do,
+ and what kind. Some kinds of development make much more long-term
+ difference than others. For example, maintaining a separate version of
+ a program contributes very little; maintaining the standard version of a
+ program for the whole community contributes much. Easy new ports
+ contribute little, since someone else would surely do them; difficult
+ ports such as adding a new CPU to the GNU Compiler Collection
+ contribute more; major new features or packages contribute the most.
+
+ By establishing the idea that supporting further development is "the
+ proper thing to do" when distributing free software for a fee, we can
+ assure a steady flow of resources into making more free software.
+
+ Copyright (C) 1994 Free Software Foundation, Inc.
+ Verbatim copying and redistribution of this section is permitted
+ without royalty; alteration is not permitted.
+
+
+ File: gfortran.info, Node: Getting Started, Next: GFORTRAN and GCC, Prev: Funding, Up: Top
+
+ 1 Getting Started
+ *****************
+
+ Gfortran is the GNU Fortran 95 compiler front end, designed initially
+ as a free replacement for, or alternative to, the unix `f95' command;
+ `gfortran' is command you'll use to invoke the compiler.
+
+ _Gfortran is not yet a fully conformant Fortran 95 compiler_. It
+ can generate code for most constructs and expressions, but work remains
+ to be done. In particular, there are known deficiencies with ENTRY,
+ NAMELIST, and sophisticated use of MODULES, POINTERS and DERIVED TYPES.
+ For those whose Fortran codes conform to either the Fortran 77
+ standard or the GNU Fortran 77 language, we recommend to use `g77' from
+ GCC 3.4. We recommend that distributors continue to provide packages
+ of g77-3.4 until we announce that `gfortran' fully replaces `g77'. The
+ gfortran developers welcome any feedback on user experience with
+ `gfortran' at .
+
+ When `gfortran' is finished, it will do everything you expect from
+ any decent compiler:
+
+ * Read a user's program, stored in a file and containing
+ instructions written in Fortran 77, Fortran 90 or Fortran 95.
+ This file contains "source code".
+
+ * Translate the user's program into instructions a computer can
+ carry out more quickly than it takes to translate the instructions
+ in the first place. The result after compilation of a program is
+ "machine code", code designed to be efficiently translated and
+ processed by a machine such as your computer. Humans usually
+ aren't as good writing machine code as they are at writing Fortran
+ (or C++, Ada, or Java), because is easy to make tiny mistakes
+ writing machine code.
+
+ * Provide the user with information about the reasons why the
+ compiler is unable to create a binary from the source code.
+ Usually this will be the case if the source code is flawed. When
+ writing Fortran, it is easy to make big mistakes. The Fortran 90
+ requires that the compiler can point out mistakes to the user. An
+ incorrect usage of the language causes an "error message".
+
+ The compiler will also attempt to diagnose cases where the user's
+ program contains a correct usage of the language, but instructs
+ the computer to do something questionable. This kind of
+ diagnostics message is called a "warning message".
+
+ * Provide optional information about the translation passes from the
+ source code to machine code. This can help a user of the compiler
+ to find the cause of certain bugs which may not be obvious in the
+ source code, but may be more easily found at a lower level
+ compiler output. It also helps developers to find bugs in the
+ compiler itself.
+
+ * Provide information in the generated machine code that can make it
+ easier to find bugs in the program (using a debugging tool, called
+ a "debugger", such as the GNU Debugger `gdb').
+
+ * Locate and gather machine code already generated to perform
+ actions requested by statements in the user's program. This
+ machine code is organized into "modules" and is located and
+ "linked" to the user program.
+
+ Gfortran consists of several components:
+
+ * A version of the `gcc' command (which also might be installed as
+ the system's `cc' command) that also understands and accepts
+ Fortran source code. The `gcc' command is the "driver" program for
+ all the languages in the GNU Compiler Collection (GCC); With `gcc',
+ you can compiler the source code of any language for which a front
+ end is available in GCC.
+
+ * The `gfortran' command itself, which also might be installed as the
+ system's `f95' command. `gfortran' is just another driver program,
+ but specifically for the Fortran 95 compiler only. The difference
+ with `gcc' is that `gfortran' will automatically link the correct
+ libraries to your program.
+
+ * A collection of run-time libraries. These libraries contains the
+ machine code needed to support capabilities of the Fortran
+ language that are not directly provided by the machine code
+ generated by the `gfortran' compilation phase, such as intrinsic
+ functions and subroutines, and routines for interaction with files
+ and the operating system.
+
+ * The Fortran compiler itself, (`f951'). This is the gfortran
+ parser and code generator, linked to and interfaced with the GCC
+ backend library. `f951' "translates" the source code to assembler
+ code. You would typically not use this program directly; instead,
+ the `gcc' or `gfortran' driver programs will call it for you.
+
+
+ File: gfortran.info, Node: GFORTRAN and GCC, Next: GFORTRAN and G77, Prev: Getting Started, Up: Top
+
+ 2 GFORTRAN and GCC
+ ******************
+
+ GCC used to be the GNU "C" Compiler, but is now known as the "GNU
+ Compiler Collection". GCC provides the GNU system with a very versatile
+ compiler middle end (shared optimization passes), and with back ends
+ (code generators) for many different computer architectures and
+ operating systems. The code of the middle end and back end are shared
+ by all compiler front ends that are in the GNU Compiler Collection.
+
+ A GCC front end is essentially a source code parser and a pass to
+ generate a representation of the semantics of the program in the source
+ code in the GCC language independent intermediate language, called
+ "GENERIC".
+
+ The parser takes a source file written in a particular computer
+ language, reads and parses it, and tries to make sure that the source
+ code conforms to the language rules. Once the correctness of a program
+ has been established, the compiler will build a data structure known as
+ the "Abstract Syntax tree", or just "AST" or "tree" for short. This
+ data structure represents the whole program or a subroutine or a
+ function. The "tree" is passed to the GCC middle end, which will
+ perform optimization passes on it, pass the optimized AST and generate
+ assembly for the program unit.
+
+ Different phases in this translation process can be, and in fact
+ _are_ merged in many compiler front ends. GNU Fortran 95 has a strict
+ separation between the parser and code generator.
+
+ The goal of the gfortran project is to build a new front end for GCC:
+ A Fortran 95 front end. In a non-gfortran installation, `gcc' will not
+ be able to compile Fortran 95 source code (only the "C" front end has
+ to be compiled if you want to build GCC, all other languages are
+ optional). If you build GCC with gfortran, `gcc' will recognize
+ `.f/.f90/.f95' source files and accepts Fortran 95 specific command
+ line options.
+
+
+ File: gfortran.info, Node: GFORTRAN and G77, Next: Invoking GFORTRAN, Prev: GFORTRAN and GCC, Up: Top
+
+ 3 GFORTRAN and G77
+ ******************
+
+ Why do we write a compiler front end from scratch? There's a fine
+ Fortran 77 compiler in the GNU Compiler Collection that accepts some
+ features of the Fortran 90 standard as extensions. Why not start from
+ there and revamp it?
+
+ One of the reasons is that Craig Burley, the author of G77, has
+ decided to stop working on the G77 front end. On Craig explains the
+ reasons for his decision to stop working on G77
+ (http://world.std.com/~burley/g77-why.html) in one of the pages in his
+ homepage. Among the reasons is a lack of interest in improvements to
+ `g77'. Users appear to be quite satisfied with `g77' as it is. While
+ `g77' is still being maintained (by Toon Moene), it is unlikely that
+ sufficient people will be willing to completely rewrite the existing
+ code.
+
+ But there are other reasons to start from scratch. Many people,
+ including Craig Burley, no longer agreed with certain design decisions
+ in the G77 front end. Also, the interface of `g77' to the back end is
+ written in a style which is confusing and not up to date on recommended
+ practice. In fact, a full rewrite had already been planned for GCC 3.0.
+
+ When Craig decided to stop, it just seemed to be a better idea to
+ start a new project from scratch, because it was expected to be easier
+ to maintain code we develop ourselves than to do a major overhaul of
+ `g77' first, and then build a Fortran 95 compiler out of it.
+
+
+ File: gfortran.info, Node: Invoking GFORTRAN, Next: Project Status, Prev: GFORTRAN and G77, Up: Top
+
+ 4 GNU Fortran 95 Command Options
+ ********************************
+
+ The `gfortran' command supports all the options supported by the `gcc'
+ command. Only options specific to gfortran are documented here.
+
+ _Gfortran is not yet a fully conformant Fortran 95 compiler_. It
+ can generate code for most constructs and expressions, but work remains
+ to be done. In particular, there are known deficiencies with ENTRY,
+ NAMELIST, and sophisticated use of MODULES, POINTERS and DERIVED TYPES.
+ For those whose Fortran codes conform to either the Fortran 77
+ standard or the GNU Fortran 77 language, we recommend to use `g77' from
+ GCC 3.4. We recommend that distributors continue to provide packages
+ of g77-3.4 until we announce that `gfortran' fully replaces `g77'. The
+ gfortran developers welcome any feedback on user experience with
+ `gfortran' at .
+
+ *Note GCC Command Options: (gcc)Invoking GCC, for information on the
+ non-Fortran-specific aspects of the `gcc' command (and, therefore, the
+ `gfortran' command).
+
+ All `gcc' and `gfortran' options are accepted both by `gfortran' and
+ by `gcc' (as well as any other drivers built at the same time, such as
+ `g++'), since adding `gfortran' to the `gcc' distribution enables
+ acceptance of `gfortran' options by all of the relevant drivers.
+
+ In some cases, options have positive and negative forms; the
+ negative form of `-ffoo' would be `-fno-foo'. This manual documents
+ only one of these two forms, whichever one is not the default.
+
+ * Menu:
+
+ * Option Summary:: Brief list of all `gfortran' options,
+ without explanations.
+ * Fortran Dialect Options:: Controlling the variant of Fortran language
+ compiled.
+ * Warning Options:: How picky should the compiler be?
+ * Debugging Options:: Symbol tables, measurements, and debugging dumps.
+ * Directory Options:: Where to find module files
+ * Code Gen Options:: Specifying conventions for function calls, data layout
+ and register usage.
+ * Environment Variables:: Env vars that affect GNU Fortran.
+
+
+ File: gfortran.info, Node: Option Summary, Next: Fortran Dialect Options, Up: Invoking GFORTRAN
+
+ 4.1 Option Summary
+ ==================
+
+ Here is a summary of all the options specific to GNU Fortran, grouped
+ by type. Explanations are in the following sections.
+
+ _Fortran Language Options_
+ *Note Options Controlling Fortran Dialect: Fortran Dialect Options.
+ -ffree-form -fno-fixed-form
+ -fdollar-ok -fimplicit-none -fmax-identifier-length
+ -std=STD
+ -ffixed-line-length-N -ffixed-line-length-none
+ -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
+
+ _Warning Options_
+ *Note Options to Request or Suppress Warnings: Warning Options.
+ -fsyntax-only -pedantic -pedantic-errors
+ -w -Wall -Waliasing -Wconversion
+ -Wimplicit-interface -Wnonstd-intrinsics -Wsurprising -Wunderflow
+ -Wunused-labels -Wline-truncation -W
+
+ _Debugging Options_
+ *Note Options for Debugging Your Program or GCC: Debugging Options.
+ -fdump-parse-tree
+
+ _Directory Options_
+ *Note Options for Directory Search: Directory Options.
+ -IDIR -MDIR
+
+ _Code Generation Options_
+ *Note Options for Code Generation Conventions: Code Gen Options.
+ -fno-automatic -ff2c -fno-underscoring -fsecond-underscore
+ -fbounds-check -fmax-stack-var-size=N
+ -fpackderived -frepack-arrays
+
+
+ * Menu:
+
+ * Fortran Dialect Options:: Controlling the variant of Fortran language
+ compiled.
+ * Warning Options:: How picky should the compiler be?
+ * Debugging Options:: Symbol tables, measurements, and debugging dumps.
+ * Directory Options:: Where to find module files
+ * Code Gen Options:: Specifying conventions for function calls, data layout
+ and register usage.
+
+
+ File: gfortran.info, Node: Fortran Dialect Options, Next: Warning Options, Prev: Option Summary, Up: Invoking GFORTRAN
+
+ 4.2 Options Controlling Fortran Dialect
+ =======================================
+
+ The following options control the dialect of Fortran that the compiler
+ accepts:
+
+ `-ffree-form'
+
+ `-ffixed-form'
+ Specify the layout used by the the source file. The free form
+ layout was introduced in Fortran 90. Fixed form was traditionally
+ used in older Fortran programs.
+
+ `-fdefault-double-8'
+ Set the "DOUBLE PRECISION" type to an 8 byte wide.
+
+ `-fdefault-integer-8'
+ Set the default integer and logical types to an 8 byte wide type.
+ Do nothing if this is already the default.
+
+ `-fdefault-real-8'
+ Set the default real type to an 8 byte wide type. Do nothing if
+ this is already the default.
+
+ `-fdollar-ok'
+ Allow `$' as a valid character in a symbol name.
+
+ `-fno-backslash'
+
+ `'
+ Compile switch to change the interpretation of a backslash from
+ "C"-style escape characters to a single backslash character.
+
+ `-ffixed-line-length-N'
+ Set column after which characters are ignored in typical fixed-form
+ lines in the source file, and through which spaces are assumed (as
+ if padded to that length) after the ends of short fixed-form lines.
+
+ Popular values for N include 72 (the standard and the default), 80
+ (card image), and 132 (corresponds to "extended-source" options in
+ some popular compilers). N may be `none', meaning that the entire
+ line is meaningful and that continued character constants never
+ have implicit spaces appended to them to fill out the line.
+ `-ffixed-line-length-0' means the same thing as
+ `-ffixed-line-length-none'.
+
+ `-fmax-identifier-length=N'
+ Specify the maximum allowed identifier length. Typical values are
+ 31 (Fortran 95) and 63 (Fortran 200x).
+
+ `-fimplicit-none'
+ Specify that no implicit typing is allowed, unless overridden by
+ explicit `IMPLICIT' statements. This is the equivalent of adding
+ `implicit none' to the start of every procedure.
+
+ `-std=STD'
+ Conform to the specified standard. Allowed values for STD are
+ `gnu', `f95', `f2003' and `legacy'.
+
+
+
+ File: gfortran.info, Node: Warning Options, Next: Debugging Options, Prev: Fortran Dialect Options, Up: Invoking GFORTRAN
+
+ 4.3 Options to Request or Suppress Warnings
+ ===========================================
+
+ Warnings are diagnostic messages that report constructions which are
+ not inherently erroneous but which are risky or suggest there might
+ have been an error.
+
+ You can request many specific warnings with options beginning `-W',
+ for example `-Wimplicit' to request warnings on implicit declarations.
+ Each of these specific warning options also has a negative form
+ beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
+ This manual lists only one of the two forms, whichever is not the
+ default.
+
+ These options control the amount and kinds of warnings produced by
+ GNU Fortran:
+
+ `-fsyntax-only'
+ Check the code for syntax errors, but don't do anything beyond
+ that.
+
+ `-pedantic'
+ Issue warnings for uses of extensions to FORTRAN 95. `-pedantic'
+ also applies to C-language constructs where they occur in GNU
+ Fortran source files, such as use of `\e' in a character constant
+ within a directive like `#include'.
+
+ Valid FORTRAN 95 programs should compile properly with or without
+ this option. However, without this option, certain GNU extensions
+ and traditional Fortran features are supported as well. With this
+ option, many of them are rejected.
+
+ Some users try to use `-pedantic' to check programs for
+ conformance. They soon find that it does not do quite what they
+ want--it finds some nonstandard practices, but not all. However,
+ improvements to `gfortran' in this area are welcome.
+
+ This should be used in conjunction with -std=STD.
+
+ `-pedantic-errors'
+ Like `-pedantic', except that errors are produced rather than
+ warnings.
+
+ `-w'
+ Inhibit all warning messages.
+
+ `-Wall'
+ Enables commonly used warning options that which pertain to usage
+ that we recommend avoiding and that we believe is easy to avoid.
+ This currently includes `-Wunused-labels', `-Waliasing',
+ `-Wsurprising', `-Wnonstd-intrinsic' and `-Wline-truncation'.
+
+ `-Waliasing'
+ Warn about possible aliasing of dummy arguments. The following
+ example will trigger the warning as it would be illegal to `bar' to
+ modify either parameter.
+ INTEGER A
+ CALL BAR(A,A)
+
+ `-Wconversion'
+ Warn about implicit conversions between different types.
+
+ `-Wimplicit-interface'
+ Warn about when procedure are called without an explicit interface.
+ Note this only checks that an explicit interface is present. It
+ does not check that the declared interfaces are consistent across
+ program units.
+
+ `-Wnonstd-intrinsic'
+ Warn if the user tries to use an intrinsic that does not belong to
+ the standard the user has chosen via the -std option.
+
+ `-Wsurprising'
+ Produce a warning when "suspicious" code constructs are
+ encountered. While technically legal these usually indicate that
+ an error has been made.
+
+ This currently produces a warning under the following
+ circumstances:
+
+ * An INTEGER SELECT construct has a CASE that can never be
+ matched as its lower value is greater than its upper value.
+
+ * A LOGICAL SELECT construct has three CASE statements.
+
+ `-Wunderflow'
+ Produce a warning when numerical constant expressions are
+ encountered, which yield an UNDERFLOW during compilation.
+
+ `-Wunused-labels'
+ Warn whenever a label is defined but never referenced.
+
+ `-Werror'
+ Turns all warnings into errors.
+
+ `-W'
+ Turns on "extra warnings" and, if optimization is specified via
+ `-O', the `-Wuninitialized' option. (This might change in future
+ versions of `gfortran'
+
+ *Note Options to Request or Suppress Warnings: (gcc)Warning Options,
+ for information on more options offered by the GBE shared by
+ `gfortran', `gcc' and other GNU compilers.
+
+ Some of these have no effect when compiling programs written in
+ Fortran.
+
+
+ File: gfortran.info, Node: Debugging Options, Next: Directory Options, Prev: Warning Options, Up: Invoking GFORTRAN
+
+ 4.4 Options for Debugging Your Program or GNU Fortran
+ =====================================================
+
+ GNU Fortran has various special options that are used for debugging
+ either your program or `gfortran'
+
+ `-fdump-parse-tree'
+ Output the internal parse tree before starting code generation.
+ Only really useful for debugging gfortran itself.
+
+ *Note Options for Debugging Your Program or GCC: (gcc)Debugging
+ Options, for more information on debugging options.
+
+
+ File: gfortran.info, Node: Directory Options, Next: Code Gen Options, Prev: Debugging Options, Up: Invoking GFORTRAN
+
+ 4.5 Options for Directory Search
+ ================================
+
+ There options affect how affect how `gfortran' searches for files
+ specified via the `INCLUDE' directive, and where it searches for
+ previously compiled modules.
+
+ It also affects the search paths used by `cpp' when used to
+ preprocess Fortran source.
+
+ `-IDIR'
+ These affect interpretation of the `INCLUDE' directive (as well as
+ of the `#include' directive of the `cpp' preprocessor).
+
+ Also note that the general behavior of `-I' and `INCLUDE' is
+ pretty much the same as of `-I' with `#include' in the `cpp'
+ preprocessor, with regard to looking for `header.gcc' files and
+ other such things.
+
+ This path is also used to search for `.mod' files when previously
+ compiled modules are required by a `USE' statement.
+
+ *Note Options for Directory Search: (gcc)Directory Options, for
+ information on the `-I' option.
+
+ `-MDIR'
+
+ `-JDIR'
+ This option specifies where to put `.mod' files for compiled
+ modules. It is also added to the list of directories to searched
+ by an `USE' statement.
+
+ The default is the current directory.
+
+ `-J' is an alias for `-M' to avoid conflicts with existing GCC
+ options.
+
+
+ File: gfortran.info, Node: Code Gen Options, Next: Environment Variables, Prev: Directory Options, Up: Invoking GFORTRAN
+
+ 4.6 Options for Code Generation Conventions
+ ===========================================
+
+ These machine-independent options control the interface conventions
+ used in code generation.
+
+ Most of them have both positive and negative forms; the negative form
+ of `-ffoo' would be `-fno-foo'. In the table below, only one of the
+ forms is listed--the one which is not the default. You can figure out
+ the other form by either removing `no-' or adding it.
+
+ `-fno-automatic'
+ Treat each program unit as if the `SAVE' statement was specified
+ for every local variable and array referenced in it. Does not
+ affect common blocks. (Some Fortran compilers provide this option
+ under the name `-static'.)
+
+ `-ff2c'
+ Generate code designed to be compatible with code generated by
+ `g77' and `f2c'.
+
+ The calling conventions used by `g77' (originally implemented in
+ `f2c') require functions that return type default `REAL' to
+ actually return the C type `double', and functions that return
+ type `COMPLEX' to return the values via an extra argument in the
+ calling sequence that points to where to store the return value.
+ Under the default GNU calling conventions, such functions simply
+ return their results as they would in GNU C - default `REAL'
+ functions return the C type `float', and `COMPLEX' functions
+ return the GNU C type `complex'. Additionally, this option
+ implies the `-fsecond-underscore' option, unless
+ `-fno-second-underscore' is explicitly requested.
+
+ This does not affect the generation of code that interfaces with
+ the `libgfortran' library.
+
+ _Caution:_ It is not a good idea to mix Fortran code compiled with
+ `-ff2c' with code compiled with the default `-fno-f2c' calling
+ conventions as, calling `COMPLEX' or default `REAL' functions
+ between program parts which were compiled with different calling
+ conventions will break at execution time.
+
+ _Caution:_ This will break code which passes intrinsic functions
+ of type default `REAL' or `COMPLEX' as actual arguments, as the
+ library implementations use the `-fno-f2c' calling conventions.
+
+ `-fno-underscoring'
+ Do not transform names of entities specified in the Fortran source
+ file by appending underscores to them.
+
+ With `-funderscoring' in effect, `gfortran' appends one underscore
+ to external names with no underscores.
+
+ This is done to ensure compatibility with code produced by many
+ UNIX Fortran compilers.
+
+ _Caution_: The default behavior of `gfortran' is incompatible with
+ `f2c' and `g77', please use the `-ff2c' option if you want object
+ files compiled with `gfortran' to be compatible with object code
+ created with these tools.
+
+ Use of `-fno-underscoring' is not recommended unless you are
+ experimenting with issues such as integration of (GNU) Fortran into
+ existing system environments (vis-a-vis existing libraries, tools,
+ and so on).
+
+ For example, with `-funderscoring', and assuming other defaults
+ like `-fcase-lower' and that `j()' and `max_count()' are external
+ functions while `my_var' and `lvar' are local variables, a
+ statement like
+
+ I = J() + MAX_COUNT (MY_VAR, LVAR)
+
+ is implemented as something akin to:
+
+ i = j_() + max_count__(&my_var__, &lvar);
+
+ With `-fno-underscoring', the same statement is implemented as:
+
+ i = j() + max_count(&my_var, &lvar);
+
+ Use of `-fno-underscoring' allows direct specification of
+ user-defined names while debugging and when interfacing `gfortran'
+ code with other languages.
+
+ Note that just because the names match does _not_ mean that the
+ interface implemented by `gfortran' for an external name matches
+ the interface implemented by some other language for that same
+ name. That is, getting code produced by `gfortran' to link to
+ code produced by some other compiler using this or any other
+ method can be only a small part of the overall solution--getting
+ the code generated by both compilers to agree on issues other than
+ naming can require significant effort, and, unlike naming
+ disagreements, linkers normally cannot detect disagreements in
+ these other areas.
+
+ Also, note that with `-fno-underscoring', the lack of appended
+ underscores introduces the very real possibility that a
+ user-defined external name will conflict with a name in a system
+ library, which could make finding unresolved-reference bugs quite
+ difficult in some cases--they might occur at program run time, and
+ show up only as buggy behavior at run time.
+
+ In future versions of `gfortran' we hope to improve naming and
+ linking issues so that debugging always involves using the names
+ as they appear in the source, even if the names as seen by the
+ linker are mangled to prevent accidental linking between
+ procedures with incompatible interfaces.
+
+ `-fsecond-underscore'
+ By default, `gfortran' appends an underscore to external names.
+ If this option is used `gfortran' appends two underscores to names
+ with underscores and one underscore to external names with no
+ underscores. (`gfortran' also appends two underscores to internal
+ names with underscores to avoid naming collisions with external
+ names.
+
+ This option has no effect if `-fno-underscoring' is in effect. It
+ is implied by the `-ff2c' option.
+
+ Otherwise, with this option, an external name such as `MAX_COUNT'
+ is implemented as a reference to the link-time external symbol
+ `max_count__', instead of `max_count_'. This is required for
+ compatibility with `g77' and `f2c', and is implied by use of the
+ `-ff2c' option.
+
+ `-fbounds-check'
+ Enable generation of run-time checks for array subscripts and
+ against the declared minimum and maximum values. It also checks
+ array indices for assumed and deferred shape arrays against the
+ actual allocated bounds.
+
+ In the future this may also include other forms of checking, eg.
+ checking substring references.
+
+ `-fmax-stack-var-size=N'
+ This option specifies the size in bytes of the largest array that
+ will be put on the stack.
+
+ This option currently only affects local arrays declared with
+ constant bounds, and may not apply to all character variables.
+ Future versions of `gfortran' may improve this behavior.
+
+ The default value for N is 32768.
+
+ `-fpackderived'
+ This option tells gfortran to pack derived type members as closely
+ as possible. Code compiled with this option is likely to be
+ incompatible with code compiled without this option, and may
+ execute slower.
+
+ `-frepack-arrays'
+ In some circumstances `gfortran' may pass assumed shape array
+ sections via a descriptor describing a discontiguous area of
+ memory. This option adds code to the function prologue to repack
+ the data into a contiguous block at runtime.
+
+ This should result in faster accesses to the array. However it
+ can introduce significant overhead to the function call,
+ especially when the passed data is discontiguous.
+
+ *Note Options for Code Generation Conventions: (gcc)Code Gen
+ Options, for information on more options offered by the GBE shared by
+ `gfortran' `gcc' and other GNU compilers.
+
+
+ File: gfortran.info, Node: Environment Variables, Prev: Code Gen Options, Up: Invoking GFORTRAN
+
+ 4.7 Environment Variables Affecting GNU Fortran
+ ===============================================
+
+ GNU Fortran 95 currently does not make use of any environment variables
+ to control its operation above and beyond those that affect the
+ operation of `gcc'.
+
+ *Note Environment Variables Affecting GCC: (gcc)Environment
+ Variables, for information on environment variables.
+
+
+ File: gfortran.info, Node: Project Status, Next: Contributing, Prev: Invoking GFORTRAN, Up: Top
+
+ 5 Project Status
+ ****************
+
+ As soon as gfortran can parse all of the statements correctly, it
+ will be in the "larva" state. When we generate code, the "puppa"
+ state. When gfortran is done, we'll see if it will be a beautiful
+ butterfly, or just a big bug....
+
+ -Andy Vaught, April 2000
+
+ The start of the GNU Fortran 95 project was announced on the GCC
+ homepage in March 18, 2000 (even though Andy had already been working
+ on it for a while, or course).
+
+ Gfortran is currently reaching the stage where is is able to compile
+ real world programs. However it is still under development and has
+ many rough edges.
+
+ * Menu:
+
+ * Compiler Status::
+ * Library Status::
+ * Proposed Extensions::
+
+
+ File: gfortran.info, Node: Compiler Status, Next: Library Status, Up: Project Status
+
+ 5.1 Compiler Status
+ ===================
+
+ _Front end_
+ This is the part of gfortran which parses a source file, verifies
+ that it is valid Fortran 95, performs compile time replacement of
+ constants (PARAMETER variables) and reads and generate module
+ files. This is almost complete. Every Fortran 95 source should be
+ accepted, and most none-Fortran 95 source should be rejected. If
+ you find a source file where this is not true, please tell us. You
+ can use the -fsyntax-only switch to make gfortran quit after
+ running the front end, effectively reducing it to a syntax checker.
+
+ _Middle end interface_
+ These are the parts of gfortran that take the parse tree generated
+ by the front end and translate it to the GENERIC form required by
+ the GCC back end. Work is ongoing in these parts of gfortran, but
+ a large part has already been completed.
+
+
+ File: gfortran.info, Node: Library Status, Next: Proposed Extensions, Prev: Compiler Status, Up: Project Status
+
+ 5.2 Library Status
+ ==================
+
+ Some intrinsic functions map directly to library functions, and in most
+ cases the name of the library function used depends on the type of the
+ arguments. For some intrinsics we generate inline code, and for others,
+ such as sin, cos and sqrt, we rely on the backend to use special
+ instructions in the floating point unit of the CPU if available, or to
+ fall back to a call to libm if these are not available.
+
+ Implementation of some non-elemental intrinsic functions (eg.
+ DOT_PRODUCT, AVERAGE) is not yet optimal. This is hard because we have
+ to make decisions whether to use inline code (good for small arrays as
+ no function call overhead occurs) or generate function calls (good for
+ large arrays as it allows use of hand-optimized assembly routines, SIMD
+ instructions, etc.)
+
+ The IO library is still under development. The following features
+ should be usable for real programs:
+
+ - List directed
+
+ - Unformatted sequential
+
+ Usable with bugs:
+
+ - Formatted sequential ('T' edit descriptor, and others)
+
+ Not recommended:
+
+ - Unformatted direct access
+
+ - Formatted direct access
+
+ Many Fortran programs only use a small subset of the available IO
+ capabilities, so your mileage may vary.
+
+
+ File: gfortran.info, Node: Proposed Extensions, Prev: Library Status, Up: Project Status
+
+ 5.3 Proposed Extensions
+ =======================
+
+ Here's a list of proposed extensions for `gfortran', in no particular
+ order. Most of these are necessary to be fully compatible with
+ existing Fortran compilers, but they are not part of the official J3
+ Fortran 95 standard.
+
+ 5.3.1 Compiler extensions:
+ --------------------------
+
+ * Flag for defining the kind number for default logicals.
+
+ * User-specified alignment rules for structures.
+
+ * Flag to generate a `Makefile' info.
+
+ * Automatically extend single precision constants to double.
+
+ * Cray pointers (this was high on the `g77' wishlist).
+
+ * Compile code that conserves memory by dynamically allocating
+ common and module storage either on stack or heap.
+
+ * Flag to cause the compiler to distinguish between upper and lower
+ case names. The Fortran 95 standard does not distinguish them.
+
+ * Compile flag to generate code for array conformance checking
+ (suggest -CC).
+
+ * User control of symbol names (underscores, etc).
+
+ * Compile setting for maximum size of stack frame size before
+ spilling parts to static or heap.
+
+ * Flag to force local variables into static space.
+
+ * Flag to force local variables onto stack.
+
+ * Flag to compile lines beginning with "D".
+
+ * Flag to ignore lines beginning with "D".
+
+ * Flag for maximum errors before ending compile.
+
+ * Generate code to check for null pointer dereferences - prints
+ locus of dereference instead of segfaulting. There was some
+ discussion about this option in the g95 development mailing list.
+
+ * Allow setting default unit number.
+
+ * Option to initialize of otherwise uninitialized integer and
+ floating point variables.
+
+ * Support for OpenMP directives. This also requires support from
+ the runtime library and the rest of the compiler.
+
+ * Support for Fortran 200x. This includes several new features
+ including floating point exceptions, extended use of allocatable
+ arrays, C interoperability, Parameterizer data types and function
+ pointers.
+
+ 5.3.2 Environment Options
+ -------------------------
+
+ * Pluggable library modules for random numbers, linear algebra. LA
+ should use BLAS calling conventions.
+
+ * Environment variables controlling actions on arithmetic exceptions
+ like overflow, underflow, precision loss - Generate NaN, abort,
+ default. action.
+
+ * Set precision for fp units that support it (i387).
+
+ * Variables for setting fp rounding mode.
+
+ * Variable to fill uninitialized variables with a user-defined bit
+ pattern.
+
+ * Environment variable controlling filename that is opened for that
+ unit number.
+
+ * Environment variable to clear/trash memory being freed.
+
+ * Environment variable to control tracing of allocations and frees.
+
+ * Environment variable to display allocated memory at normal program
+ end.
+
+ * Environment variable for filename for * IO-unit.
+
+ * Environment variable for temporary file directory.
+
+ * Environment variable forcing standard output to be line buffered
+ (unix).
+
+ * Variable for swapping endianness during unformatted read.
+
+ * Variable for swapping Endianness during unformatted write.
+
+
+ File: gfortran.info, Node: Extensions, Next: Intrinsic Procedures, Prev: Standards, Up: Top
+
+ 6 Extensions
+ ************
+
+ `gfortran' implements a number of extensions over standard Fortran.
+ This chapter contains information on their syntax and meaning. There
+ are currently two categories of `gfortran' extensions, those that
+ provide functionality beyond that provided by any standard, and those
+ that are supported by `gfortran' purely for backward compatibility with
+ legacy compilers. By default, `-std=gnu' allows the compiler to accept
+ both types of extensions, but to warn about the use of the latter.
+ Specifying either `-std=f95' or `-std=f2003' disables both types of
+ extensions, and `-std=legacy' allows both without warning.
+
+ * Menu:
+
+ * Old-style kind specifications::
+ * Old-style variable initialization::
+ * Extensions to namelist::
+ * Implicitly interconvert LOGICAL and INTEGER::
+ * Hollerith constants support::
+
+
+ File: gfortran.info, Node: Old-style kind specifications, Next: Old-style variable initialization, Up: Extensions
+
+ 6.1 Old-style kind specifications
+ =================================
+
+ `gfortran' allows old-style kind specifications in declarations. These
+ look like:
+ TYPESPEC*k x,y,z
+ where `TYPESPEC' is a basic type, and where `k' is a valid kind
+ number for that type. The statement then declares `x', `y' and `z' to
+ be of type `TYPESPEC' with kind `k'. In other words, it is equivalent
+ to the standard conforming declaration
+ TYPESPEC(k) x,y,z
+
+
+ File: gfortran.info, Node: Old-style variable initialization, Next: Extensions to namelist, Prev: Old-style kind specifications, Up: Extensions
+
+ 6.2 Old-style variable initialization
+ =====================================
+
+ `gfortran' allows old-style initialization of variables of the form:
+ INTEGER*4 i/1/,j/2/
+ REAL*8 x(2,2) /3*0.,1./
+ These are only allowed in declarations without double colons (`::'),
+ as these were introduced in Fortran 90 which also introduced a new
+ syntax for variable initializations. The syntax for the individual
+ initializers is as for the `DATA' statement, but unlike in a `DATA'
+ statement, an initializer only applies to the variable immediately
+ preceding. In other words, something like `INTEGER I,J/2,3/' is not
+ valid.
+
+ Examples of standard conforming code equivalent to the above
+ example, are:
+ ! Fortran 90
+ INTEGER(4) :: i = 1, j = 2
+ REAL(8) :: x(2,2) = RESHAPE((/0.,0.,0.,1./),SHAPE(x))
+ ! Fortran 77
+ INTEGER i, j
+ DOUBLE PRECISION x(2,2)
+ DATA i,j,x /1,2,3*0.,1./
+
+
+ File: gfortran.info, Node: Extensions to namelist, Next: Implicitly interconvert LOGICAL and INTEGER, Prev: Old-style variable initialization, Up: Extensions
+
+ 6.3 Extensions to namelist
+ ==========================
+
+ `gfortran' fully supports the fortran95 standard for namelist io
+ including array qualifiers, substrings and fully qualified derived
+ types. The output from a namelist write is compatible with namelist
+ read. The output has all names in upper case and indentation to column
+ 1 after the namelist name. Two extensions are permitted:
+
+ Old-style use of $ instead of &
+ $MYNML
+ X(:)%Y(2) = 1.0 2.0 3.0
+ CH(1:4) = "abcd"
+ $END
+
+ It should be noticed that the default terminator is / rather than
+ &END.
+
+ Querying of the namelist when inputting from stdin. After at least
+ one space, entering ? sends to stdout the namelist name and the names of
+ the variables in the namelist:
+ ?
+
+ &mynml
+ x
+ x%y
+ ch
+ &end
+
+ Entering =? outputs the namelist to stdout, as if WRITE (*,NML =
+ mynml) had been called:
+ =?
+
+ &MYNML
+ X(1)%Y= 0.000000 , 1.000000 , 0.000000 ,
+ X(2)%Y= 0.000000 , 2.000000 , 0.000000 ,
+ X(3)%Y= 0.000000 , 3.000000 , 0.000000 ,
+ CH=abcd, /
+
+ To aid this dialog, when input is from stdin, errors produce send
+ their messages to stderr and execution continues, even if IOSTAT is set.
+
+ PRINT namelist is permitted. This causes an error if -std=f95 is
+ used.
+ PROGRAM test_print
+ REAL, dimension (4) :: x = (/1.0, 2.0, 3.0, 4.0/)
+ NAMELIST /mynml/ x
+ PRINT mynml
+ END PROGRAM test_print
+
+
+ File: gfortran.info, Node: Implicitly interconvert LOGICAL and INTEGER, Next: Hollerith constants support, Prev: Extensions to namelist, Up: Extensions
+
+ 6.4 Implicitly interconvert LOGICAL and INTEGER
+ ===============================================
+
+ As a GNU extension for backwards compatability with other compilers,
+ `gfortran' allows the implicit conversion of LOGICALs to INTEGERs and
+ vice versa. When converting from a LOGICAL to an INTEGER, the numeric
+ value of `.FALSE.' is zero, and that of `.TRUE.' is one. When
+ converting from INTEGER to LOGICAL, the value zero is interpreted as
+ `.FALSE.' and any non-zero value is interpreted as `.TRUE.'.
+
+ INTEGER*4 i
+ i = .FALSE.
+
+
+ File: gfortran.info, Node: Hollerith constants support, Prev: Implicitly interconvert LOGICAL and INTEGER, Up: Extensions
+
+ 6.5 Hollerith constants support
+ ===============================
+
+ A Hollerith constant is a string of characters preceded by the letter
+ `H' or `h', and there must be an literal, unsigned, nonzero default
+ integer constant indicating the number of characters in the string.
+ Hollerith constants are stored as byte strings, one character per byte.
+
+ `gfortran' supports Hollerith constants. They can be used as the
+ right hands in the `DATA' statement and `ASSIGN' statement, also as the
+ arguments. The left hands can be of Integer, Real, Complex and Logical
+ type. The constant will be padded or trancated to fit the size of left
+ hand.
+
+ Valid Hollerith constants examples:
+ complex*16 x(2)
+ data x /16Habcdefghijklmnop, 16Hqrstuvwxyz012345/
+ call foo (4H abc)
+ x(1) = 16Habcdefghijklmnop
+
+ Invalid Hollerith constants examples:
+ integer*4 a
+ a = 8H12345678 ! The Hollerith constant is too long. It will be truncated.
+ a = 0H ! At least one character needed.
+
+
+ File: gfortran.info, Node: Intrinsic Procedures, Next: Index, Prev: Extensions, Up: Top
+
+ 7 Intrinsic Procedures
+ **********************
+
+ This portion of the document is incomplete and undergoing massive
+ expansion and editing. All contributions and corrections are strongly
+ encouraged.
+
+ * Menu:
+
+ * Introduction: Introduction
+ * `ABORT': ABORT, Abort the program
+ * `ABS': ABS, Absolute value
+ * `ACHAR': ACHAR, Character in ASCII collating sequence
+ * `ACOS': ACOS, Arc cosine function
+ * `ADJUSTL': ADJUSTL, Left adjust a string
+ * `ADJUSTR': ADJUSTR, Right adjust a string
+ * `AIMAG': AIMAG, Imaginary part of complex number
+ * `AINT': AINT, Truncate to a whole number
+ * `ALL': ALL, Determine if all values are true
+ * `ALLOCATED': ALLOCATED, Status of allocatable entity
+ * `ANINT': ANINT, Nearest whole number
+ * `ANY': ANY, Determine if any values are true
+ * `ASIN': ASIN, Arcsine function
+ * `ASSOCIATED': ASSOCIATED, Status of a pointer or pointer/target pair
+ * `ATAN': ATAN, Arctangent function
+ * `ATAN2': ATAN2, Arctangent function
+ * `BESJ0': BESJ0, Bessel function of the first kind of order 0
+ * `BESJ1': BESJ1, Bessel function of the first kind of order 1
+ * `BESJN': BESJN, Bessel function of the first kind
+ * `BESY0': BESY0, Bessel function of the second kind of order 0
+ * `BESY1': BESY1, Bessel function of the second kind of order 1
+ * `BESYN': BESYN, Bessel function of the second kind
+ * `BIT_SIZE': BIT_SIZE, Bit size inquiry function
+ * `BTEST': BTEST, Bit test function
+ * `CEILING': CEILING, Integer ceiling function
+ * `CHAR': CHAR, Character conversion function
+ * `CMPLX': CMPLX, Complex conversion function
+ * `COMMAND_ARGUMENT_COUNT': COMMAND_ARGUMENT_COUNT, Command line argument count
+ * `CONJG': CONJG, Complex conjugate function
+ * `COS': COS, Cosine function
+ * `COSH': COSH, Hyperbolic cosine function
+ * `COUNT': COUNT, Count occurrences of .TRUE. in an array
+ * `CPU_TIME': CPU_TIME, CPU time subroutine
+ * `CSHIFT': CSHIFT, Circular array shift function
+ * `CTIME': CTIME, Subroutine (or function) to convert a time into a string
+ * `DATE_AND_TIME': DATE_AND_TIME, Date and time subroutine
+ * `DBLE': DBLE, Double precision conversion function
+ * `DCMPLX': DCMPLX, Double complex conversion function
+ * `DFLOAT': DFLOAT, Double precision conversion function
+ * `DIGITS': DIGITS, Significant digits function
+ * `DIM': DIM, Dim function
+ * `DOT_PRODUCT': DOT_PRODUCT, Dot product function
+ * `DPROD': DPROD, Double product function
+ * `DREAL': DREAL, Double real part function
+ * `DTIME': DTIME, Execution time subroutine (or function)
+ * `EOSHIFT': EOSHIFT, End-off shift function
+ * `EPSILON': EPSILON, Epsilon function
+ * `ERF': ERF, Error function
+ * `ERFC': ERFC, Complementary error function
+ * `ETIME': ETIME, Execution time subroutine (or function)
+ * `EXIT': EXIT, Exit the program with status.
+ * `EXP': EXP, Exponential function
+ * `EXPONENT': EXPONENT, Exponent function
+ * `FDATE': FDATE, Subroutine (or function) to get the current time as a string
+ * `FLOOR': FLOOR, Integer floor function
+ * `FNUM': FNUM, File number function
+ * `LOG': LOG, Logarithm function
+ * `LOG10': LOG10, Base 10 logarithm function
+ * `SECNDS': SECNDS, Time function
+ * `SQRT': SQRT, Square-root function
+ * `SIN': SIN, Sine function
+ * `SINH': SINH, Hyperbolic sine function
+ * `TAN': TAN, Tangent function
+ * `TANH': TANH, Hyperbolic tangent function
+
+
+ File: gfortran.info, Node: Introduction, Next: ABORT, Up: Intrinsic Procedures
+
+ 7.1 Introduction to intrinsic procedures
+ ========================================
+
+ Gfortran provides a rich set of intrinsic procedures that includes all
+ the intrinsic procedures required by the Fortran 95 standard, a set of
+ intrinsic procedures for backwards compatibility with Gnu Fortran 77
+ (i.e., `g77'), and a small selection of intrinsic procedures from the
+ Fortran 2003 standard. Any description here, which conflicts with a
+ description in either the Fortran 95 standard or the Fortran 2003
+ standard, is unintentional and the standard(s) should be considered
+ authoritative.
+
+ The enumeration of the `KIND' type parameter is processor defined in
+ the Fortran 95 standard. Gfortran defines the default integer type and
+ default real type by `INTEGER(KIND=4)' and `REAL(KIND=4)',
+ respectively. The standard mandates that both data types shall have
+ another kind, which have more precision. On typical target
+ architectures supported by `gfortran', this kind type parameter is
+ `KIND=8'. Hence, `REAL(KIND=8)' and `DOUBLE PRECISION' are equivalent.
+ In the description of generic intrinsic procedures, the kind type
+ parameter will be specified by `KIND=*', and in the description of
+ specific names for an intrinsic procedure the kind type parameter will
+ be explicitly given (e.g., `REAL(KIND=4)' or `REAL(KIND=8)'). Finally,
+ for brevity the optional `KIND=' syntax will be omitted.
+
+ Many of the intrinsics procedures take one or more optional
+ arguments. This document follows the convention used in the Fortran 95
+ standard, and denotes such arguments by square brackets.
+
+ `Gfortran' offers the `-std=f95' and `-std=gnu' options, which can
+ be used to restrict the set of intrinsic procedures to a given
+ standard. By default, `gfortran' sets the `-std=gnu' option, and so
+ all intrinsic procedures described here are accepted. There is one
+ caveat. For a select group of intrinsic procedures, `g77' implemented
+ both a function and a subroutine. Both classes have been implemented
+ in `gfortran' for backwards compatibility with `g77'. It is noted here
+ that these functions and subroutines cannot be intermixed in a given
+ subprogram. In the descriptions that follow, the applicable option(s)
+ is noted.
+
+
+ File: gfortran.info, Node: ABORT, Next: ABS, Prev: Introduction, Up: Intrinsic Procedures
+
+ 7.2 `ABORT' -- Abort the program
+ ================================
+
+ _Description_:
+ `ABORT' causes immediate termination of the program. On operating
+ systems that support a core dump, `ABORT' will produce a core dump,
+ which is suitable for debugging purposes.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ non-elemental subroutine
+
+ _Syntax_:
+ `CALL ABORT'
+
+ _Return value_:
+ Does not return.
+
+ _Example_:
+ program test_abort
+ integer :: i = 1, j = 2
+ if (i /= j) call abort
+ end program test_abort
+
+
+ File: gfortran.info, Node: ABS, Next: ACHAR, Prev: ABORT, Up: Intrinsic Procedures
+
+ 7.3 `ABS' -- Absolute value
+ ===========================
+
+ _Description_:
+ `ABS(X)' computes the absolute value of `X'.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = ABS(X)'
+
+ _Arguments_:
+ X The type of the argument shall be an `INTEGER(*)',
+ `REAL(*)', or `COMPLEX(*)'.
+
+ _Return value_:
+ The return value is of the same type and kind as the argument
+ except the return value is `REAL(*)' for a `COMPLEX(*)' argument.
+
+ _Example_:
+ program test_abs
+ integer :: i = -1
+ real :: x = -1.e0
+ complex :: z = (-1.e0,0.e0)
+ i = abs(i)
+ x = abs(x)
+ x = abs(z)
+ end program test_abs
+
+ _Specific names_:
+ Name Argument Return type Option
+ `CABS(Z)' `COMPLEX(4) Z' `REAL(4)' f95, gnu
+ `DABS(X)' `REAL(8) X' `REAL(8)' f95, gnu
+ `IABS(I)' `INTEGER(4) I' `INTEGER(4)' f95, gnu
+ `ZABS(Z)' `COMPLEX(8) Z' `COMPLEX(8)' gnu
+ `CDABS(Z)' `COMPLEX(8) Z' `COMPLEX(8)' gnu
+
+
+ File: gfortran.info, Node: ACHAR, Next: ACOS, Prev: ABS, Up: Intrinsic Procedures
+
+ 7.4 `ACHAR' -- Character in ASCII collating sequence
+ ====================================================
+
+ _Description_:
+ `ACHAR(I)' returns the character located at position `I' in the
+ ASCII collating sequence.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `C = ACHAR(I)'
+
+ _Arguments_:
+ I The type shall be `INTEGER(*)'.
+
+ _Return value_:
+ The return value is of type `CHARACTER' with a length of one. The
+ kind type parameter is the same as `KIND('A')'.
+
+ _Example_:
+ program test_achar
+ character c
+ c = achar(32)
+ end program test_achar
+
+
+ File: gfortran.info, Node: ACOS, Next: ADJUSTL, Prev: ACHAR, Up: Intrinsic Procedures
+
+ 7.5 `ACOS' -- Arc cosine function
+ =================================
+
+ _Description_:
+ `ACOS(X)' computes the arc cosine of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = ACOS(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)' with a magnitude that is
+ less than one.
+
+ _Return value_:
+ The return value is of type `REAL(*)' and it lies in the range 0
+ \leq \arccos (x) \leq \pi. The kind type parameter is the same as
+ X.
+
+ _Example_:
+ program test_acos
+ real(8) :: x = 0.866_8
+ x = achar(x)
+ end program test_acos
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DACOS(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: ADJUSTL, Next: ADJUSTR, Prev: ACOS, Up: Intrinsic Procedures
+
+ 7.6 `ADJUSTL' -- Left adjust a string
+ =====================================
+
+ _Description_:
+ `ADJUSTL(STR)' will left adjust a string by removing leading
+ spaces. Spaces are inserted at the end of the string as needed.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `STR = ADJUSTL(STR)'
+
+ _Arguments_:
+ STR The type shall be `CHARACTER'.
+
+ _Return value_:
+ The return value is of type `CHARACTER' where leading spaces are
+ removed and the same number of spaces are inserted on the end of
+ STR.
+
+ _Example_:
+ program test_adjustl
+ character(len=20) :: str = ' gfortran'
+ str = adjustl(str)
+ print *, str
+ end program test_adjustl
+
+
+ File: gfortran.info, Node: ADJUSTR, Next: AIMAG, Prev: ADJUSTL, Up: Intrinsic Procedures
+
+ 7.7 `ADJUSTR' -- Right adjust a string
+ ======================================
+
+ _Description_:
+ `ADJUSTR(STR)' will right adjust a string by removing trailing
+ spaces. Spaces are inserted at the start of the string as needed.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `STR = ADJUSTR(STR)'
+
+ _Arguments_:
+ STR The type shall be `CHARACTER'.
+
+ _Return value_:
+ The return value is of type `CHARACTER' where trailing spaces are
+ removed and the same number of spaces are inserted at the start of
+ STR.
+
+ _Example_:
+ program test_adjustr
+ character(len=20) :: str = 'gfortran'
+ str = adjustr(str)
+ print *, str
+ end program test_adjustr
+
+
+ File: gfortran.info, Node: AIMAG, Next: AINT, Prev: ADJUSTR, Up: Intrinsic Procedures
+
+ 7.8 `AIMAG' -- Imaginary part of complex number
+ ===============================================
+
+ _Description_:
+ `AIMAG(Z)' yields the imaginary part of complex argument `Z'.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = AIMAG(Z)'
+
+ _Arguments_:
+ Z The type of the argument shall be `COMPLEX(*)'.
+
+ _Return value_:
+ The return value is of type real with the kind type parameter of
+ the argument.
+
+ _Example_:
+ program test_aimag
+ complex(4) z4
+ complex(8) z8
+ z4 = cmplx(1.e0_4, 0.e0_4)
+ z8 = cmplx(0.e0_8, 1.e0_8)
+ print *, aimag(z4), dimag(z8)
+ end program test_aimag
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DIMAG(Z)' `COMPLEX(8) Z' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: AINT, Next: ALL, Prev: AIMAG, Up: Intrinsic Procedures
+
+ 7.9 `AINT' -- Imaginary part of complex number
+ ==============================================
+
+ _Description_:
+ `AINT(X [, KIND])' truncates its argument to a whole number.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = AINT(X)' `X = AINT(X, KIND)'
+
+ _Arguments_:
+ X The type of the argument shall be `REAL(*)'.
+ KIND (Optional) KIND shall be a scalar integer
+ initialization expression.
+
+ _Return value_:
+ The return value is of type real with the kind type parameter of
+ the argument if the optional KIND is absent; otherwise, the kind
+ type parameter will be given by KIND. If the magnitude of X is
+ less than one, then `AINT(X)' returns zero. If the magnitude is
+ equal to or greater than one, then it returns the largest whole
+ number that does not exceed its magnitude. The sign is the same
+ as the sign of X.
+
+ _Example_:
+ program test_aint
+ real(4) x4
+ real(8) x8
+ x4 = 1.234E0_4
+ x8 = 4.321_8
+ print *, aint(x4), dint(x8)
+ x8 = aint(x4,8)
+ end program test_aint
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DINT(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: ALL, Next: ALLOCATED, Prev: AINT, Up: Intrinsic Procedures
+
+ 7.10 `ALL' -- All values in MASK along DIM are true
+ ===================================================
+
+ _Description_:
+ `ALL(MASK [, DIM])' determines if all the values are true in MASK
+ in the array along dimension DIM.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ transformational function
+
+ _Syntax_:
+ `L = ALL(MASK)' `L = ALL(MASK, DIM)'
+
+ _Arguments_:
+ MASK The type of the argument shall be `LOGICAL(*)' and it
+ shall not be scalar.
+ DIM (Optional) DIM shall be a scalar integer with a value
+ that lies between one and the rank of MASK.
+
+ _Return value_:
+ `ALL(MASK)' returns a scalar value of type `LOGICAL(*)' where the
+ kind type parameter is the same as the kind type parameter of
+ MASK. If DIM is present, then `ALL(MASK, DIM)' returns an array
+ with the rank of MASK minus 1. The shape is determined from the
+ shape of MASK where the DIM dimension is elided.
+
+ (A)
+ `ALL(MASK)' is true if all elements of MASK are true. It
+ also is true if MASK has zero size; otherwise, it is false.
+
+ (B)
+ If the rank of MASK is one, then `ALL(MASK,DIM)' is equivalent
+ to `ALL(MASK)'. If the rank is greater than one, then
+ `ALL(MASK,DIM)' is determined by applying `ALL' to the array
+ sections.
+
+ _Example_:
+ program test_all
+ logical l
+ l = all((/.true., .true., .true./))
+ print *, l
+ call section
+ contains
+ subroutine section
+ integer a(2,3), b(2,3)
+ a = 1
+ b = 1
+ b(2,2) = 2
+ print *, all(a .eq. b, 1)
+ print *, all(a .eq. b, 2)
+ end subroutine section
+ end program test_all
+
+
+ File: gfortran.info, Node: ALLOCATED, Next: ANINT, Prev: ALL, Up: Intrinsic Procedures
+
+ 7.11 `ALLOCATED' -- Status of an allocatable entity
+ ===================================================
+
+ _Description_:
+ `ALLOCATED(X)' checks the status of whether X is allocated.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ inquiry function
+
+ _Syntax_:
+ `L = ALLOCATED(X)'
+
+ _Arguments_:
+ X The argument shall be an `ALLOCATABLE' array.
+
+ _Return value_:
+ The return value is a scalar `LOGICAL' with the default logical
+ kind type parameter. If X is allocated, `ALLOCATED(X)' is
+ `.TRUE.'; otherwise, it returns the `.TRUE.'
+
+ _Example_:
+ program test_allocated
+ integer :: i = 4
+ real(4), allocatable :: x(:)
+ if (allocated(x) .eqv. .false.) allocate(x(i)
+ end program test_allocated
+
+
+ File: gfortran.info, Node: ANINT, Next: ANY, Prev: ALLOCATED, Up: Intrinsic Procedures
+
+ 7.12 `ANINT' -- Imaginary part of complex number
+ ================================================
+
+ _Description_:
+ `ANINT(X [, KIND])' rounds its argument to the nearest whole
+ number.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = ANINT(X)' `X = ANINT(X, KIND)'
+
+ _Arguments_:
+ X The type of the argument shall be `REAL(*)'.
+ KIND (Optional) KIND shall be a scalar integer
+ initialization expression.
+
+ _Return value_:
+ The return value is of type real with the kind type parameter of
+ the argument if the optional KIND is absent; otherwise, the kind
+ type parameter will be given by KIND. If X is greater than zero,
+ then `ANINT(X)' returns `AINT(X+0.5)'. If X is less than or equal
+ to zero, then return `AINT(X-0.5)'.
+
+ _Example_:
+ program test_anint
+ real(4) x4
+ real(8) x8
+ x4 = 1.234E0_4
+ x8 = 4.321_8
+ print *, anint(x4), dnint(x8)
+ x8 = anint(x4,8)
+ end program test_anint
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DNINT(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: ANY, Next: ASIN, Prev: ANINT, Up: Intrinsic Procedures
+
+ 7.13 `ANY' -- Any value in MASK along DIM is true
+ =================================================
+
+ _Description_:
+ `ANY(MASK [, DIM])' determines if any of the values in the logical
+ array MASK along dimension DIM are `.TRUE.'.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ transformational function
+
+ _Syntax_:
+ `L = ANY(MASK)' `L = ANY(MASK, DIM)'
+
+ _Arguments_:
+ MASK The type of the argument shall be `LOGICAL(*)' and it
+ shall not be scalar.
+ DIM (Optional) DIM shall be a scalar integer with a value
+ that lies between one and the rank of MASK.
+
+ _Return value_:
+ `ANY(MASK)' returns a scalar value of type `LOGICAL(*)' where the
+ kind type parameter is the same as the kind type parameter of
+ MASK. If DIM is present, then `ANY(MASK, DIM)' returns an array
+ with the rank of MASK minus 1. The shape is determined from the
+ shape of MASK where the DIM dimension is elided.
+
+ (A)
+ `ANY(MASK)' is true if any element of MASK is true;
+ otherwise, it is false. It also is false if MASK has zero
+ size.
+
+ (B)
+ If the rank of MASK is one, then `ANY(MASK,DIM)' is equivalent
+ to `ANY(MASK)'. If the rank is greater than one, then
+ `ANY(MASK,DIM)' is determined by applying `ANY' to the array
+ sections.
+
+ _Example_:
+ program test_any
+ logical l
+ l = any((/.true., .true., .true./))
+ print *, l
+ call section
+ contains
+ subroutine section
+ integer a(2,3), b(2,3)
+ a = 1
+ b = 1
+ b(2,2) = 2
+ print *, any(a .eq. b, 1)
+ print *, any(a .eq. b, 2)
+ end subroutine section
+ end program test_any
+
+
+ File: gfortran.info, Node: ASIN, Next: ASSOCIATED, Prev: ANY, Up: Intrinsic Procedures
+
+ 7.14 `ASIN' -- Arcsine function
+ ===============================
+
+ _Description_:
+ `ASIN(X)' computes the arcsine of its X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = ASIN(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)', and a magnitude that is
+ less than one.
+
+ _Return value_:
+ The return value is of type `REAL(*)' and it lies in the range
+ -\pi / 2 \leq \arccos (x) \leq \pi / 2. The kind type parameter
+ is the same as X.
+
+ _Example_:
+ program test_asin
+ real(8) :: x = 0.866_8
+ x = asin(x)
+ end program test_asin
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DASIN(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: ASSOCIATED, Next: ATAN, Prev: ASIN, Up: Intrinsic Procedures
+
+ 7.15 `ASSOCIATED' -- Status of a pointer or pointer/target pair
+ ===============================================================
+
+ _Description_:
+ `ASSOCIATED(PTR [, TGT])' determines the status of the pointer PTR
+ or if PTR is associated with the target TGT.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ inquiry function
+
+ _Syntax_:
+ `L = ASSOCIATED(PTR)' `L = ASSOCIATED(PTR [, TGT])'
+
+ _Arguments_:
+ PTR PTR shall have the `POINTER' attribute and it can be
+ of any type.
+ TGT (Optional) TGT shall be a `POINTER' or a `TARGET'.
+ It must have the same type, kind type parameter, and
+ array rank as PTR.
+ The status of neither PTR nor TGT can be undefined.
+
+ _Return value_:
+ `ASSOCIATED(PTR)' returns a scalar value of type `LOGICAL(4)'.
+ There are several cases:
+ (A) If the optional TGT is not present, then `ASSOCIATED(PTR)'
+ is true if PTR is associated with a target; otherwise, it
+ returns false.
+
+ (B) If TGT is present and a scalar target, the result is true if
+ TGT is not a 0 sized storage sequence and the target
+ associated with PTR occupies the same storage units. If PTR
+ is disassociated, then the result is false.
+
+ (C) If TGT is present and an array target, the result is true if
+ TGT and PTR have the same shape, are not 0 sized arrays, are
+ arrays whose elements are not 0 sized storage sequences, and
+ TGT and PTR occupy the same storage units in array element
+ order. As in case(B), the result is false, if PTR is
+ disassociated.
+
+ (D) If TGT is present and an scalar pointer, the result is true if
+ target associated with PTR and the target associated with TGT
+ are not 0 sized storage sequences and occupy the same storage
+ units. The result is false, if either TGT or PTR is
+ disassociated.
+
+ (E) If TGT is present and an array pointer, the result is true if
+ target associated with PTR and the target associated with TGT
+ have the same shape, are not 0 sized arrays, are arrays whose
+ elements are not 0 sized storage sequences, and TGT and PTR
+ occupy the same storage units in array element order. The
+ result is false, if either TGT or PTR is disassociated.
+
+ _Example_:
+ program test_associated
+ implicit none
+ real, target :: tgt(2) = (/1., 2./)
+ real, pointer :: ptr(:)
+ ptr => tgt
+ if (associated(ptr) .eqv. .false.) call abort
+ if (associated(ptr,tgt) .eqv. .false.) call abort
+ end program test_associated
+
+
+ File: gfortran.info, Node: ATAN, Next: ATAN2, Prev: ASSOCIATED, Up: Intrinsic Procedures
+
+ 7.16 `ATAN' -- Arctangent function
+ ==================================
+
+ _Description_:
+ `ATAN(X)' computes the arctangent of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = ATAN(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+
+ _Return value_:
+ The return value is of type `REAL(*)' and it lies in the range -
+ \pi / 2 \leq \arcsin (x) \leq \pi / 2.
+
+ _Example_:
+ program test_atan
+ real(8) :: x = 2.866_8
+ x = atan(x)
+ end program test_atan
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DATAN(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: ATAN2, Next: BESJ0, Prev: ATAN, Up: Intrinsic Procedures
+
+ 7.17 `ATAN2' -- Arctangent function
+ ===================================
+
+ _Description_:
+ `ATAN2(Y,X)' computes the arctangent of the complex number X + i Y.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = ATAN2(Y,X)'
+
+ _Arguments_:
+ Y The type shall be `REAL(*)'.
+ X The type and kind type parameter shall be the same as
+ Y. If Y is zero, then X must be nonzero.
+
+ _Return value_:
+ The return value has the same type and kind type parameter as Y.
+ It is the principle value of the complex number X + i Y. If X is
+ nonzero, then it lies in the range -\pi \le \arccos (x) \leq \pi.
+ The sign is positive if Y is positive. If Y is zero, then the
+ return value is zero if X is positive and \pi if X is negative.
+ Finally, if X is zero, then the magnitude of the result is \pi/2.
+
+ _Example_:
+ program test_atan2
+ real(4) :: x = 1.e0_4, y = 0.5e0_4
+ x = atan2(y,x)
+ end program test_atan2
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DATAN2(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: BESJ0, Next: BESJ1, Prev: ATAN2, Up: Intrinsic Procedures
+
+ 7.18 `BESJ0' -- Bessel function of the first kind of order 0
+ ============================================================
+
+ _Description_:
+ `BESJ0(X)' computes the Bessel function of the first kind of order
+ 0 of X.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = BESJ0(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)', and it shall be scalar.
+
+ _Return value_:
+ The return value is of type `REAL(*)' and it lies in the range -
+ 0.4027... \leq Bessel (0,x) \leq 1.
+
+ _Example_:
+ program test_besj0
+ real(8) :: x = 0.0_8
+ x = besj0(x)
+ end program test_besj0
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DBESJ0(X)' `REAL(8) X' `REAL(8)' gnu
+
+
+ File: gfortran.info, Node: BESJ1, Next: BESJN, Prev: BESJ0, Up: Intrinsic Procedures
+
+ 7.19 `BESJ1' -- Bessel function of the first kind of order 1
+ ============================================================
+
+ _Description_:
+ `BESJ1(X)' computes the Bessel function of the first kind of order
+ 1 of X.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = BESJ1(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)', and it shall be scalar.
+
+ _Return value_:
+ The return value is of type `REAL(*)' and it lies in the range -
+ 0.5818... \leq Bessel (0,x) \leq 0.5818 .
+
+ _Example_:
+ program test_besj1
+ real(8) :: x = 1.0_8
+ x = besj1(x)
+ end program test_besj1
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DBESJ1(X)' `REAL(8) X' `REAL(8)' gnu
+
+
+ File: gfortran.info, Node: BESJN, Next: BESY0, Prev: BESJ1, Up: Intrinsic Procedures
+
+ 7.20 `BESJN' -- Bessel function of the first kind
+ =================================================
+
+ _Description_:
+ `BESJN(N, X)' computes the Bessel function of the first kind of
+ order N of X.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `Y = BESJN(N, X)'
+
+ _Arguments_:
+ N The type shall be `INTEGER(*)', and it shall be
+ scalar.
+ X The type shall be `REAL(*)', and it shall be scalar.
+
+ _Return value_:
+ The return value is a scalar of type `REAL(*)'.
+
+ _Example_:
+ program test_besjn
+ real(8) :: x = 1.0_8
+ x = besjn(5,x)
+ end program test_besjn
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DBESJN(X)' `INTEGER(*) N' `REAL(8)' gnu
+ `REAL(8) X'
+
+
+ File: gfortran.info, Node: BESY0, Next: BESY1, Prev: BESJN, Up: Intrinsic Procedures
+
+ 7.21 `BESY0' -- Bessel function of the second kind of order 0
+ =============================================================
+
+ _Description_:
+ `BESY0(X)' computes the Bessel function of the second kind of
+ order 0 of X.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = BESY0(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)', and it shall be scalar.
+
+ _Return value_:
+ The return value is a scalar of type `REAL(*)'.
+
+ _Example_:
+ program test_besy0
+ real(8) :: x = 0.0_8
+ x = besy0(x)
+ end program test_besy0
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DBESY0(X)' `REAL(8) X' `REAL(8)' gnu
+
+
+ File: gfortran.info, Node: BESY1, Next: BESYN, Prev: BESY0, Up: Intrinsic Procedures
+
+ 7.22 `BESY1' -- Bessel function of the second kind of order 1
+ =============================================================
+
+ _Description_:
+ `BESY1(X)' computes the Bessel function of the second kind of
+ order 1 of X.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = BESY1(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)', and it shall be scalar.
+
+ _Return value_:
+ The return value is a scalar of type `REAL(*)'.
+
+ _Example_:
+ program test_besy1
+ real(8) :: x = 1.0_8
+ x = besy1(x)
+ end program test_besy1
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DBESY1(X)' `REAL(8) X' `REAL(8)' gnu
+
+
+ File: gfortran.info, Node: BESYN, Next: BIT_SIZE, Prev: BESY1, Up: Intrinsic Procedures
+
+ 7.23 `BESYN' -- Bessel function of the second kind
+ ==================================================
+
+ _Description_:
+ `BESYN(N, X)' computes the Bessel function of the second kind of
+ order N of X.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `Y = BESYN(N, X)'
+
+ _Arguments_:
+ N The type shall be `INTEGER(*)', and it shall be
+ scalar.
+ X The type shall be `REAL(*)', and it shall be scalar.
+
+ _Return value_:
+ The return value is a scalar of type `REAL(*)'.
+
+ _Example_:
+ program test_besyn
+ real(8) :: x = 1.0_8
+ x = besyn(5,x)
+ end program test_besyn
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DBESYN(N,X)' `INTEGER(*) N' `REAL(8)' gnu
+ `REAL(8) X'
+
+
+ File: gfortran.info, Node: BIT_SIZE, Next: BTEST, Prev: BESYN, Up: Intrinsic Procedures
+
+ 7.24 `BIT_SIZE' -- Bit size inquiry function
+ ============================================
+
+ _Description_:
+ `BIT_SIZE(I)' returns the number of bits (integer precision plus
+ sign bit) represented by the type of I.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `I = BIT_SIZE(I)'
+
+ _Arguments_:
+ I The type shall be `INTEGER(*)'.
+
+ _Return value_:
+ The return value is of type `INTEGER(*)'
+
+ _Example_:
+ program test_bit_size
+ integer :: i = 123
+ integer :: size
+ size = bit_size(i)
+ print *, size
+ end program test_bit_size
+
+
+ File: gfortran.info, Node: BTEST, Next: CEILING, Prev: BIT_SIZE, Up: Intrinsic Procedures
+
+ 7.25 `BTEST' -- Bit test function
+ =================================
+
+ _Description_:
+ `BTEST(I,POS)' returns logical `.TRUE.' if the bit at POS in I is
+ set.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `I = BTEST(I,POS)'
+
+ _Arguments_:
+ I The type shall be `INTEGER(*)'.
+ POS The type shall be `INTEGER(*)'.
+
+ _Return value_:
+ The return value is of type `LOGICAL'
+
+ _Example_:
+ program test_btest
+ integer :: i = 32768 + 1024 + 64
+ integer :: pos
+ logical :: bool
+ do pos=0,16
+ bool = btest(i, pos)
+ print *, pos, bool
+ end do
+ end program test_btest
+
+
+ File: gfortran.info, Node: CEILING, Next: CHAR, Prev: BTEST, Up: Intrinsic Procedures
+
+ 7.26 `CEILING' -- Integer ceiling function
+ ==========================================
+
+ _Description_:
+ `CEILING(X)' returns the least integer greater than or equal to X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `I = CEILING(X[,KIND])'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+ KIND Optional scaler integer initialization expression.
+
+ _Return value_:
+ The return value is of type `INTEGER(KIND)'
+
+ _Example_:
+ program test_ceiling
+ real :: x = 63.29
+ real :: y = -63.59
+ print *, ceiling(x) ! returns 64
+ print *, ceiling(y) ! returns -63
+ end program test_ceiling
+
+
+ File: gfortran.info, Node: CHAR, Next: CMPLX, Prev: CEILING, Up: Intrinsic Procedures
+
+ 7.27 `CHAR' -- Character conversion function
+ ============================================
+
+ _Description_:
+ `CHAR(I,[KIND])' returns the character represented by the integer
+ I.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `C = CHAR(I[,KIND])'
+
+ _Arguments_:
+ I The type shall be `INTEGER(*)'.
+ KIND Optional scaler integer initialization expression.
+
+ _Return value_:
+ The return value is of type `CHARACTER(1)'
+
+ _Example_:
+ program test_char
+ integer :: i = 74
+ character(1) :: c
+ c = char(i)
+ print *, i, c ! returns 'J'
+ end program test_char
+
+
+ File: gfortran.info, Node: CMPLX, Next: COMMAND_ARGUMENT_COUNT, Prev: CHAR, Up: Intrinsic Procedures
+
+ 7.28 `CMPLX' -- Complex conversion function
+ ===========================================
+
+ _Description_:
+ `CMPLX(X,[Y,KIND])' returns a complex number where X is converted
+ to the real component. If Y is present it is converted to the
+ imaginary component. If Y is not present then the imaginary
+ component is set to 0.0. If X is complex then Y must not be
+ present.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `C = CMPLX(X[,Y,KIND])'
+
+ _Arguments_:
+ X The type may be `INTEGER(*)', `REAL(*)', or
+ `COMPLEX(*)'.
+ Y Optional, allowed if X is not `COMPLEX(*)'. May be
+ `INTEGER(*)' or `REAL(*)'.
+ KIND Optional scaler integer initialization expression.
+
+ _Return value_:
+ The return value is of type `COMPLEX(*)'
+
+ _Example_:
+ program test_cmplx
+ integer :: i = 42
+ real :: x = 3.14
+ complex :: z
+ z = cmplx(i, x)
+ print *, z, cmplx(x)
+ end program test_cmplx
+
+
+ File: gfortran.info, Node: COMMAND_ARGUMENT_COUNT, Next: CONJG, Prev: CMPLX, Up: Intrinsic Procedures
+
+ 7.29 `COMMAND_ARGUMENT_COUNT' -- Argument count function
+ ========================================================
+
+ _Description_:
+ `COMMAND_ARGUMENT_COUNT()' returns the number of arguments passed
+ on the command line when the containing program was invoked.
+
+ _Option_:
+ f2003, gnu
+
+ _Class_:
+ non-elemental function
+
+ _Syntax_:
+ `I = COMMAND_ARGUMENT_COUNT()'
+
+ _Arguments_:
+ None
+
+ _Return value_:
+ The return value is of type `INTEGER(4)'
+
+ _Example_:
+ program test_command_argument_count
+ integer :: count
+ count = command_argument_count()
+ print *, count
+ end program test_command_argument_count
+
+
+ File: gfortran.info, Node: CONJG, Next: COS, Prev: COMMAND_ARGUMENT_COUNT, Up: Intrinsic Procedures
+
+ 7.30 `CONJG' -- Complex conjugate function
+ ==========================================
+
+ _Description_:
+ `CONJG(Z)' returns the conjugate of Z. If Z is `(x, y)' then the
+ result is `(x, -y)'
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `Z = CONJG(Z)'
+
+ _Arguments_:
+ Z The type shall be `COMPLEX(*)'.
+
+ _Return value_:
+ The return value is of type `COMPLEX(*)'.
+
+ _Example_:
+ program test_conjg
+ complex :: z = (2.0, 3.0)
+ complex(8) :: dz = (2.71_8, -3.14_8)
+ z= conjg(z)
+ print *, z
+ dz = dconjg(dz)
+ print *, dz
+ end program test_conjg
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DCONJG(Z)' `COMPLEX(8) Z' `COMPLEX(8)' gnu
+
+
+ File: gfortran.info, Node: COS, Next: COSH, Prev: CONJG, Up: Intrinsic Procedures
+
+ 7.31 `COS' -- Cosine function
+ =============================
+
+ _Description_:
+ `COS(X)' computes the cosine of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = COS(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)' or `COMPLEX(*)'.
+
+ _Return value_:
+ The return value has the same type and kind as X.
+
+ _Example_:
+ program test_cos
+ real :: x = 0.0
+ x = cos(x)
+ end program test_cos
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DCOS(X)' `REAL(8) X' `REAL(8)' f95, gnu
+ `CCOS(X)' `COMPLEX(4) X' `COMPLEX(4)' f95, gnu
+ `ZCOS(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+ `CDCOS(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+
+
+ File: gfortran.info, Node: COSH, Next: COUNT, Prev: COS, Up: Intrinsic Procedures
+
+ 7.32 `COSH' -- Hyperbolic cosine function
+ =========================================
+
+ _Description_:
+ `COSH(X)' computes the hyperbolic cosine of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = COSH(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+
+ _Return value_:
+ The return value is of type `REAL(*)' and it is positive ( \cosh
+ (x) \geq 0 .
+
+ _Example_:
+ program test_cosh
+ real(8) :: x = 1.0_8
+ x = cosh(x)
+ end program test_cosh
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DCOSH(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: COUNT, Next: CPU_TIME, Prev: COSH, Up: Intrinsic Procedures
+
+ 7.33 `COUNT' -- Count function
+ ==============================
+
+ _Description_:
+ `COUNT(MASK[,DIM])' counts the number of `.TRUE.' elements of MASK
+ along the dimension of DIM. If DIM is omitted it is taken to be
+ `1'. DIM is a scaler of type `INTEGER' in the range of 1 /leq DIM
+ /leq n) where n is the rank of MASK.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ transformational function
+
+ _Syntax_:
+ `I = COUNT(MASK[,DIM])'
+
+ _Arguments_:
+ MASK The type shall be `LOGICAL'.
+ DIM The type shall be `INTEGER'.
+
+ _Return value_:
+ The return value is of type `INTEGER' with rank equal to that of
+ MASK.
+
+ _Example_:
+ program test_count
+ integer, dimension(2,3) :: a, b
+ logical, dimension(2,3) :: mask
+ a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))
+ b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))
+ print '(3i3)', a(1,:)
+ print '(3i3)', a(2,:)
+ print *
+ print '(3i3)', b(1,:)
+ print '(3i3)', b(2,:)
+ print *
+ mask = a.ne.b
+ print '(3l3)', mask(1,:)
+ print '(3l3)', mask(2,:)
+ print *
+ print '(3i3)', count(mask)
+ print *
+ print '(3i3)', count(mask, 1)
+ print *
+ print '(3i3)', count(mask, 2)
+ end program test_count
+
+
+ File: gfortran.info, Node: CPU_TIME, Next: CSHIFT, Prev: COUNT, Up: Intrinsic Procedures
+
+ 7.34 `CPU_TIME' -- CPU elapsed time in seconds
+ ==============================================
+
+ _Description_:
+ Returns a `REAL' value representing the elapsed CPU time in
+ seconds. This is useful for testing segments of code to determine
+ execution time.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ subroutine
+
+ _Syntax_:
+ `CPU_TIME(X)'
+
+ _Arguments_:
+ X The type shall be `REAL' with intent out.
+
+ _Return value_:
+ None
+
+ _Example_:
+ program test_cpu_time
+ real :: start, finish
+ call cpu_time(start)
+ ! put code to test here
+ call cpu_time(finish)
+ print '("Time = ",f6.3," seconds.")',finish-start
+ end program test_cpu_time
+
+
+ File: gfortran.info, Node: CSHIFT, Next: CTIME, Prev: CPU_TIME, Up: Intrinsic Procedures
+
+ 7.35 `CSHIFT' -- Circular shift function
+ ========================================
+
+ _Description_:
+ `CSHIFT(ARRAY, SHIFT[,DIM])' performs a circular shift on elements
+ of ARRAY along the dimension of DIM. If DIM is omitted it is
+ taken to be `1'. DIM is a scaler of type `INTEGER' in the range
+ of 1 /leq DIM /leq n) where n is the rank of ARRAY. If the rank
+ of ARRAY is one, then all elements of ARRAY are shifted by SHIFT
+ places. If rank is greater than one, then all complete rank one
+ sections of ARRAY along the given dimension are shifted. Elements
+ shifted out one end of each rank one section are shifted back in
+ the other end.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ transformational function
+
+ _Syntax_:
+ `A = CSHIFT(A, SHIFT[,DIM])'
+
+ _Arguments_:
+ ARRAY May be any type, not scaler.
+ SHIFT The type shall be `INTEGER'.
+ DIM The type shall be `INTEGER'.
+
+ _Return value_:
+ Returns an array of same type and rank as the ARRAY argument.
+
+ _Example_:
+ program test_cshift
+ integer, dimension(3,3) :: a
+ a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
+ print '(3i3)', a(1,:)
+ print '(3i3)', a(2,:)
+ print '(3i3)', a(3,:)
+ a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)
+ print *
+ print '(3i3)', a(1,:)
+ print '(3i3)', a(2,:)
+ print '(3i3)', a(3,:)
+ end program test_cshift
+
+
+ File: gfortran.info, Node: CTIME, Next: DATE_AND_TIME, Prev: CSHIFT, Up: Intrinsic Procedures
+
+ 7.36 `CTIME' -- Convert a time into a string
+ ============================================
+
+ _Description_:
+ `CTIME(T,S)' converts T, a system time value, such as returned by
+ `TIME8()', to a string of the form `Sat Aug 19 18:13:14 1995', and
+ returns that string into S.
+
+ If `CTIME' is invoked as a function, it can not be invoked as a
+ subroutine, and vice versa.
+
+ T is an `INTENT(IN)' `INTEGER(KIND=8)' variable. S is an
+ `INTENT(OUT)' `CHARACTER' variable.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ subroutine
+
+ _Syntax_:
+ `CALL CTIME(T,S)'.
+ `S = CTIME(T)', (not recommended).
+
+ _Arguments_:
+ S The type shall be of type `CHARACTER'.
+ T The type shall be of type `INTEGER(KIND=8)'.
+
+ _Return value_:
+ The converted date and time as a string.
+
+ _Example_:
+ program test_ctime
+ integer(8) :: i
+ character(len=30) :: date
+ i = time8()
+
+ ! Do something, main part of the program
+
+ call ctime(i,date)
+ print *, 'Program was started on ', date
+ end program test_ctime
+
+
+ File: gfortran.info, Node: DATE_AND_TIME, Next: DBLE, Prev: CTIME, Up: Intrinsic Procedures
+
+ 7.37 `DATE_AND_TIME' -- Date and time subroutine
+ ================================================
+
+ _Description_:
+ `DATE_AND_TIME(DATE, TIME, ZONE, VALUES)' gets the corresponding
+ date and time information from the real-time system clock. DATE is
+ `INTENT(OUT)' and has form ccyymmdd. TIME is `INTENT(OUT)' and
+ has form hhmmss.sss. ZONE is `INTENT(OUT)' and has form (+-)hhmm,
+ representing the difference with respect to Coordinated Universal
+ Time (UTC). Unavailable time and date parameters return blanks.
+
+ VALUES is `INTENT(OUT)' and provides the following:
+
+ `VALUE(1)': The year
+ `VALUE(2)': The month
+ `VALUE(3)': The day of the month
+ `VAlUE(4)': Time difference with UTC in minutes
+ `VALUE(5)': The hour of the day
+ `VALUE(6)': The minutes of the hour
+ `VALUE(7)': The seconds of the minute
+ `VALUE(8)': The milliseconds of the second
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ subroutine
+
+ _Syntax_:
+ `CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])'
+
+ _Arguments_:
+ DATE (Optional) The type shall be `CHARACTER(8)' or larger.
+ TIME (Optional) The type shall be `CHARACTER(10)' or
+ larger.
+ ZONE (Optional) The type shall be `CHARACTER(5)' or larger.
+ VALUES (Optional) The type shall be `INTEGER(8)'.
+
+ _Return value_:
+ None
+
+ _Example_:
+ program test_time_and_date
+ character(8) :: date
+ character(10) :: time
+ character(5) :: zone
+ integer,dimension(8) :: values
+ ! using keyword arguments
+ call date_and_time(date,time,zone,values)
+ call date_and_time(DATE=date,ZONE=zone)
+ call date_and_time(TIME=time)
+ call date_and_time(VALUES=values)
+ print '(a,2x,a,2x,a)', date, time, zone
+ print '(8i5))', values
+ end program test_time_and_date
+
+
+ File: gfortran.info, Node: DBLE, Next: DCMPLX, Prev: DATE_AND_TIME, Up: Intrinsic Procedures
+
+ 7.38 `DBLE' -- Double conversion function
+ =========================================
+
+ _Description_:
+ `DBLE(X)' Converts X to double precision real type. `DFLOAT' is
+ an alias for `DBLE'
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = DBLE(X)' `X = DFLOAT(X)'
+
+ _Arguments_:
+ X The type shall be `INTEGER(*)', `REAL(*)', or
+ `COMPLEX(*)'.
+
+ _Return value_:
+ The return value is of type double precision real.
+
+ _Example_:
+ program test_dble
+ real :: x = 2.18
+ integer :: i = 5
+ complex :: z = (2.3,1.14)
+ print *, dble(x), dble(i), dfloat(z)
+ end program test_dble
+
+
+ File: gfortran.info, Node: DCMPLX, Next: DFLOAT, Prev: DBLE, Up: Intrinsic Procedures
+
+ 7.39 `DCMPLX' -- Double complex conversion function
+ ===================================================
+
+ _Description_:
+ `DCMPLX(X [,Y])' returns a double complex number where X is
+ converted to the real component. If Y is present it is converted
+ to the imaginary component. If Y is not present then the
+ imaginary component is set to 0.0. If X is complex then Y must
+ not be present.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `C = DCMPLX(X)' `C = DCMPLX(X,Y)'
+
+ _Arguments_:
+ X The type may be `INTEGER(*)', `REAL(*)', or
+ `COMPLEX(*)'.
+ Y Optional if X is not `COMPLEX(*)'. May be
+ `INTEGER(*)' or `REAL(*)'.
+
+ _Return value_:
+ The return value is of type `COMPLEX(8)'
+
+ _Example_:
+ program test_dcmplx
+ integer :: i = 42
+ real :: x = 3.14
+ complex :: z
+ z = cmplx(i, x)
+ print *, dcmplx(i)
+ print *, dcmplx(x)
+ print *, dcmplx(z)
+ print *, dcmplx(x,i)
+ end program test_dcmplx
+
+
+ File: gfortran.info, Node: DFLOAT, Next: DIGITS, Prev: DCMPLX, Up: Intrinsic Procedures
+
+ 7.40 `DFLOAT' -- Double conversion function
+ ===========================================
+
+ _Description_:
+ `DFLOAT(X)' Converts X to double precision real type. `DFLOAT' is
+ an alias for `DBLE'. See `DBLE'.
+
+
+ File: gfortran.info, Node: DIGITS, Next: DIM, Prev: DFLOAT, Up: Intrinsic Procedures
+
+ 7.41 `DIGITS' -- Significant digits function
+ ============================================
+
+ _Description_:
+ `DIGITS(X)' returns the number of significant digits of the
+ internal model representation of X. For example, on a system
+ using a 32-bit floating point representation, a default real
+ number would likely return 24.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ inquiry function
+
+ _Syntax_:
+ `C = DIGITS(X)'
+
+ _Arguments_:
+ X The type may be `INTEGER(*)' or `REAL(*)'.
+
+ _Return value_:
+ The return value is of type `INTEGER'.
+
+ _Example_:
+ program test_digits
+ integer :: i = 12345
+ real :: x = 3.143
+ real(8) :: y = 2.33
+ print *, digits(i)
+ print *, digits(x)
+ print *, digits(y)
+ end program test_digits
+
+
+ File: gfortran.info, Node: DIM, Next: DOT_PRODUCT, Prev: DIGITS, Up: Intrinsic Procedures
+
+ 7.42 `DIM' -- Dim function
+ ==========================
+
+ _Description_:
+ `DIM(X,Y)' returns the difference `X-Y' if the result is positive;
+ otherwise returns zero.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = DIM(X,Y)'
+
+ _Arguments_:
+ X The type shall be `INTEGER(*)' or `REAL(*)'
+ Y The type shall be the same type and kind as X.
+
+ _Return value_:
+ The return value is of type `INTEGER(*)' or `REAL(*)'.
+
+ _Example_:
+ program test_dim
+ integer :: i
+ real(8) :: x
+ i = dim(4, 15)
+ x = dim(4.345_8, 2.111_8)
+ print *, i
+ print *, x
+ end program test_dim
+
+ _Specific names_:
+ Name Argument Return type Option
+ `IDIM(X,Y)' `INTEGER(4) `INTEGER(4)' gnu
+ X,Y'
+ `DDIM(X,Y)' `REAL(8) X,Y' `REAL(8)' gnu
+
+
+ File: gfortran.info, Node: DOT_PRODUCT, Next: DPROD, Prev: DIM, Up: Intrinsic Procedures
+
+ 7.43 `DOT_PRODUCT' -- Dot product function
+ ==========================================
+
+ _Description_:
+ `DOT_PRODUCT(X,Y)' computes the dot product multiplication of two
+ vectors X and Y. The two vectors may be either numeric or logical
+ and must be arrays of rank one and of equal size. If the vectors
+ are `INTEGER(*)' or `REAL(*)', the result is `SUM(X*Y)'. If the
+ vectors are `COMPLEX(*)', the result is `SUM(CONJG(X)*Y)'. If the
+ vectors are `LOGICAL', the result is `ANY(X.AND.Y)'.
+
+ _Option_:
+ f95
+
+ _Class_:
+ transformational function
+
+ _Syntax_:
+ `S = DOT_PRODUCT(X,Y)'
+
+ _Arguments_:
+ X The type shall be numeric or `LOGICAL', rank 1.
+ Y The type shall be numeric or `LOGICAL', rank 1.
+
+ _Return value_:
+ If the arguments are numeric, the return value is a scaler of
+ numeric type, `INTEGER(*)', `REAL(*)', or `COMPLEX(*)'. If the
+ arguments are `LOGICAL', the return value is `.TRUE.' or `.FALSE.'.
+
+ _Example_:
+ program test_dot_prod
+ integer, dimension(3) :: a, b
+ a = (/ 1, 2, 3 /)
+ b = (/ 4, 5, 6 /)
+ print '(3i3)', a
+ print *
+ print '(3i3)', b
+ print *
+ print *, dot_product(a,b)
+ end program test_dot_prod
+
+
+ File: gfortran.info, Node: DPROD, Next: DREAL, Prev: DOT_PRODUCT, Up: Intrinsic Procedures
+
+ 7.44 `DPROD' -- Double product function
+ =======================================
+
+ _Description_:
+ `DPROD(X,Y)' returns the product `X*Y'.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `D = DPROD(X,Y)'
+
+ _Arguments_:
+ X The type shall be `REAL'.
+ Y The type shall be `REAL'.
+
+ _Return value_:
+ The return value is of type `REAL(8)'.
+
+ _Example_:
+ program test_dprod
+ integer :: i
+ real :: x = 5.2
+ real :: y = 2.3
+ real(8) :: d
+ d = dprod(x,y)
+ print *, d
+ end program test_dprod
+
+
+ File: gfortran.info, Node: DREAL, Next: DTIME, Prev: DPROD, Up: Intrinsic Procedures
+
+ 7.45 `DREAL' -- Double real part function
+ =========================================
+
+ _Description_:
+ `DREAL(Z)' returns the real part of complex variable Z.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `D = DREAL(Z)'
+
+ _Arguments_:
+ Z The type shall be `COMPLEX(8)'.
+
+ _Return value_:
+ The return value is of type `REAL(8)'.
+
+ _Example_:
+ program test_dreal
+ complex(8) :: z = (1.3_8,7.2_8)
+ print *, dreal(z)
+ end program test_dreal
+
+
+ File: gfortran.info, Node: DTIME, Next: EOSHIFT, Prev: DREAL, Up: Intrinsic Procedures
+
+ 7.46 `DTIME' -- Execution time subroutine (or function)
+ =======================================================
+
+ _Description_:
+ `DTIME(TARRAY, RESULT)' initially returns the number of seconds of
+ runtime since the start of the process's execution in RESULT.
+ TARRAY returns the user and system components of this time in
+ `TARRAY(1)' and `TARRAY(2)' respectively. RESULT is equal to
+ `TARRAY(1) + TARRAY(2)'.
+
+ Subsequent invocations of `DTIME' return values accumulated since
+ the previous invocation.
+
+ On some systems, the underlying timings are represented using
+ types with sufficiently small limits that overflows (wraparounds)
+ are possible, such as 32-bit types. Therefore, the values returned
+ by this intrinsic might be, or become, negative, or numerically
+ less than previous values, during a single run of the compiled
+ program.
+
+ If `DTIME' is invoked as a function, it can not be invoked as a
+ subroutine, and vice versa.
+
+ TARRAY and RESULT are `INTENT(OUT)' and provide the following:
+
+ `TARRAY(1)': User time in seconds.
+ `TARRAY(2)': System time in seconds.
+ `RESULT': Run time since start in seconds.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ subroutine
+
+ _Syntax_:
+ `CALL DTIME(TARRAY, RESULT)'.
+ `RESULT = DTIME(TARRAY)', (not recommended).
+
+ _Arguments_:
+ TARRAY The type shall be `REAL, DIMENSION(2)'.
+ RESULT The type shall be `REAL'.
+
+ _Return value_:
+ Elapsed time in seconds since the start of program execution.
+
+ _Example_:
+ program test_dtime
+ integer(8) :: i, j
+ real, dimension(2) :: tarray
+ real :: result
+ call dtime(tarray, result)
+ print *, result
+ print *, tarray(1)
+ print *, tarray(2)
+ do i=1,100000000 ! Just a delay
+ j = i * i - i
+ end do
+ call dtime(tarray, result)
+ print *, result
+ print *, tarray(1)
+ print *, tarray(2)
+ end program test_dtime
+
+
+ File: gfortran.info, Node: EOSHIFT, Next: EPSILON, Prev: DTIME, Up: Intrinsic Procedures
+
+ 7.47 `EOSHIFT' -- End-off shift function
+ ========================================
+
+ _Description_:
+ `EOSHIFT(ARRAY, SHIFT[,BOUNDARY, DIM])' performs an end-off shift
+ on elements of ARRAY along the dimension of DIM. If DIM is
+ omitted it is taken to be `1'. DIM is a scaler of type `INTEGER'
+ in the range of 1 /leq DIM /leq n) where n is the rank of ARRAY.
+ If the rank of ARRAY is one, then all elements of ARRAY are
+ shifted by SHIFT places. If rank is greater than one, then all
+ complete rank one sections of ARRAY along the given dimension are
+ shifted. Elements shifted out one end of each rank one section
+ are dropped. If BOUNDARY is present then the corresponding value
+ of from BOUNDARY is copied back in the other end. If BOUNDARY is
+ not present then the following are copied in depending on the type
+ of ARRAY.
+
+ _Array _Boundary Value_
+ Type_
+ Numeric 0 of the type and kind of ARRAY.
+ Logical `.FALSE.'.
+ Character(LEN)LEN blanks.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ transformational function
+
+ _Syntax_:
+ `A = EOSHIFT(A, SHIFT[,BOUNDARY, DIM])'
+
+ _Arguments_:
+ ARRAY May be any type, not scaler.
+ SHIFT The type shall be `INTEGER'.
+ BOUNDARY Same type as ARRAY.
+ DIM The type shall be `INTEGER'.
+
+ _Return value_:
+ Returns an array of same type and rank as the ARRAY argument.
+
+ _Example_:
+ program test_eoshift
+ integer, dimension(3,3) :: a
+ a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
+ print '(3i3)', a(1,:)
+ print '(3i3)', a(2,:)
+ print '(3i3)', a(3,:)
+ a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)
+ print *
+ print '(3i3)', a(1,:)
+ print '(3i3)', a(2,:)
+ print '(3i3)', a(3,:)
+ end program test_eoshift
+
+
+ File: gfortran.info, Node: EPSILON, Next: ERF, Prev: EOSHIFT, Up: Intrinsic Procedures
+
+ 7.48 `EPSILON' -- Epsilon function
+ ==================================
+
+ _Description_:
+ `EPSILON(X)' returns a nearly negligible number relative to `1'.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ inquiry function
+
+ _Syntax_:
+ `C = EPSILON(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+
+ _Return value_:
+ The return value is of same type as the argument.
+
+ _Example_:
+ program test_epsilon
+ real :: x = 3.143
+ real(8) :: y = 2.33
+ print *, EPSILON(x)
+ print *, EPSILON(y)
+ end program test_epsilon
+
+
+ File: gfortran.info, Node: ERF, Next: ERFC, Prev: EPSILON, Up: Intrinsic Procedures
+
+ 7.49 `ERF' -- Error function
+ ============================
+
+ _Description_:
+ `ERF(X)' computes the error function of X.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = ERF(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)', and it shall be scalar.
+
+ _Return value_:
+ The return value is a scalar of type `REAL(*)' and it is positive
+ ( - 1 \leq erf (x) \leq 1 .
+
+ _Example_:
+ program test_erf
+ real(8) :: x = 0.17_8
+ x = erf(x)
+ end program test_erf
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DERF(X)' `REAL(8) X' `REAL(8)' gnu
+
+
+ File: gfortran.info, Node: ERFC, Next: ETIME, Prev: ERF, Up: Intrinsic Procedures
+
+ 7.50 `ERFC' -- Error function
+ =============================
+
+ _Description_:
+ `ERFC(X)' computes the complementary error function of X.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = ERFC(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)', and it shall be scalar.
+
+ _Return value_:
+ The return value is a scalar of type `REAL(*)' and it is positive
+ ( 0 \leq erfc (x) \leq 2 .
+
+ _Example_:
+ program test_erfc
+ real(8) :: x = 0.17_8
+ x = erfc(x)
+ end program test_erfc
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DERFC(X)' `REAL(8) X' `REAL(8)' gnu
+
+
+ File: gfortran.info, Node: ETIME, Next: EXIT, Prev: ERFC, Up: Intrinsic Procedures
+
+ 7.51 `ETIME' -- Execution time subroutine (or function)
+ =======================================================
+
+ _Description_:
+ `ETIME(TARRAY, RESULT)' returns the number of seconds of runtime
+ since the start of the process's execution in RESULT. TARRAY
+ returns the user and system components of this time in `TARRAY(1)'
+ and `TARRAY(2)' respectively. RESULT is equal to `TARRAY(1) +
+ TARRAY(2)'.
+
+ On some systems, the underlying timings are represented using
+ types with sufficiently small limits that overflows (wraparounds)
+ are possible, such as 32-bit types. Therefore, the values returned
+ by this intrinsic might be, or become, negative, or numerically
+ less than previous values, during a single run of the compiled
+ program.
+
+ If `ETIME' is invoked as a function, it can not be invoked as a
+ subroutine, and vice versa.
+
+ TARRAY and RESULT are `INTENT(OUT)' and provide the following:
+
+ `TARRAY(1)': User time in seconds.
+ `TARRAY(2)': System time in seconds.
+ `RESULT': Run time since start in seconds.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ subroutine
+
+ _Syntax_:
+ `CALL ETIME(TARRAY, RESULT)'.
+ `RESULT = ETIME(TARRAY)', (not recommended).
+
+ _Arguments_:
+ TARRAY The type shall be `REAL, DIMENSION(2)'.
+ RESULT The type shall be `REAL'.
+
+ _Return value_:
+ Elapsed time in seconds since the start of program execution.
+
+ _Example_:
+ program test_etime
+ integer(8) :: i, j
+ real, dimension(2) :: tarray
+ real :: result
+ call ETIME(tarray, result)
+ print *, result
+ print *, tarray(1)
+ print *, tarray(2)
+ do i=1,100000000 ! Just a delay
+ j = i * i - i
+ end do
+ call ETIME(tarray, result)
+ print *, result
+ print *, tarray(1)
+ print *, tarray(2)
+ end program test_etime
+
+
+ File: gfortran.info, Node: EXIT, Next: EXP, Prev: ETIME, Up: Intrinsic Procedures
+
+ 7.52 `EXIT' -- Exit the program with status.
+ ============================================
+
+ _Description_:
+ `EXIT' causes immediate termination of the program with status.
+ If status is omitted it returns the canonical _success_ for the
+ system. All Fortran I/O units are closed.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ non-elemental subroutine
+
+ _Syntax_:
+ `CALL EXIT([STATUS])'
+
+ _Arguments_:
+ STATUS The type of the argument shall be `INTEGER(*)'.
+
+ _Return value_:
+ `STATUS' is passed to the parent process on exit.
+
+ _Example_:
+ program test_exit
+ integer :: STATUS = 0
+ print *, 'This program is going to exit.'
+ call EXIT(STATUS)
+ end program test_exit
+
+
+ File: gfortran.info, Node: EXP, Next: EXPONENT, Prev: EXIT, Up: Intrinsic Procedures
+
+ 7.53 `EXP' -- Exponential function
+ ==================================
+
+ _Description_:
+ `EXP(X)' computes the base e exponential of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = EXP(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)' or `COMPLEX(*)'.
+
+ _Return value_:
+ The return value has same type and kind as X.
+
+ _Example_:
+ program test_exp
+ real :: x = 1.0
+ x = exp(x)
+ end program test_exp
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DEXP(X)' `REAL(8) X' `REAL(8)' f95, gnu
+ `CEXP(X)' `COMPLEX(4) X' `COMPLEX(4)' f95, gnu
+ `ZEXP(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+ `CDEXP(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+
+
+ File: gfortran.info, Node: EXPONENT, Next: FDATE, Prev: EXP, Up: Intrinsic Procedures
+
+ 7.54 `EXPONENT' -- Exponent function
+ ====================================
+
+ _Description_:
+ `EXPONENT(X)' returns the value of the exponent part of X. If X is
+ zero the value returned is zero.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `I = EXPONENT(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+
+ _Return value_:
+ The return value is of type default `INTEGER'.
+
+ _Example_:
+ program test_exponent
+ real :: x = 1.0
+ integer :: i
+ i = exponent(x)
+ print *, i
+ print *, exponent(0.0)
+ end program test_exponent
+
+
+ File: gfortran.info, Node: FDATE, Next: FLOOR, Prev: EXPONENT, Up: Intrinsic Procedures
+
+ 7.55 `FDATE' -- Get the current time as a string
+ ================================================
+
+ _Description_:
+ `FDATE(DATE)' returns the current date (using the same format as
+ `CTIME') in DATE. It is equivalent to `CALL CTIME(DATE, TIME8())'.
+
+ If `FDATE' is invoked as a function, it can not be invoked as a
+ subroutine, and vice versa.
+
+ DATE is an `INTENT(OUT)' `CHARACTER' variable.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ subroutine
+
+ _Syntax_:
+ `CALL FDATE(DATE)'.
+ `DATE = FDATE()', (not recommended).
+
+ _Arguments_:
+ DATE The type shall be of type `CHARACTER'.
+
+ _Return value_:
+ The current date and time as a string.
+
+ _Example_:
+ program test_fdate
+ integer(8) :: i, j
+ character(len=30) :: date
+ call fdate(date)
+ print *, 'Program started on ', date
+ do i = 1, 100000000 ! Just a delay
+ j = i * i - i
+ end do
+ call fdate(date)
+ print *, 'Program ended on ', date
+ end program test_fdate
+
+
+ File: gfortran.info, Node: FLOOR, Next: FNUM, Prev: FDATE, Up: Intrinsic Procedures
+
+ 7.56 `FLOOR' -- Integer floor function
+ ======================================
+
+ _Description_:
+ `FLOOR(X)' returns the greatest integer less than or equal to X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `I = FLOOR(X[,KIND])'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+ KIND Optional scaler integer initialization expression.
+
+ _Return value_:
+ The return value is of type `INTEGER(KIND)'
+
+ _Example_:
+ program test_floor
+ real :: x = 63.29
+ real :: y = -63.59
+ print *, floor(x) ! returns 63
+ print *, floor(y) ! returns -64
+ end program test_floor
+
+
+ File: gfortran.info, Node: FNUM, Next: LOG, Prev: FLOOR, Up: Intrinsic Procedures
+
+ 7.57 `FNUM' -- File number function
+ ===================================
+
+ _Description_:
+ `FNUM(UNIT)' returns the Posix file descriptor number coresponding
+ to the open Fortran I/O unit `UNIT'.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ non-elemental function
+
+ _Syntax_:
+ `I = FNUM(UNIT)'
+
+ _Arguments_:
+ UNIT The type shall be `INTEGER'.
+
+ _Return value_:
+ The return value is of type `INTEGER'
+
+ _Example_:
+ program test_fnum
+ integer :: i
+ open (unit=10, status = "scratch")
+ i = fnum(10)
+ print *, i
+ close (10)
+ end program test_fnum
+
+
+ File: gfortran.info, Node: LOG, Next: LOG10, Prev: FNUM, Up: Intrinsic Procedures
+
+ 7.58 `LOG' -- Logarithm function
+ ================================
+
+ _Description_:
+ `LOG(X)' computes the logarithm of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = LOG(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)' or `COMPLEX(*)'.
+
+ _Return value_:
+ The return value is of type `REAL(*)' or `COMPLEX(*)'. The kind
+ type parameter is the same as X.
+
+ _Example_:
+ program test_log
+ real(8) :: x = 1.0_8
+ complex :: z = (1.0, 2.0)
+ x = log(x)
+ z = log(z)
+ end program test_log
+
+ _Specific names_:
+ Name Argument Return type Option
+ `ALOG(X)' `REAL(4) X' `REAL(4)' f95, gnu
+ `DLOG(X)' `REAL(8) X' `REAL(8)' f95, gnu
+ `CLOG(X)' `COMPLEX(4) X' `COMPLEX(4)' f95, gnu
+ `ZLOG(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+ `CDLOG(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+
+
+ File: gfortran.info, Node: LOG10, Next: SECNDS, Prev: LOG, Up: Intrinsic Procedures
+
+ 7.59 `LOG10' -- Base 10 logarithm function
+ ==========================================
+
+ _Description_:
+ `LOG10(X)' computes the base 10 logarithm of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = LOG10(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)' or `COMPLEX(*)'.
+
+ _Return value_:
+ The return value is of type `REAL(*)' or `COMPLEX(*)'. The kind
+ type parameter is the same as X.
+
+ _Example_:
+ program test_log10
+ real(8) :: x = 10.0_8
+ x = log10(x)
+ end program test_log10
+
+ _Specific names_:
+ Name Argument Return type Option
+ `ALOG10(X)' `REAL(4) X' `REAL(4)' f95, gnu
+ `DLOG10(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: SECNDS, Next: SQRT, Prev: LOG10, Up: Intrinsic Procedures
+
+ 7.60 `SECNDS' -- Time subroutine
+ ================================
+
+ _Description_:
+ `SECNDS(X)' gets the time in seconds from the real-time system
+ clock. X is a reference time, also in seconds. If this is zero,
+ the time in seconds from midnight is returned. This function is
+ non-standard and its use is discouraged.
+
+ _Option_:
+ gnu
+
+ _Class_:
+ function
+
+ _Syntax_:
+ `T = SECNDS (X)'
+
+ _Arguments_:
+ Name Type
+ T REAL(4)
+ X REAL(4)
+
+ _Return value_:
+ None
+
+ _Example_:
+ program test_secnds
+ real(4) :: t1, t2
+ print *, secnds (0.0) ! seconds since midnight
+ t1 = secnds (0.0) ! reference time
+ do i = 1, 10000000 ! do something
+ end do
+ t2 = secnds (t1) ! elapsed time
+ print *, "Something took ", t2, " seconds."
+ end program test_secnds
+
+
+ File: gfortran.info, Node: SIN, Next: SINH, Prev: SQRT, Up: Intrinsic Procedures
+
+ 7.61 `SIN' -- Sine function
+ ===========================
+
+ _Description_:
+ `SIN(X)' computes the sine of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = SIN(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)' or `COMPLEX(*)'.
+
+ _Return value_:
+ The return value has same type and king than X.
+
+ _Example_:
+ program test_sin
+ real :: x = 0.0
+ x = sin(x)
+ end program test_sin
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DSIN(X)' `REAL(8) X' `REAL(8)' f95, gnu
+ `CSIN(X)' `COMPLEX(4) X' `COMPLEX(4)' f95, gnu
+ `ZSIN(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+ `CDSIN(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+
+
+ File: gfortran.info, Node: SINH, Next: TAN, Prev: SIN, Up: Intrinsic Procedures
+
+ 7.62 `SINH' -- Hyperbolic sine function
+ =======================================
+
+ _Description_:
+ `SINH(X)' computes the hyperbolic sine of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = SINH(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+
+ _Return value_:
+ The return value is of type `REAL(*)'.
+
+ _Example_:
+ program test_sinh
+ real(8) :: x = - 1.0_8
+ x = sinh(x)
+ end program test_sinh
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DSINH(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: SQRT, Next: SIN, Prev: SECNDS, Up: Intrinsic Procedures
+
+ 7.63 `SQRT' -- Square-root function
+ ===================================
+
+ _Description_:
+ `SQRT(X)' computes the square root of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = SQRT(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)' or `COMPLEX(*)'.
+
+ _Return value_:
+ The return value is of type `REAL(*)' or `COMPLEX(*)'. The kind
+ type parameter is the same as X.
+
+ _Example_:
+ program test_sqrt
+ real(8) :: x = 2.0_8
+ complex :: z = (1.0, 2.0)
+ x = sqrt(x)
+ z = sqrt(z)
+ end program test_sqrt
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DSQRT(X)' `REAL(8) X' `REAL(8)' f95, gnu
+ `CSQRT(X)' `COMPLEX(4) X' `COMPLEX(4)' f95, gnu
+ `ZSQRT(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+ `CDSQRT(X)' `COMPLEX(8) X' `COMPLEX(8)' f95, gnu
+
+
+ File: gfortran.info, Node: TAN, Next: TANH, Prev: SINH, Up: Intrinsic Procedures
+
+ 7.64 `TAN' -- Tangent function
+ ==============================
+
+ _Description_:
+ `TAN(X)' computes the tangent of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = TAN(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+
+ _Return value_:
+ The return value is of type `REAL(*)'. The kind type parameter is
+ the same as X.
+
+ _Example_:
+ program test_tan
+ real(8) :: x = 0.165_8
+ x = tan(x)
+ end program test_tan
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DTAN(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: TANH, Prev: TAN, Up: Intrinsic Procedures
+
+ 7.65 `TANH' -- Hyperbolic tangent function
+ ==========================================
+
+ _Description_:
+ `TANH(X)' computes the hyperbolic tangent of X.
+
+ _Option_:
+ f95, gnu
+
+ _Class_:
+ elemental function
+
+ _Syntax_:
+ `X = TANH(X)'
+
+ _Arguments_:
+ X The type shall be `REAL(*)'.
+
+ _Return value_:
+ The return value is of type `REAL(*)' and lies in the range - 1
+ \leq tanh(x) \leq 1 .
+
+ _Example_:
+ program test_tanh
+ real(8) :: x = 2.1_8
+ x = tanh(x)
+ end program test_tanh
+
+ _Specific names_:
+ Name Argument Return type Option
+ `DTANH(X)' `REAL(8) X' `REAL(8)' f95, gnu
+
+
+ File: gfortran.info, Node: Contributing, Next: Standards, Prev: Project Status, Up: Top
+
+ 8 Contributing
+ **************
+
+ Free software is only possible if people contribute to efforts to
+ create it. We're always in need of more people helping out with ideas
+ and comments, writing documentation and contributing code.
+
+ If you want to contribute to GNU Fortran 95, have a look at the long
+ lists of projects you can take on. Some of these projects are small,
+ some of them are large; some are completely orthogonal to the rest of
+ what is happening on `gfortran', but others are "mainstream" projects
+ in need of enthusiastic hackers. All of these projects are important!
+ We'll eventually get around to the things here, but they are also
+ things doable by someone who is willing and able.
+
+ * Menu:
+
+ * Contributors::
+ * Projects::
+
+
+ File: gfortran.info, Node: Contributors, Next: Projects, Up: Contributing
+
+ 8.1 Contributors to GNU Fortran 95
+ ==================================
+
+ Most of the parser was hand-crafted by _Andy Vaught_, who is also the
+ initiator of the whole project. Thanks Andy! Most of the interface
+ with GCC was written by _Paul Brook_.
+
+ The following individuals have contributed code and/or ideas and
+ significant help to the gfortran project (in no particular order):
+
+ - Andy Vaught
+
+ - Katherine Holcomb
+
+ - Tobias Schlüter
+
+ - Steven Bosscher
+
+ - Toon Moene
+
+ - Tim Prince
+
+ - Niels Kristian Bech Jensen
+
+ - Steven Johnson
+
+ - Paul Brook
+
+ - Feng Wang
+
+ - Bud Davis
+
+ The following people have contributed bug reports, smaller or larger
+ patches, and much needed feedback and encouragement for the `gfortran'
+ project:
+
+ - Erik Schnetter
+
+ - Bill Clodius
+
+ - Kate Hedstrom
+
+ Many other individuals have helped debug, test and improve
+ `gfortran' over the past two years, and we welcome you to do the same!
+ If you already have done so, and you would like to see your name listed
+ in the list above, please contact us.
+
+
+ File: gfortran.info, Node: Projects, Prev: Contributors, Up: Contributing
+
+ 8.2 Projects
+ ============
+
+ _Help build the test suite_
+ Solicit more code for donation to the test suite. We can keep
+ code private on request.
+
+ _Bug hunting/squishing_
+ Find bugs and write more test cases! Test cases are especially
+ very welcome, because it allows us to concentrate on fixing bugs
+ instead of isolating them.
+
+ _Smaller projects ("bug" fixes):_
+ - Allow init exprs to be numbers raised to integer powers.
+
+ - Implement correct rounding.
+
+ - Implement F restrictions on Fortran 95 syntax.
+
+ - See about making Emacs-parsable error messages.
+
+ If you wish to work on the runtime libraries, please contact a project
+ maintainer.
+
+
+ File: gfortran.info, Node: Standards, Next: Extensions, Prev: Contributing, Up: Top
+
+ 9 Standards
+ ***********
+
+ The GNU Fortran 95 Compiler aims to be a conforming implementation of
+ ISO/IEC 1539:1997 (Fortran 95).
+
+ In the future it may also support other variants and extensions to
+ the Fortran language. This includes ANSI Fortran 77, Fortran 90,
+ Fortran 2000 (not yet finalized), and OpenMP.
+
+
+ File: gfortran.info, Node: Index, Prev: Intrinsic Procedures, Up: Top
+
+ Index
+ *****
+
+ [index ]
+ * Menu:
+
+ * -fbounds-check option: Code Gen Options. (line 129)
+ * -fdefault-double-8, option: Fortran Dialect Options.
+ (line 16)
+ * -fdefault-integer-8, option: Fortran Dialect Options.
+ (line 19)
+ * -fdefault-real-8, option: Fortran Dialect Options.
+ (line 23)
+ * -fdollar-ok option: Fortran Dialect Options.
+ (line 27)
+ * -fdump-parse-tree option: Debugging Options. (line 9)
+ * -ff2c option: Code Gen Options. (line 20)
+ * -ffixed-line-length-N option: Fortran Dialect Options.
+ (line 36)
+ * -ffortran-bounds-check option: Code Gen Options. (line 129)
+ * -ffree-form option: Fortran Dialect Options.
+ (line 9)
+ * -fimplicit-none option: Fortran Dialect Options.
+ (line 53)
+ * -fmax-identifier-length=N option: Fortran Dialect Options.
+ (line 49)
+ * -fmax-stack-var-size option: Code Gen Options. (line 138)
+ * -fno-automatic option: Code Gen Options. (line 14)
+ * -fno-backslash option: Fortran Dialect Options.
+ (line 30)
+ * -fno-fixed-form option: Fortran Dialect Options.
+ (line 9)
+ * -fno-underscoring option: Code Gen Options. (line 49)
+ * -fpackderived: Code Gen Options. (line 148)
+ * -frepack-arrays option: Code Gen Options. (line 154)
+ * -fsecond-underscore option: Code Gen Options. (line 112)
+ * -fsyntax-only option: Warning Options. (line 20)
+ * -Idir option: Directory Options. (line 13)
+ * -Mdir option: Directory Options. (line 28)
+ * -pedantic option: Warning Options. (line 24)
+ * -pedantic-errors option: Warning Options. (line 42)
+ * -std=STD option: Fortran Dialect Options.
+ (line 58)
+ * -W option: Warning Options. (line 98)
+ * -w option: Warning Options. (line 46)
+ * -Waliasing option: Warning Options. (line 55)
+ * -Wall option: Warning Options. (line 49)
+ * -Wconversion option: Warning Options. (line 62)
+ * -Werror: Warning Options. (line 95)
+ * -Wimplicit-interface option: Warning Options. (line 65)
+ * -Wnonstd-intrinsic option: Warning Options. (line 71)
+ * -Wsurprising: Warning Options. (line 75)
+ * -Wunderflow: Warning Options. (line 88)
+ * -Wunused-labels option: Warning Options. (line 92)
+ * abort: ABORT. (line 6)
+ * ABORT: ABORT. (line 6)
+ * ABS intrinsic: ABS. (line 6)
+ * absolute value: ABS. (line 6)
+ * ACHAR intrinsic: ACHAR. (line 6)
+ * ACOS intrinsic: ACOS. (line 6)
+ * adjust string <1>: ADJUSTR. (line 6)
+ * adjust string: ADJUSTL. (line 6)
+ * ADJUSTL intrinsic: ADJUSTL. (line 6)
+ * ADJUSTR intrinsic: ADJUSTR. (line 6)
+ * AIMAG intrinsic: AIMAG. (line 6)
+ * AINT intrinsic: AINT. (line 6)
+ * aliasing: Warning Options. (line 56)
+ * ALL intrinsic: ALL. (line 6)
+ * all warnings: Warning Options. (line 50)
+ * ALLOCATED intrinsic: ALLOCATED. (line 6)
+ * allocation status: ALLOCATED. (line 6)
+ * ALOG intrinsic: LOG. (line 6)
+ * ALOG10 intrinsic: LOG10. (line 6)
+ * ANINT intrinsic: ANINT. (line 6)
+ * ANY intrinsic: ANY. (line 6)
+ * arc cosine: ACOS. (line 6)
+ * arcsine: ASIN. (line 6)
+ * arctangent <1>: ATAN2. (line 6)
+ * arctangent: ATAN. (line 6)
+ * array bounds checking: Code Gen Options. (line 130)
+ * ASCII collating sequence: ACHAR. (line 6)
+ * ASIN intrinsic: ASIN. (line 6)
+ * ASSOCIATED intrinsic: ASSOCIATED. (line 6)
+ * ATAN intrinsic: ATAN. (line 6)
+ * ATAN2 intrinsic: ATAN2. (line 6)
+ * Authors: Contributors. (line 6)
+ * backslash: Fortran Dialect Options.
+ (line 31)
+ * BESJ0 intrinsic: BESJ0. (line 6)
+ * BESJ1 intrinsic: BESJ1. (line 6)
+ * BESJN intrinsic: BESJN. (line 6)
+ * Bessel <1>: BESYN. (line 6)
+ * Bessel <2>: BESY1. (line 6)
+ * Bessel <3>: BESY0. (line 6)
+ * Bessel <4>: BESJN. (line 6)
+ * Bessel <5>: BESJ1. (line 6)
+ * Bessel: BESJ0. (line 6)
+ * BESY0 intrinsic: BESY0. (line 6)
+ * BESY1 intrinsic: BESY1. (line 6)
+ * BESYN intrinsic: BESYN. (line 6)
+ * bit_size: BIT_SIZE. (line 6)
+ * BIT_SIZE intrinsic: BIT_SIZE. (line 6)
+ * bounds checking: Code Gen Options. (line 130)
+ * BTEST: BTEST. (line 6)
+ * BTEST intrinsic: BTEST. (line 6)
+ * CABS intrinsic: ABS. (line 6)
+ * calling convention: Code Gen Options. (line 21)
+ * card image: Fortran Dialect Options.
+ (line 41)
+ * CDABS intrinsic: ABS. (line 6)
+ * CDCOS intrinsic: COS. (line 6)
+ * CDEXP intrinsic: EXP. (line 6)
+ * CDLOG intrinsic: LOG. (line 6)
+ * CDSIN intrinsic: SIN. (line 6)
+ * CDSQRT intrinsic: SQRT. (line 6)
+ * CEILING: CEILING. (line 6)
+ * CEILING intrinsic: CEILING. (line 6)
+ * CHAR: CHAR. (line 6)
+ * CHAR intrinsic: CHAR. (line 6)
+ * character set: Fortran Dialect Options.
+ (line 28)
+ * checking subscripts: Code Gen Options. (line 130)
+ * CLOG intrinsic: LOG. (line 6)
+ * CMPLX: CMPLX. (line 6)
+ * CMPLX intrinsic: CMPLX. (line 6)
+ * code generation, conventions: Code Gen Options. (line 6)
+ * command argument count: COMMAND_ARGUMENT_COUNT.
+ (line 6)
+ * command options: Invoking GFORTRAN. (line 6)
+ * COMMAND_ARGUMENT_COUNT intrinsic: COMMAND_ARGUMENT_COUNT.
+ (line 6)
+ * complex conjugate: CONJG. (line 6)
+ * CONJG intrinsic: CONJG. (line 6)
+ * Contributing: Contributing. (line 6)
+ * Contributors: Contributors. (line 6)
+ * conversion: Warning Options. (line 63)
+ * COS intrinsic: COS. (line 6)
+ * COSH intrinsic: COSH. (line 6)
+ * cosine: COS. (line 6)
+ * count: COUNT. (line 6)
+ * COUNT intrinsic: COUNT. (line 6)
+ * CPU_TIME: CPU_TIME. (line 6)
+ * CPU_TIME intrinsic: CPU_TIME. (line 6)
+ * Credits: Contributors. (line 6)
+ * cshift intrinsic: CSHIFT. (line 6)
+ * CSHIFT intrinsic: CSHIFT. (line 6)
+ * CSQRT intrinsic: SQRT. (line 6)
+ * CTIME intrinsic: CTIME. (line 6)
+ * ctime subroutine: CTIME. (line 6)
+ * DABS intrinsic: ABS. (line 6)
+ * DACOS intrinsic: ACOS. (line 6)
+ * DASIN intrinsic: ASIN. (line 6)
+ * DATAN intrinsic: ATAN. (line 6)
+ * DATAN2 intrinsic: ATAN2. (line 6)
+ * DATE_AND_TIME: DATE_AND_TIME. (line 6)
+ * DATE_AND_TIME intrinsic: DATE_AND_TIME. (line 6)
+ * DBESJ0 intrinsic: BESJ0. (line 6)
+ * DBESJ1 intrinsic: BESJ1. (line 6)
+ * DBESJN intrinsic: BESJN. (line 6)
+ * DBESY0 intrinsic: BESY0. (line 6)
+ * DBESY1 intrinsic: BESY1. (line 6)
+ * DBESYN intrinsic: BESYN. (line 6)
+ * DBLE intrinsic: DBLE. (line 6)
+ * DCMPLX: DCMPLX. (line 6)
+ * DCMPLX intrinsic: DCMPLX. (line 6)
+ * DCONJG intrinsic: CONJG. (line 6)
+ * DCOS intrinsic: COS. (line 6)
+ * DCOSH intrinsic: COSH. (line 6)
+ * DDIM intrinsic: DIM. (line 6)
+ * debugging information options: Debugging Options. (line 6)
+ * DEXP intrinsic: EXP. (line 6)
+ * DFLOAT intrinsic: DFLOAT. (line 6)
+ * dialect options: Fortran Dialect Options.
+ (line 6)
+ * DIGITS intrinsic: DIGITS. (line 6)
+ * digits, significant: DIGITS. (line 6)
+ * dim: DIM. (line 6)
+ * DIM intrinsic: DIM. (line 6)
+ * DIMAG intrinsic: AIMAG. (line 6)
+ * DINT intrinsic: AINT. (line 6)
+ * directive, INCLUDE: Directory Options. (line 6)
+ * directory, options: Directory Options. (line 6)
+ * directory, search paths for inclusion: Directory Options. (line 14)
+ * DLOG intrinsic: LOG. (line 6)
+ * DLOG10 intrinsic: LOG10. (line 6)
+ * DNINT intrinsic: ANINT. (line 6)
+ * dollar sign: Fortran Dialect Options.
+ (line 28)
+ * Dot product: DOT_PRODUCT. (line 6)
+ * DOT_PRODUCT intrinsic: DOT_PRODUCT. (line 6)
+ * double conversion: DBLE. (line 6)
+ * double float conversion: DFLOAT. (line 6)
+ * Double product: DPROD. (line 6)
+ * Double real part: DREAL. (line 6)
+ * DPROD intrinsic: DPROD. (line 6)
+ * DREAL intrinsic: DREAL. (line 6)
+ * DSIN intrinsic: SIN. (line 6)
+ * DSINH intrinsic: SINH. (line 6)
+ * DSQRT intrinsic: SQRT. (line 6)
+ * DTAN intrinsic: TAN. (line 6)
+ * DTANH intrinsic: TANH. (line 6)
+ * DTIME intrinsic: DTIME. (line 6)
+ * dtime subroutine: DTIME. (line 6)
+ * environment variables: Environment Variables.
+ (line 6)
+ * eoshift intrinsic: EOSHIFT. (line 6)
+ * EOSHIFT intrinsic: EOSHIFT. (line 6)
+ * EPSILON intrinsic: EPSILON. (line 6)
+ * epsilon, significant: EPSILON. (line 6)
+ * ERF intrinsic: ERF. (line 6)
+ * ERFC intrinsic: ERFC. (line 6)
+ * error function <1>: ERFC. (line 6)
+ * error function: ERF. (line 6)
+ * escape characters: Fortran Dialect Options.
+ (line 31)
+ * ETIME intrinsic: ETIME. (line 6)
+ * ETIME subroutine: ETIME. (line 6)
+ * exit: EXIT. (line 6)
+ * EXIT: EXIT. (line 6)
+ * EXP intrinsic: EXP. (line 6)
+ * exponent function: EXPONENT. (line 6)
+ * EXPONENT intrinsic: EXPONENT. (line 6)
+ * exponential: EXP. (line 6)
+ * extended-source option: Fortran Dialect Options.
+ (line 41)
+ * Extension: Extensions. (line 6)
+ * extra warnings: Warning Options. (line 99)
+ * f2c calling convention: Code Gen Options. (line 21)
+ * FDATE intrinsic: FDATE. (line 6)
+ * fdate subroutine: FDATE. (line 6)
+ * FDL, GNU Free Documentation License: GNU Free Documentation License.
+ (line 6)
+ * fixed form: Fortran Dialect Options.
+ (line 9)
+ * floor: FLOOR. (line 6)
+ * FLOOR intrinsic: FLOOR. (line 6)
+ * fnum: FNUM. (line 6)
+ * FNUM intrinsic: FNUM. (line 6)
+ * Fortran 77: GFORTRAN and G77. (line 6)
+ * Fortran 90, features: Fortran Dialect Options.
+ (line 9)
+ * free form: Fortran Dialect Options.
+ (line 9)
+ * G77: GFORTRAN and G77. (line 6)
+ * g77 calling convention: Code Gen Options. (line 21)
+ * GNU Compiler Collection: GFORTRAN and GCC. (line 6)
+ * GNU Fortran 95 command options: Invoking GFORTRAN. (line 6)
+ * Hollerith constants: Hollerith constants support.
+ (line 6)
+ * hyperbolic cosine: COSH. (line 6)
+ * hyperbolic sine: SINH. (line 6)
+ * hyperbolic tangent: TANH. (line 6)
+ * IABS intrinsic: ABS. (line 6)
+ * IDIM intrinsic: DIM. (line 6)
+ * Imaginary part: AIMAG. (line 6)
+ * Implicitly interconvert LOGICAL and INTEGER: Implicitly interconvert LOGICAL and INTEGER.
+ (line 6)
+ * INCLUDE directive: Directory Options. (line 6)
+ * inclusion, directory search paths for: Directory Options. (line 14)
+ * Initialization: Old-style variable initialization.
+ (line 6)
+ * Intrinsic Procedures: Intrinsic Procedures.
+ (line 6)
+ * Introduction: Top. (line 6)
+ * Kind specifications: Old-style kind specifications.
+ (line 6)
+ * labels, unused: Warning Options. (line 93)
+ * language, dialect options: Fortran Dialect Options.
+ (line 6)
+ * length of source lines: Fortran Dialect Options.
+ (line 37)
+ * libf2c calling convention: Code Gen Options. (line 21)
+ * limits, lengths of source lines: Fortran Dialect Options.
+ (line 37)
+ * lines, length: Fortran Dialect Options.
+ (line 37)
+ * LOG intrinsic: LOG. (line 6)
+ * LOG10 intrinsic: LOG10. (line 6)
+ * logarithm <1>: LOG10. (line 6)
+ * logarithm: LOG. (line 6)
+ * messages, warning: Warning Options. (line 6)
+ * module search path: Directory Options. (line 14)
+ * Namelist: Extensions to namelist.
+ (line 6)
+ * negative forms of options: Invoking GFORTRAN. (line 24)
+ * option -fmax-identifier-length=N: Fortran Dialect Options.
+ (line 49)
+ * option, -fdefault-double-8: Fortran Dialect Options.
+ (line 16)
+ * option, -fdefault-integer-8: Fortran Dialect Options.
+ (line 19)
+ * option, -fdefault-real-8: Fortran Dialect Options.
+ (line 23)
+ * option, -fdump-parse-tree: Debugging Options. (line 9)
+ * option, -Mdir: Directory Options. (line 28)
+ * option, -std=STD: Fortran Dialect Options.
+ (line 58)
+ * options, -fdollar-ok: Fortran Dialect Options.
+ (line 27)
+ * options, -ff2c: Code Gen Options. (line 20)
+ * options, -ffixed-line-length-N: Fortran Dialect Options.
+ (line 36)
+ * options, -ffree-form: Fortran Dialect Options.
+ (line 9)
+ * options, -fimplicit-none: Fortran Dialect Options.
+ (line 53)
+ * options, -fno-automatic: Code Gen Options. (line 14)
+ * options, -fno-backslash: Fortran Dialect Options.
+ (line 30)
+ * options, -fno-fixed-form: Fortran Dialect Options.
+ (line 9)
+ * options, -fno-underscoring: Code Gen Options. (line 49)
+ * options, -fsecond-underscore: Code Gen Options. (line 112)
+ * options, -fsyntax-only: Warning Options. (line 20)
+ * options, -Idir: Directory Options. (line 13)
+ * options, -pedantic: Warning Options. (line 24)
+ * options, -pedantic-errors: Warning Options. (line 42)
+ * options, -W: Warning Options. (line 98)
+ * options, -w: Warning Options. (line 46)
+ * options, -Waliasing: Warning Options. (line 55)
+ * options, -Wall: Warning Options. (line 49)
+ * options, -Wconversion: Warning Options. (line 62)
+ * options, -Werror: Warning Options. (line 95)
+ * options, -Wimplicit-interface: Warning Options. (line 65)
+ * options, -Wnonstd-intrinsic: Warning Options. (line 71)
+ * options, -Wsurprising: Warning Options. (line 75)
+ * options, -Wunderflow: Warning Options. (line 88)
+ * options, -Wunused-labels: Warning Options. (line 92)
+ * options, code generation: Code Gen Options. (line 6)
+ * options, debugging: Debugging Options. (line 6)
+ * options, dialect: Fortran Dialect Options.
+ (line 6)
+ * options, directory search: Directory Options. (line 6)
+ * options, GNU Fortran 95 command: Invoking GFORTRAN. (line 6)
+ * options, negative forms: Invoking GFORTRAN. (line 24)
+ * options, warnings: Warning Options. (line 6)
+ * paths, search: Directory Options. (line 14)
+ * pointer status: ASSOCIATED. (line 6)
+ * range checking: Code Gen Options. (line 130)
+ * Repacking arrays: Code Gen Options. (line 155)
+ * run-time, options: Code Gen Options. (line 6)
+ * SAVE statement: Code Gen Options. (line 15)
+ * search path: Directory Options. (line 6)
+ * search paths, for included files: Directory Options. (line 14)
+ * SECNDS: SECNDS. (line 6)
+ * SECNDS intrinsic: SECNDS. (line 6)
+ * SIN intrinsic: SIN. (line 6)
+ * sine: SIN. (line 6)
+ * SINH intrinsic: SINH. (line 6)
+ * source file format: Fortran Dialect Options.
+ (line 9)
+ * Source Form: Fortran Dialect Options.
+ (line 9)
+ * SQRT intrinsic: SQRT. (line 6)
+ * square-root: SQRT. (line 6)
+ * Standards: Standards. (line 6)
+ * statements, SAVE: Code Gen Options. (line 15)
+ * Structure packing: Code Gen Options. (line 149)
+ * subscript checking: Code Gen Options. (line 130)
+ * suppressing warnings: Warning Options. (line 6)
+ * Suspicious: Warning Options. (line 76)
+ * symbol names: Fortran Dialect Options.
+ (line 28)
+ * symbol names, transforming: Code Gen Options. (line 50)
+ * symbol names, underscores: Code Gen Options. (line 50)
+ * syntax checking: Warning Options. (line 20)
+ * TAN intrinsic: TAN. (line 6)
+ * tangent: TAN. (line 6)
+ * TANH intrinsic: TANH. (line 6)
+ * transforming symbol names: Code Gen Options. (line 50)
+ * true values <1>: ANY. (line 6)
+ * true values: ALL. (line 6)
+ * UNDERFLOW: Warning Options. (line 89)
+ * underscore: Code Gen Options. (line 50)
+ * unused labels: Warning Options. (line 93)
+ * warnings, all: Warning Options. (line 50)
+ * warnings, extra: Warning Options. (line 99)
+ * warnings, suppressing: Warning Options. (line 6)
+ * whole number <1>: ANINT. (line 6)
+ * whole number: AINT. (line 6)
+ * ZABS intrinsic: ABS. (line 6)
+ * ZCOS intrinsic: COS. (line 6)
+ * ZEXP intrinsic: EXP. (line 6)
+ * ZLOG intrinsic: LOG. (line 6)
+ * ZSIN intrinsic: SIN. (line 6)
+ * ZSQRT intrinsic: SQRT. (line 6)
+
+
+
+ Tag Table:
+ Node: Top2139
+ Node: Copying3336
+ Node: GNU Free Documentation License22509
+ Node: Funding44911
+ Node: Getting Started47439
+ Node: GFORTRAN and GCC52146
+ Node: GFORTRAN and G7754126
+ Node: Invoking GFORTRAN55671
+ Node: Option Summary57877
+ Node: Fortran Dialect Options59717
+ Node: Warning Options61942
+ Node: Debugging Options65986
+ Node: Directory Options66586
+ Node: Code Gen Options67943
+ Node: Environment Variables75463
+ Node: Project Status75936
+ Node: Compiler Status76760
+ Node: Library Status77750
+ Node: Proposed Extensions79120
+ Node: Extensions82430
+ Node: Old-style kind specifications83358
+ Node: Old-style variable initialization83933
+ Node: Extensions to namelist85027
+ Node: Implicitly interconvert LOGICAL and INTEGER86682
+ Node: Hollerith constants support87391
+ Node: Intrinsic Procedures88516
+ Node: Introduction92587
+ Node: ABORT94887
+ Node: ABS95532
+ Node: ACHAR96749
+ Node: ACOS97480
+ Node: ADJUSTL98353
+ Node: ADJUSTR99188
+ Node: AIMAG100030
+ Node: AINT100970
+ Node: ALL102364
+ Node: ALLOCATED104265
+ Node: ANINT105123
+ Node: ANY106429
+ Node: ASIN108343
+ Node: ASSOCIATED109223
+ Node: ATAN112025
+ Node: ATAN2112811
+ Node: BESJ0114075
+ Node: BESJ1114962
+ Node: BESJN115855
+ Node: BESY0116814
+ Node: BESY1117645
+ Node: BESYN118476
+ Node: BIT_SIZE119441
+ Node: BTEST120180
+ Node: CEILING121010
+ Node: CHAR121807
+ Node: CMPLX122580
+ Node: COMMAND_ARGUMENT_COUNT123751
+ Node: CONJG124549
+ Node: COS125485
+ Node: COSH126389
+ Node: COUNT127160
+ Node: CPU_TIME128678
+ Node: CSHIFT129516
+ Node: CTIME131120
+ Node: DATE_AND_TIME132341
+ Node: DBLE134534
+ Node: DCMPLX135342
+ Node: DFLOAT136552
+ Node: DIGITS136863
+ Node: DIM137795
+ Node: DOT_PRODUCT138870
+ Node: DPROD140282
+ Node: DREAL141015
+ Node: DTIME141629
+ Node: EOSHIFT143874
+ Node: EPSILON145897
+ Node: ERF146581
+ Node: ERFC147351
+ Node: ETIME148139
+ Node: EXIT150269
+ Node: EXP151089
+ Node: EXPONENT152014
+ Node: FDATE152748
+ Node: FLOOR153921
+ Node: FNUM154696
+ Node: LOG155413
+ Node: LOG10156510
+ Node: SECNDS157392
+ Node: SIN158418
+ Node: SINH159313
+ Node: SQRT160034
+ Node: TAN161081
+ Node: TANH161820
+ Node: Contributing162589
+ Node: Contributors163422
+ Node: Projects164567
+ Node: Standards165339
+ Node: Index165741
+
+ End Tag Table
diff -Nrcpad gcc-4.0.3/gcc/gengtype-lex.c gcc-4.0.4/gcc/gengtype-lex.c
*** gcc-4.0.3/gcc/gengtype-lex.c 2006-03-09 20:50:06.000000000 +0000
--- gcc-4.0.4/gcc/gengtype-lex.c 2007-01-31 10:40:52.000000000 +0000
***************
*** 1,86 ****
#line 2 "gengtype-lex.c"
-
- #line 4 "gengtype-lex.c"
-
- #define YY_INT_ALIGNED short int
-
/* A lexical scanner generated by flex */
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
- #define YY_FLEX_SUBMINOR_VERSION 31
- #if YY_FLEX_SUBMINOR_VERSION > 0
- #define FLEX_BETA
- #endif
- /* First, we deal with platform-specific or compiler-specific issues. */
-
- /* begin standard C headers. */
#include
- #include
- #include
- #include
- /* end standard C headers. */
-
- /* flex integer type definitions */
-
- #ifndef FLEXINT_H
- #define FLEXINT_H
! /* C99 systems have . Non-C99 systems may or may not. */
!
! #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
! #include
! typedef int8_t flex_int8_t;
! typedef uint8_t flex_uint8_t;
! typedef int16_t flex_int16_t;
! typedef uint16_t flex_uint16_t;
! typedef int32_t flex_int32_t;
! typedef uint32_t flex_uint32_t;
! #else
! typedef signed char flex_int8_t;
! typedef short int flex_int16_t;
! typedef int flex_int32_t;
! typedef unsigned char flex_uint8_t;
! typedef unsigned short int flex_uint16_t;
! typedef unsigned int flex_uint32_t;
! #endif /* ! C99 */
!
! /* Limits of integral types. */
! #ifndef INT8_MIN
! #define INT8_MIN (-128)
! #endif
! #ifndef INT16_MIN
! #define INT16_MIN (-32767-1)
! #endif
! #ifndef INT32_MIN
! #define INT32_MIN (-2147483647-1)
! #endif
! #ifndef INT8_MAX
! #define INT8_MAX (127)
! #endif
! #ifndef INT16_MAX
! #define INT16_MAX (32767)
! #endif
! #ifndef INT32_MAX
! #define INT32_MAX (2147483647)
! #endif
! #ifndef UINT8_MAX
! #define UINT8_MAX (255U)
! #endif
! #ifndef UINT16_MAX
! #define UINT16_MAX (65535U)
#endif
- #ifndef UINT32_MAX
- #define UINT32_MAX (4294967295U)
#endif
- #endif /* ! FLEXINT_H */
#ifdef __cplusplus
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
--- 1,33 ----
#line 2 "gengtype-lex.c"
/* A lexical scanner generated by flex */
+ /* Scanner skeleton version:
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+ */
+
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#include
! /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
! #ifdef c_plusplus
! #ifndef __cplusplus
! #define __cplusplus
#endif
#endif
#ifdef __cplusplus
+ #include
+ #include
+
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
*************** typedef unsigned int flex_uint32_t;
*** 88,104 ****
--- 35,68 ----
#if __STDC__
+ #define YY_USE_PROTOS
#define YY_USE_CONST
#endif /* __STDC__ */
#endif /* ! __cplusplus */
+ #ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+ #include
+ #include
+ #define YY_USE_CONST
+ #define YY_USE_PROTOS
+ #endif
+
#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif
+
+ #ifdef YY_USE_PROTOS
+ #define YY_PROTO(proto) proto
+ #else
+ #define YY_PROTO(proto) ()
+ #endif
+
/* Returned upon end-of-file. */
#define YY_NULL 0
*************** typedef unsigned int flex_uint32_t;
*** 113,183 ****
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
! #define BEGIN (yy_start) = 1 + 2 *
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
! #define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
! #define YY_NEW_FILE yyrestart(yyin )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
- #ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
- #endif
- #ifndef YY_TYPEDEF_YY_BUFFER_STATE
- #define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
- #endif
extern int yyleng;
-
extern FILE *yyin, *yyout;
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
! #define YY_LESS_LINENO(n)
!
! /* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
do \
{ \
/* Undo effects of setting up yytext. */ \
! int yyless_macro_arg = (n); \
! YY_LESS_LINENO(yyless_macro_arg);\
! *yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
! (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
YY_DO_BEFORE_ACTION; /* set up yytext again */ \
} \
while ( 0 )
! #define unput(c) yyunput( c, (yytext_ptr) )
/* The following is because we cannot portably get our hands on size_t
* (without autoconf's help, which isn't available because we want
* flex-generated scanners to compile on their own).
*/
-
- #ifndef YY_TYPEDEF_YY_SIZE_T
- #define YY_TYPEDEF_YY_SIZE_T
typedef unsigned int yy_size_t;
- #endif
! #ifndef YY_STRUCT_YY_BUFFER_STATE
! #define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
{
FILE *yy_input_file;
--- 77,147 ----
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
! #define BEGIN yy_start = 1 + 2 *
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
! #define YY_START ((yy_start - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
! #define YY_NEW_FILE yyrestart( yyin )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
#define YY_BUF_SIZE 16384
typedef struct yy_buffer_state *YY_BUFFER_STATE;
extern int yyleng;
extern FILE *yyin, *yyout;
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
! /* The funky do-while in the following #define is used to turn the definition
! * int a single C statement (which needs a semi-colon terminator). This
! * avoids problems with code like:
! *
! * if ( condition_holds )
! * yyless( 5 );
! * else
! * do_something_else();
! *
! * Prior to using the do-while the compiler would get upset at the
! * "else" because it interpreted the "if" statement as being all
! * done when it reached the ';' after the yyless() call.
! */
!
! /* Return all but the first 'n' matched characters back to the input stream. */
!
#define yyless(n) \
do \
{ \
/* Undo effects of setting up yytext. */ \
! *yy_cp = yy_hold_char; \
YY_RESTORE_YY_MORE_OFFSET \
! yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
YY_DO_BEFORE_ACTION; /* set up yytext again */ \
} \
while ( 0 )
! #define unput(c) yyunput( c, yytext_ptr )
/* The following is because we cannot portably get our hands on size_t
* (without autoconf's help, which isn't available because we want
* flex-generated scanners to compile on their own).
*/
typedef unsigned int yy_size_t;
!
struct yy_buffer_state
{
FILE *yy_input_file;
*************** struct yy_buffer_state
*** 214,229 ****
*/
int yy_at_bol;
- int yy_bs_lineno; /**< The line count. */
- int yy_bs_column; /**< The column count. */
-
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
int yy_fill_buffer;
int yy_buffer_status;
-
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
/* When an EOF's been seen but there's still some text to process
--- 178,189 ----
*************** struct yy_buffer_state
*** 237,269 ****
* just pointing yyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
-
};
- #endif /* !YY_STRUCT_YY_BUFFER_STATE */
! /* Stack of input buffers. */
! static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
! static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
! static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
- *
- * Returns the top of the stack, or NULL.
*/
! #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
! ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
! : NULL)
- /* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
- #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
static int yy_n_chars; /* number of characters read into yy_ch_buf */
int yyleng;
/* Points to current character in buffer. */
--- 197,219 ----
* just pointing yyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
};
! static YY_BUFFER_STATE yy_current_buffer = 0;
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
*/
! #define YY_CURRENT_BUFFER yy_current_buffer
/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
+
static int yy_n_chars; /* number of characters read into yy_ch_buf */
+
+
int yyleng;
/* Points to current character in buffer. */
*************** static int yy_start = 0; /* start state
*** 276,370 ****
*/
static int yy_did_buffer_switch_on_eof;
! void yyrestart (FILE *input_file );
! void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
! YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
! void yy_delete_buffer (YY_BUFFER_STATE b );
! void yy_flush_buffer (YY_BUFFER_STATE b );
! void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
! void yypop_buffer_state (void );
!
! static void yyensure_buffer_stack (void );
! static void yy_load_buffer_state (void );
! static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
! #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
! YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
! YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
! YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len );
! void *yyalloc (yy_size_t );
! void *yyrealloc (void *,yy_size_t );
! void yyfree (void * );
#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
! if ( ! YY_CURRENT_BUFFER ){ \
! yyensure_buffer_stack (); \
! YY_CURRENT_BUFFER_LVALUE = \
! yy_create_buffer(yyin,YY_BUF_SIZE ); \
! } \
! YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
! if ( ! YY_CURRENT_BUFFER ){\
! yyensure_buffer_stack (); \
! YY_CURRENT_BUFFER_LVALUE = \
! yy_create_buffer(yyin,YY_BUF_SIZE ); \
! } \
! YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
! #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
- /* Begin user sect3 */
! #define yywrap(n) 1
#define YY_SKIP_YYWRAP
-
typedef unsigned char YY_CHAR;
-
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-
typedef int yy_state_type;
-
- extern int yylineno;
-
- int yylineno = 1;
-
extern char *yytext;
#define yytext_ptr yytext
! static yy_state_type yy_get_previous_state (void );
! static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
! static int yy_get_next_buffer (void );
! static void yy_fatal_error (yyconst char msg[] );
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
*/
#define YY_DO_BEFORE_ACTION \
! (yytext_ptr) = yy_bp; \
! yyleng = (size_t) (yy_cp - yy_bp); \
! (yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
! (yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 60
#define YY_END_OF_BUFFER 61
! /* This struct is not used in this scanner,
! but its presence is necessary. */
! struct yy_trans_info
! {
! flex_int32_t yy_verify;
! flex_int32_t yy_nxt;
! };
! static yyconst flex_int16_t yy_accept[932] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61, 41, 41, 38, 56, 41, 56, 41, 39, 41,
--- 226,294 ----
*/
static int yy_did_buffer_switch_on_eof;
! void yyrestart YY_PROTO(( FILE *input_file ));
! void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
! void yy_load_buffer_state YY_PROTO(( void ));
! YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
! void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
! void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
! void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
! #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
! YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
! YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
! YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
! static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
! static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
! static void yy_flex_free YY_PROTO(( void * ));
#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
! if ( ! yy_current_buffer ) \
! yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
! yy_current_buffer->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
! if ( ! yy_current_buffer ) \
! yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
! yy_current_buffer->yy_at_bol = at_bol; \
}
! #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
! #define yywrap() 1
#define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
typedef int yy_state_type;
extern char *yytext;
#define yytext_ptr yytext
! static yy_state_type yy_get_previous_state YY_PROTO(( void ));
! static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
! static int yy_get_next_buffer YY_PROTO(( void ));
! static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
*/
#define YY_DO_BEFORE_ACTION \
! yytext_ptr = yy_bp; \
! yyleng = (int) (yy_cp - yy_bp); \
! yy_hold_char = *yy_cp; \
*yy_cp = '\0'; \
! yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 60
#define YY_END_OF_BUFFER 61
! static yyconst short int yy_accept[932] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61, 41, 41, 38, 56, 41, 56, 41, 39, 41,
*************** static yyconst flex_int16_t yy_accept[93
*** 471,477 ****
0
} ;
! static yyconst flex_int32_t yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
--- 395,401 ----
0
} ;
! static yyconst int yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
*************** static yyconst flex_int32_t yy_ec[256] =
*** 503,509 ****
1, 1, 1, 1, 1
} ;
! static yyconst flex_int32_t yy_meta[66] =
{ 0,
1, 2, 3, 1, 1, 4, 1, 5, 6, 7,
1, 1, 8, 9, 1, 1, 10, 10, 10, 10,
--- 427,433 ----
1, 1, 1, 1, 1
} ;
! static yyconst int yy_meta[66] =
{ 0,
1, 2, 3, 1, 1, 4, 1, 5, 6, 7,
1, 1, 8, 9, 1, 1, 10, 10, 10, 10,
*************** static yyconst flex_int32_t yy_meta[66]
*** 514,520 ****
10, 10, 10, 12, 1
} ;
! static yyconst flex_int16_t yy_base[1016] =
{ 0,
0, 65, 130, 11, 15, 16, 18, 19, 17, 27,
3555, 0, 40, 194, 49, 43, 35, 4014, 0, 64,
--- 438,444 ----
10, 10, 10, 12, 1
} ;
! static yyconst short int yy_base[1016] =
{ 0,
0, 65, 130, 11, 15, 16, 18, 19, 17, 27,
3555, 0, 40, 194, 49, 43, 35, 4014, 0, 64,
*************** static yyconst flex_int16_t yy_base[1016
*** 630,636 ****
3959, 3970, 3979, 3989, 4001
} ;
! static yyconst flex_int16_t yy_def[1016] =
{ 0,
932, 932, 931, 3, 933, 933, 933, 933, 934, 934,
931, 931, 931, 931, 935, 936, 937, 931, 938, 931,
--- 554,560 ----
3959, 3970, 3979, 3989, 4001
} ;
! static yyconst short int yy_def[1016] =
{ 0,
932, 932, 931, 3, 933, 933, 933, 933, 934, 934,
931, 931, 931, 931, 935, 936, 937, 931, 938, 931,
*************** static yyconst flex_int16_t yy_def[1016]
*** 746,752 ****
931, 931, 931, 931, 931
} ;
! static yyconst flex_int16_t yy_nxt[4080] =
{ 0,
12, 13, 14, 15, 12, 12, 16, 12, 12, 12,
12, 17, 18, 12, 12, 12, 49, 52, 52, 56,
--- 670,676 ----
931, 931, 931, 931, 931
} ;
! static yyconst short int yy_nxt[4080] =
{ 0,
12, 13, 14, 15, 12, 12, 16, 12, 12, 12,
12, 17, 18, 12, 12, 12, 49, 52, 52, 56,
*************** static yyconst flex_int16_t yy_nxt[4080]
*** 1198,1204 ****
931, 931, 931, 931, 931, 931, 931, 931, 931
} ;
! static yyconst flex_int16_t yy_chk[4080] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 4, 5, 6, 9,
--- 1122,1128 ----
931, 931, 931, 931, 931, 931, 931, 931, 931
} ;
! static yyconst short int yy_chk[4080] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 4, 5, 6, 9,
*************** static yyconst flex_int16_t yy_chk[4080]
*** 1653,1661 ****
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
- extern int yy_flex_debug;
- int yy_flex_debug = 0;
-
/* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed.
*/
--- 1577,1582 ----
*************** int yy_flex_debug = 0;
*** 1664,1670 ****
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
! #line 1 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* -*- indented-text -*- */
/* Process source files and output type information.
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
--- 1585,1592 ----
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
! #line 1 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
! #define INITIAL 0
/* -*- indented-text -*- */
/* Process source files and output type information.
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
*************** You should have received a copy of the G
*** 1685,1691 ****
along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
! #line 23 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
#include "bconfig.h"
#include "coretypes.h"
#include "system.h"
--- 1607,1613 ----
along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
! #line 23 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
#include "bconfig.h"
#include "coretypes.h"
#include "system.h"
*************** update_lineno (const char *l, size_t len
*** 1714,1737 ****
lexer_line.line++;
}
-
- #line 1719 "gengtype-lex.c"
-
- #define INITIAL 0
#define in_struct 1
#define in_struct_comment 2
#define in_comment 3
#define in_yacc_escape 4
! /* Special case for "unistd.h", since it is non-ANSI. We include it way
! * down here because we want the user's section 1 to have been scanned first.
! * The user has a chance to override it with an option.
! */
! #include
!
! #ifndef YY_EXTRA_TYPE
! #define YY_EXTRA_TYPE void *
! #endif
/* Macros after this point can all be overridden by user definitions in
* section 1.
--- 1636,1649 ----
lexer_line.line++;
}
#define in_struct 1
#define in_struct_comment 2
#define in_comment 3
#define in_yacc_escape 4
! #define YY_NO_UNPUT 1
! #define YY_NEVER_INTERACTIVE 1
! #line 1647 "gengtype-lex.c"
/* Macros after this point can all be overridden by user definitions in
* section 1.
*************** update_lineno (const char *l, size_t len
*** 1739,1766 ****
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
! extern "C" int yywrap (void );
#else
! extern int yywrap (void );
#endif
#endif
#ifndef yytext_ptr
! static void yy_flex_strncpy (char *,yyconst char *,int );
#endif
#ifdef YY_NEED_STRLEN
! static int yy_flex_strlen (yyconst char * );
#endif
#ifndef YY_NO_INPUT
-
#ifdef __cplusplus
! static int yyinput (void );
#else
! static int input (void );
#endif
#endif
/* Amount of stuff to slurp up with each read. */
--- 1651,1715 ----
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
! extern "C" int yywrap YY_PROTO(( void ));
#else
! extern int yywrap YY_PROTO(( void ));
! #endif
#endif
+
+ #ifndef YY_NO_UNPUT
+ static void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif
#ifndef yytext_ptr
! static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
#endif
#ifdef YY_NEED_STRLEN
! static int yy_flex_strlen YY_PROTO(( yyconst char * ));
#endif
#ifndef YY_NO_INPUT
#ifdef __cplusplus
! static int yyinput YY_PROTO(( void ));
#else
! static int input YY_PROTO(( void ));
! #endif
#endif
+ #if YY_STACK_USED
+ static int yy_start_stack_ptr = 0;
+ static int yy_start_stack_depth = 0;
+ static int *yy_start_stack = 0;
+ #ifndef YY_NO_PUSH_STATE
+ static void yy_push_state YY_PROTO(( int new_state ));
+ #endif
+ #ifndef YY_NO_POP_STATE
+ static void yy_pop_state YY_PROTO(( void ));
+ #endif
+ #ifndef YY_NO_TOP_STATE
+ static int yy_top_state YY_PROTO(( void ));
+ #endif
+
+ #else
+ #define YY_NO_PUSH_STATE 1
+ #define YY_NO_POP_STATE 1
+ #define YY_NO_TOP_STATE 1
+ #endif
+
+ #ifdef YY_MALLOC_DECL
+ YY_MALLOC_DECL
+ #else
+ #if __STDC__
+ #ifndef __cplusplus
+ #include
+ #endif
+ #else
+ /* Just try to get by without declaring the routines. This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+ #endif
#endif
/* Amount of stuff to slurp up with each read. */
*************** static int input (void );
*** 1769,1774 ****
--- 1718,1724 ----
#endif
/* Copy whatever the last rule matched to the standard output. */
+
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*************** static int input (void );
*** 1781,1790 ****
*/
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
! if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
! int c = '*'; \
! size_t n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
--- 1731,1739 ----
*/
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
! if ( yy_current_buffer->yy_is_interactive ) \
{ \
! int c = '*', n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
*************** static int input (void );
*** 1794,1815 ****
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
} \
! else \
! { \
! errno=0; \
! while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
! { \
! if( errno != EINTR) \
! { \
! YY_FATAL_ERROR( "input in flex scanner failed" ); \
! break; \
! } \
! errno=0; \
! clearerr(yyin); \
! } \
! }\
! \
!
#endif
/* No semi-colon after return; correct usage is to write "yyterminate();" -
--- 1743,1751 ----
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
} \
! else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
! && ferror( yyin ) ) \
! YY_FATAL_ERROR( "input in flex scanner failed" );
#endif
/* No semi-colon after return; correct usage is to write "yyterminate();" -
*************** static int input (void );
*** 1830,1847 ****
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif
- /* end tables serialization structures and prototypes */
-
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
! #define YY_DECL_IS_OURS 1
!
! extern int yylex (void);
!
! #define YY_DECL int yylex (void)
! #endif /* !YY_DECL */
/* Code executed at the beginning of each rule, after yytext and yyleng
* have been set up.
--- 1766,1777 ----
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
! #define YY_DECL int yylex YY_PROTO(( void ))
! #endif
/* Code executed at the beginning of each rule, after yytext and yyleng
* have been set up.
*************** extern int yylex (void);
*** 1857,1889 ****
#define YY_RULE_SETUP \
if ( yyleng > 0 ) \
! YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
(yytext[yyleng - 1] == '\n'); \
YY_USER_ACTION
- /** The main scanner function which does all the work.
- */
YY_DECL
! {
register yy_state_type yy_current_state;
register char *yy_cp, *yy_bp;
register int yy_act;
-
- #line 61 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
- #line 1876 "gengtype-lex.c"
! if ( (yy_init) )
{
! (yy_init) = 0;
#ifdef YY_USER_INIT
YY_USER_INIT;
#endif
! if ( ! (yy_start) )
! (yy_start) = 1; /* first start state */
if ( ! yyin )
yyin = stdin;
--- 1787,1817 ----
#define YY_RULE_SETUP \
if ( yyleng > 0 ) \
! yy_current_buffer->yy_at_bol = \
(yytext[yyleng - 1] == '\n'); \
YY_USER_ACTION
YY_DECL
! {
register yy_state_type yy_current_state;
register char *yy_cp, *yy_bp;
register int yy_act;
+ #line 61 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
! #line 1804 "gengtype-lex.c"
!
! if ( yy_init )
{
! yy_init = 0;
#ifdef YY_USER_INIT
YY_USER_INIT;
#endif
! if ( ! yy_start )
! yy_start = 1; /* first start state */
if ( ! yyin )
yyin = stdin;
*************** YY_DECL
*** 1891,1918 ****
if ( ! yyout )
yyout = stdout;
! if ( ! YY_CURRENT_BUFFER ) {
! yyensure_buffer_stack ();
! YY_CURRENT_BUFFER_LVALUE =
! yy_create_buffer(yyin,YY_BUF_SIZE );
! }
! yy_load_buffer_state( );
}
while ( 1 ) /* loops until end-of-file is reached */
{
! yy_cp = (yy_c_buf_p);
/* Support of yytext. */
! *yy_cp = (yy_hold_char);
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp = yy_cp;
! yy_current_state = (yy_start);
yy_current_state += YY_AT_BOL();
yy_match:
do
--- 1819,1844 ----
if ( ! yyout )
yyout = stdout;
! if ( ! yy_current_buffer )
! yy_current_buffer =
! yy_create_buffer( yyin, YY_BUF_SIZE );
! yy_load_buffer_state();
}
while ( 1 ) /* loops until end-of-file is reached */
{
! yy_cp = yy_c_buf_p;
/* Support of yytext. */
! *yy_cp = yy_hold_char;
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp = yy_cp;
! yy_current_state = yy_start;
yy_current_state += YY_AT_BOL();
yy_match:
do
*************** yy_match:
*** 1920,1927 ****
register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
if ( yy_accept[yy_current_state] )
{
! (yy_last_accepting_state) = yy_current_state;
! (yy_last_accepting_cpos) = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
--- 1846,1853 ----
register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
if ( yy_accept[yy_current_state] )
{
! yy_last_accepting_state = yy_current_state;
! yy_last_accepting_cpos = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
*************** yy_match:
*** 1932,1961 ****
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
! while ( yy_current_state != 931 );
! yy_cp = (yy_last_accepting_cpos);
! yy_current_state = (yy_last_accepting_state);
yy_find_action:
yy_act = yy_accept[yy_current_state];
YY_DO_BEFORE_ACTION;
do_action: /* This label is used only to access EOF actions. */
switch ( yy_act )
{ /* beginning of action switch */
case 0: /* must back up */
/* undo the effects of YY_DO_BEFORE_ACTION */
! *yy_cp = (yy_hold_char);
! yy_cp = (yy_last_accepting_cpos);
! yy_current_state = (yy_last_accepting_state);
goto yy_find_action;
case 1:
- /* rule 1 can match eol */
YY_RULE_SETUP
! #line 63 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *tagstart;
size_t taglen;
--- 1858,1892 ----
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
! while ( yy_base[yy_current_state] != 4014 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = yy_last_accepting_cpos;
+ yy_current_state = yy_last_accepting_state;
+ yy_act = yy_accept[yy_current_state];
+ }
YY_DO_BEFORE_ACTION;
+
do_action: /* This label is used only to access EOF actions. */
+
switch ( yy_act )
{ /* beginning of action switch */
case 0: /* must back up */
/* undo the effects of YY_DO_BEFORE_ACTION */
! *yy_cp = yy_hold_char;
! yy_cp = yy_last_accepting_cpos;
! yy_current_state = yy_last_accepting_state;
goto yy_find_action;
case 1:
YY_RULE_SETUP
! #line 63 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *tagstart;
size_t taglen;
*************** YY_RULE_SETUP
*** 1996,2004 ****
}
YY_BREAK
case 2:
- /* rule 2 can match eol */
YY_RULE_SETUP
! #line 102 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *namestart;
--- 1927,1934 ----
}
YY_BREAK
case 2:
YY_RULE_SETUP
! #line 102 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *namestart;
*************** YY_RULE_SETUP
*** 2028,2036 ****
}
YY_BREAK
case 3:
- /* rule 3 can match eol */
YY_RULE_SETUP
! #line 130 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *namestart;
size_t namelen;
--- 1958,1965 ----
}
YY_BREAK
case 3:
YY_RULE_SETUP
! #line 130 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *namestart;
size_t namelen;
*************** YY_RULE_SETUP
*** 2049,2057 ****
}
YY_BREAK
case 4:
- /* rule 4 can match eol */
YY_RULE_SETUP
! #line 147 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *namestart;
size_t namelen;
--- 1978,1985 ----
}
YY_BREAK
case 4:
YY_RULE_SETUP
! #line 147 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *namestart;
size_t namelen;
*************** YY_RULE_SETUP
*** 2070,2078 ****
}
YY_BREAK
case 5:
- /* rule 5 can match eol */
YY_RULE_SETUP
! #line 164 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *namestart;
size_t namelen;
--- 1998,2005 ----
}
YY_BREAK
case 5:
YY_RULE_SETUP
! #line 164 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *namestart;
size_t namelen;
*************** YY_RULE_SETUP
*** 2091,2099 ****
}
YY_BREAK
case 6:
- /* rule 6 can match eol */
YY_RULE_SETUP
! #line 181 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *namestart;
size_t namelen;
--- 2018,2025 ----
}
YY_BREAK
case 6:
YY_RULE_SETUP
! #line 181 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *namestart;
size_t namelen;
*************** YY_RULE_SETUP
*** 2112,2123 ****
}
YY_BREAK
case 7:
! /* rule 7 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp -= 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 198 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *tagstart;
size_t taglen;
--- 2038,2048 ----
}
YY_BREAK
case 7:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp -= 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 198 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *tagstart;
size_t taglen;
*************** YY_RULE_SETUP
*** 2149,2160 ****
}
YY_BREAK
case 8:
! /* rule 8 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp -= 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 228 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
update_lineno (yytext, yyleng);
--- 2074,2084 ----
}
YY_BREAK
case 8:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp -= 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 228 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
update_lineno (yytext, yyleng);
*************** YY_RULE_SETUP
*** 2162,2173 ****
}
YY_BREAK
case 9:
! /* rule 9 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp -= 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 234 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
update_lineno (yytext, yyleng);
--- 2086,2096 ----
}
YY_BREAK
case 9:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp -= 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 234 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
update_lineno (yytext, yyleng);
*************** YY_RULE_SETUP
*** 2175,2183 ****
}
YY_BREAK
case 10:
- /* rule 10 can match eol */
YY_RULE_SETUP
! #line 240 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *macro, *arg;
unsigned macro_len, arg_len;
--- 2098,2105 ----
}
YY_BREAK
case 10:
YY_RULE_SETUP
! #line 240 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *macro, *arg;
unsigned macro_len, arg_len;
*************** YY_RULE_SETUP
*** 2210,2324 ****
case 11:
YY_RULE_SETUP
! #line 271 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ BEGIN(in_struct_comment); }
YY_BREAK
case 12:
YY_RULE_SETUP
! #line 273 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ BEGIN(in_yacc_escape); } /* } */
YY_BREAK
case 13:
YY_RULE_SETUP
! #line 275 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* Used for c-parse.in C/ObjC demarcation. */
YY_BREAK
case 14:
- /* rule 14 can match eol */
YY_RULE_SETUP
! #line 277 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ update_lineno (yytext, yyleng); }
YY_BREAK
case 15:
! /* rule 15 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 279 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* don't care */
YY_BREAK
case 16:
! /* rule 16 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 280 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ return GTY_TOKEN; }
YY_BREAK
case 17:
! /* rule 17 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 281 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ return UNION; }
YY_BREAK
case 18:
! /* rule 18 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 282 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ return STRUCT; }
YY_BREAK
case 19:
! /* rule 19 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 283 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ return ENUM; }
YY_BREAK
case 20:
! /* rule 20 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 9;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 284 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ return ALIAS; }
YY_BREAK
case 21:
! /* rule 21 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 10;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 285 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ return NESTED_PTR; }
YY_BREAK
case 22:
YY_RULE_SETUP
! #line 286 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ return NUM; }
YY_BREAK
case 23:
! /* rule 23 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 287 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext, yyleng, yyleng+1);
return PARAM_IS;
}
YY_BREAK
case 24:
! /* rule 24 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 293 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
case 25:
- /* rule 25 can match eol */
YY_RULE_SETUP
! #line 293 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
size_t len;
--- 2132,2235 ----
case 11:
YY_RULE_SETUP
! #line 271 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ BEGIN(in_struct_comment); }
YY_BREAK
case 12:
YY_RULE_SETUP
! #line 273 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ BEGIN(in_yacc_escape); } /* } */
YY_BREAK
case 13:
YY_RULE_SETUP
! #line 275 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* Used for c-parse.in C/ObjC demarcation. */
YY_BREAK
case 14:
YY_RULE_SETUP
! #line 277 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ update_lineno (yytext, yyleng); }
YY_BREAK
case 15:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 279 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* don't care */
YY_BREAK
case 16:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 280 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ return GTY_TOKEN; }
YY_BREAK
case 17:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 281 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ return UNION; }
YY_BREAK
case 18:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 282 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ return STRUCT; }
YY_BREAK
case 19:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 283 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ return ENUM; }
YY_BREAK
case 20:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 9;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 284 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ return ALIAS; }
YY_BREAK
case 21:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 10;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 285 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ return NESTED_PTR; }
YY_BREAK
case 22:
YY_RULE_SETUP
! #line 286 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ return NUM; }
YY_BREAK
case 23:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 287 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext, yyleng, yyleng+1);
return PARAM_IS;
}
YY_BREAK
case 24:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 293 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
case 25:
YY_RULE_SETUP
! #line 293 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
size_t len;
*************** YY_RULE_SETUP
*** 2331,2339 ****
}
YY_BREAK
case 26:
- /* rule 26 can match eol */
YY_RULE_SETUP
! #line 304 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
char *macro, *arg;
unsigned macro_len, arg_len;
--- 2242,2249 ----
}
YY_BREAK
case 26:
YY_RULE_SETUP
! #line 304 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
char *macro, *arg;
unsigned macro_len, arg_len;
*************** YY_RULE_SETUP
*** 2357,2386 ****
}
YY_BREAK
case 27:
! /* rule 27 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 326 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext, yyleng, yyleng+1);
return ID;
}
YY_BREAK
case 28:
- /* rule 28 can match eol */
YY_RULE_SETUP
! #line 331 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext+1, yyleng-2, yyleng-1);
return STRING;
}
YY_BREAK
case 29:
- /* rule 29 can match eol */
YY_RULE_SETUP
! #line 335 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext+1, yyleng-2, yyleng-1);
return ARRAY;
--- 2267,2293 ----
}
YY_BREAK
case 27:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 326 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext, yyleng, yyleng+1);
return ID;
}
YY_BREAK
case 28:
YY_RULE_SETUP
! #line 331 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext+1, yyleng-2, yyleng-1);
return STRING;
}
YY_BREAK
case 29:
YY_RULE_SETUP
! #line 335 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext+1, yyleng-2, yyleng-1);
return ARRAY;
*************** YY_RULE_SETUP
*** 2388,2403 ****
YY_BREAK
case 30:
YY_RULE_SETUP
! #line 339 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext+1, yyleng-1, yyleng);
return PERCENT_ID;
}
YY_BREAK
case 31:
- /* rule 31 can match eol */
YY_RULE_SETUP
! #line 343 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext+1, yyleng-2, yyleng);
return CHAR;
--- 2295,2309 ----
YY_BREAK
case 30:
YY_RULE_SETUP
! #line 339 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext+1, yyleng-1, yyleng);
return PERCENT_ID;
}
YY_BREAK
case 31:
YY_RULE_SETUP
! #line 343 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
yylval.s = (const char *) xmemdup (yytext+1, yyleng-2, yyleng);
return CHAR;
*************** YY_RULE_SETUP
*** 2405,2416 ****
YY_BREAK
case 32:
YY_RULE_SETUP
! #line 348 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ return yytext[0]; }
YY_BREAK
case 33:
YY_RULE_SETUP
! #line 350 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
if (lexer_toplevel_done)
{
--- 2311,2322 ----
YY_BREAK
case 32:
YY_RULE_SETUP
! #line 348 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ return yytext[0]; }
YY_BREAK
case 33:
YY_RULE_SETUP
! #line 350 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
if (lexer_toplevel_done)
{
*************** YY_RULE_SETUP
*** 2422,2442 ****
YY_BREAK
case 34:
YY_RULE_SETUP
! #line 359 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
BEGIN(INITIAL);
return PERCENTPERCENT;
}
YY_BREAK
case 35:
- /* rule 35 can match eol */
YY_RULE_SETUP
! #line 364 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{lexer_line.line++;}
YY_BREAK
case 36:
YY_RULE_SETUP
! #line 366 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line, "unexpected character `%s'", yytext);
}
--- 2328,2347 ----
YY_BREAK
case 34:
YY_RULE_SETUP
! #line 359 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
BEGIN(INITIAL);
return PERCENTPERCENT;
}
YY_BREAK
case 35:
YY_RULE_SETUP
! #line 364 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{lexer_line.line++;}
YY_BREAK
case 36:
YY_RULE_SETUP
! #line 366 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line, "unexpected character `%s'", yytext);
}
*************** YY_RULE_SETUP
*** 2444,2551 ****
case 37:
YY_RULE_SETUP
! #line 371 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ BEGIN(in_comment); }
YY_BREAK
case 38:
- /* rule 38 can match eol */
YY_RULE_SETUP
! #line 372 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 39:
! #line 374 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
case 40:
! /* rule 40 can match eol */
! #line 375 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
case 41:
- /* rule 41 can match eol */
YY_RULE_SETUP
! #line 375 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 42:
- /* rule 42 can match eol */
YY_RULE_SETUP
! #line 376 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ update_lineno (yytext, yyleng); }
YY_BREAK
case 43:
! /* rule 43 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 377 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 44:
- /* rule 44 can match eol */
YY_RULE_SETUP
! #line 380 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 45:
! #line 382 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
case 46:
YY_RULE_SETUP
! #line 382 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 47:
! /* rule 47 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 383 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 48:
YY_RULE_SETUP
! #line 385 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ BEGIN(INITIAL); }
YY_BREAK
case 49:
YY_RULE_SETUP
! #line 386 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ BEGIN(in_struct); }
YY_BREAK
case 50:
- /* rule 50 can match eol */
YY_RULE_SETUP
! #line 389 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 51:
! /* rule 51 can match eol */
! #line 391 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
case 52:
- /* rule 52 can match eol */
YY_RULE_SETUP
! #line 391 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 53:
! /* rule 53 can match eol */
! *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
! (yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 392 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 54:
YY_RULE_SETUP
! #line 393 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{ BEGIN(in_struct); }
YY_BREAK
case 55:
YY_RULE_SETUP
! #line 394 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line,
"unterminated %%{; unexpected EOF");
--- 2349,2445 ----
case 37:
YY_RULE_SETUP
! #line 371 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ BEGIN(in_comment); }
YY_BREAK
case 38:
YY_RULE_SETUP
! #line 372 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 39:
! #line 374 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
case 40:
! #line 375 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
case 41:
YY_RULE_SETUP
! #line 375 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 42:
YY_RULE_SETUP
! #line 376 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ update_lineno (yytext, yyleng); }
YY_BREAK
case 43:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 377 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 44:
YY_RULE_SETUP
! #line 380 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 45:
! #line 382 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
case 46:
YY_RULE_SETUP
! #line 382 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 47:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 383 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 48:
YY_RULE_SETUP
! #line 385 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ BEGIN(INITIAL); }
YY_BREAK
case 49:
YY_RULE_SETUP
! #line 386 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ BEGIN(in_struct); }
YY_BREAK
case 50:
YY_RULE_SETUP
! #line 389 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 51:
! #line 391 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
case 52:
YY_RULE_SETUP
! #line 391 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 53:
! *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
! yy_c_buf_p = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
! #line 392 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 54:
YY_RULE_SETUP
! #line 393 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{ BEGIN(in_struct); }
YY_BREAK
case 55:
YY_RULE_SETUP
! #line 394 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line,
"unterminated %%{; unexpected EOF");
*************** YY_RULE_SETUP
*** 2553,2587 ****
YY_BREAK
case 56:
! #line 402 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
case 57:
YY_RULE_SETUP
! #line 402 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line,
"unterminated comment or string; unexpected EOF");
}
YY_BREAK
case 58:
- /* rule 58 can match eol */
YY_RULE_SETUP
! #line 407 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 59:
- /* rule 59 can match eol */
YY_RULE_SETUP
! #line 408 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line, "stray GTY marker");
}
YY_BREAK
case 60:
YY_RULE_SETUP
! #line 412 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
! #line 2585 "gengtype-lex.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(in_struct):
case YY_STATE_EOF(in_struct_comment):
--- 2447,2479 ----
YY_BREAK
case 56:
! #line 402 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
case 57:
YY_RULE_SETUP
! #line 402 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line,
"unterminated comment or string; unexpected EOF");
}
YY_BREAK
case 58:
YY_RULE_SETUP
! #line 407 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 59:
YY_RULE_SETUP
! #line 408 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line, "stray GTY marker");
}
YY_BREAK
case 60:
YY_RULE_SETUP
! #line 412 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
! #line 2477 "gengtype-lex.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(in_struct):
case YY_STATE_EOF(in_struct_comment):
*************** case YY_STATE_EOF(in_yacc_escape):
*** 2592,2617 ****
case YY_END_OF_BUFFER:
{
/* Amount of text matched not including the EOB char. */
! int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
! *yy_cp = (yy_hold_char);
YY_RESTORE_YY_MORE_OFFSET
! if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
{
/* We're scanning a new file or input source. It's
* possible that this happened because the user
* just pointed yyin at a new source and called
* yylex(). If so, then we have to assure
! * consistency between YY_CURRENT_BUFFER and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
! (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
! YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
! YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
}
/* Note that here we test for yy_c_buf_p "<=" to the position
--- 2484,2509 ----
case YY_END_OF_BUFFER:
{
/* Amount of text matched not including the EOB char. */
! int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
! *yy_cp = yy_hold_char;
YY_RESTORE_YY_MORE_OFFSET
! if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
{
/* We're scanning a new file or input source. It's
* possible that this happened because the user
* just pointed yyin at a new source and called
* yylex(). If so, then we have to assure
! * consistency between yy_current_buffer and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
! yy_n_chars = yy_current_buffer->yy_n_chars;
! yy_current_buffer->yy_input_file = yyin;
! yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
}
/* Note that here we test for yy_c_buf_p "<=" to the position
*************** case YY_STATE_EOF(in_yacc_escape):
*** 2621,2633 ****
* end-of-buffer state). Contrast this with the test
* in input().
*/
! if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
{ /* This was really a NUL. */
yy_state_type yy_next_state;
! (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
! yy_current_state = yy_get_previous_state( );
/* Okay, we're now positioned to make the NUL
* transition. We couldn't have
--- 2513,2525 ----
* end-of-buffer state). Contrast this with the test
* in input().
*/
! if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
{ /* This was really a NUL. */
yy_state_type yy_next_state;
! yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
! yy_current_state = yy_get_previous_state();
/* Okay, we're now positioned to make the NUL
* transition. We couldn't have
*************** case YY_STATE_EOF(in_yacc_escape):
*** 2640,2670 ****
yy_next_state = yy_try_NUL_trans( yy_current_state );
! yy_bp = (yytext_ptr) + YY_MORE_ADJ;
if ( yy_next_state )
{
/* Consume the NUL. */
! yy_cp = ++(yy_c_buf_p);
yy_current_state = yy_next_state;
goto yy_match;
}
else
{
! yy_cp = (yy_last_accepting_cpos);
! yy_current_state = (yy_last_accepting_state);
goto yy_find_action;
}
}
! else switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_END_OF_FILE:
{
! (yy_did_buffer_switch_on_eof) = 0;
! if ( yywrap( ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
--- 2532,2561 ----
yy_next_state = yy_try_NUL_trans( yy_current_state );
! yy_bp = yytext_ptr + YY_MORE_ADJ;
if ( yy_next_state )
{
/* Consume the NUL. */
! yy_cp = ++yy_c_buf_p;
yy_current_state = yy_next_state;
goto yy_match;
}
else
{
! yy_cp = yy_c_buf_p;
goto yy_find_action;
}
}
! else switch ( yy_get_next_buffer() )
{
case EOB_ACT_END_OF_FILE:
{
! yy_did_buffer_switch_on_eof = 0;
! if ( yywrap() )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
*************** case YY_STATE_EOF(in_yacc_escape):
*** 2675,2681 ****
* YY_NULL, it'll still work - another
* YY_NULL will get returned.
*/
! (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
yy_act = YY_STATE_EOF(YY_START);
goto do_action;
--- 2566,2572 ----
* YY_NULL, it'll still work - another
* YY_NULL will get returned.
*/
! yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
yy_act = YY_STATE_EOF(YY_START);
goto do_action;
*************** case YY_STATE_EOF(in_yacc_escape):
*** 2683,2712 ****
else
{
! if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
}
break;
}
case EOB_ACT_CONTINUE_SCAN:
! (yy_c_buf_p) =
! (yytext_ptr) + yy_amount_of_matched_text;
! yy_current_state = yy_get_previous_state( );
! yy_cp = (yy_c_buf_p);
! yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_match;
case EOB_ACT_LAST_MATCH:
! (yy_c_buf_p) =
! &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
! yy_current_state = yy_get_previous_state( );
! yy_cp = (yy_c_buf_p);
! yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_find_action;
}
break;
--- 2574,2603 ----
else
{
! if ( ! yy_did_buffer_switch_on_eof )
YY_NEW_FILE;
}
break;
}
case EOB_ACT_CONTINUE_SCAN:
! yy_c_buf_p =
! yytext_ptr + yy_amount_of_matched_text;
! yy_current_state = yy_get_previous_state();
! yy_cp = yy_c_buf_p;
! yy_bp = yytext_ptr + YY_MORE_ADJ;
goto yy_match;
case EOB_ACT_LAST_MATCH:
! yy_c_buf_p =
! &yy_current_buffer->yy_ch_buf[yy_n_chars];
! yy_current_state = yy_get_previous_state();
! yy_cp = yy_c_buf_p;
! yy_bp = yytext_ptr + YY_MORE_ADJ;
goto yy_find_action;
}
break;
*************** case YY_STATE_EOF(in_yacc_escape):
*** 2717,2723 ****
"fatal flex scanner internal error--no action found" );
} /* end of action switch */
} /* end of scanning one token */
! } /* end of yylex */
/* yy_get_next_buffer - try to read in a new buffer
*
--- 2608,2615 ----
"fatal flex scanner internal error--no action found" );
} /* end of action switch */
} /* end of scanning one token */
! } /* end of yylex */
!
/* yy_get_next_buffer - try to read in a new buffer
*
*************** case YY_STATE_EOF(in_yacc_escape):
*** 2726,2745 ****
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
* EOB_ACT_END_OF_FILE - end of file
*/
! static int yy_get_next_buffer (void)
! {
! register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
! register char *source = (yytext_ptr);
register int number_to_move, i;
int ret_val;
! if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
YY_FATAL_ERROR(
"fatal flex scanner internal error--end of buffer missed" );
! if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
{ /* Don't try to fill the buffer, so this is an EOF. */
! if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
{
/* We matched a single character, the EOB, so
* treat this as a final EOF.
--- 2618,2638 ----
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
* EOB_ACT_END_OF_FILE - end of file
*/
!
! static int yy_get_next_buffer()
! {
! register char *dest = yy_current_buffer->yy_ch_buf;
! register char *source = yytext_ptr;
register int number_to_move, i;
int ret_val;
! if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
YY_FATAL_ERROR(
"fatal flex scanner internal error--end of buffer missed" );
! if ( yy_current_buffer->yy_fill_buffer == 0 )
{ /* Don't try to fill the buffer, so this is an EOF. */
! if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
{
/* We matched a single character, the EOB, so
* treat this as a final EOF.
*************** static int yy_get_next_buffer (void)
*** 2759,2788 ****
/* Try to read more data. */
/* First move last chars to start of buffer. */
! number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
! if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
! YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
else
{
! size_t num_to_read =
! YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{ /* Not enough room in the buffer - grow it. */
/* just a shorter name for the current buffer */
! YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
int yy_c_buf_p_offset =
! (int) ((yy_c_buf_p) - b->yy_ch_buf);
if ( b->yy_is_our_buffer )
{
--- 2652,2685 ----
/* Try to read more data. */
/* First move last chars to start of buffer. */
! number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
! if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
! yy_current_buffer->yy_n_chars = yy_n_chars = 0;
else
{
! int num_to_read =
! yy_current_buffer->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{ /* Not enough room in the buffer - grow it. */
+ #ifdef YY_USES_REJECT
+ YY_FATAL_ERROR(
+ "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+ #else
/* just a shorter name for the current buffer */
! YY_BUFFER_STATE b = yy_current_buffer;
int yy_c_buf_p_offset =
! (int) (yy_c_buf_p - b->yy_ch_buf);
if ( b->yy_is_our_buffer )
{
*************** static int yy_get_next_buffer (void)
*** 2795,2801 ****
b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */
! yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
}
else
/* Can't grow it, we don't own it. */
--- 2692,2699 ----
b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */
! yy_flex_realloc( (void *) b->yy_ch_buf,
! b->yy_buf_size + 2 );
}
else
/* Can't grow it, we don't own it. */
*************** static int yy_get_next_buffer (void)
*** 2805,2839 ****
YY_FATAL_ERROR(
"fatal error - scanner input buffer overflow" );
! (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
! num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
number_to_move - 1;
!
}
if ( num_to_read > YY_READ_BUF_SIZE )
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
! YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
! (yy_n_chars), num_to_read );
! YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
! if ( (yy_n_chars) == 0 )
{
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
! yyrestart(yyin );
}
else
{
ret_val = EOB_ACT_LAST_MATCH;
! YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
YY_BUFFER_EOF_PENDING;
}
}
--- 2703,2737 ----
YY_FATAL_ERROR(
"fatal error - scanner input buffer overflow" );
! yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
! num_to_read = yy_current_buffer->yy_buf_size -
number_to_move - 1;
! #endif
}
if ( num_to_read > YY_READ_BUF_SIZE )
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
! YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
! yy_n_chars, num_to_read );
! yy_current_buffer->yy_n_chars = yy_n_chars;
}
! if ( yy_n_chars == 0 )
{
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
! yyrestart( yyin );
}
else
{
ret_val = EOB_ACT_LAST_MATCH;
! yy_current_buffer->yy_buffer_status =
YY_BUFFER_EOF_PENDING;
}
}
*************** static int yy_get_next_buffer (void)
*** 2841,2872 ****
else
ret_val = EOB_ACT_CONTINUE_SCAN;
! (yy_n_chars) += number_to_move;
! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
! (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
return ret_val;
! }
/* yy_get_previous_state - get the state just before the EOB char was reached */
! static yy_state_type yy_get_previous_state (void)
! {
register yy_state_type yy_current_state;
register char *yy_cp;
!
! yy_current_state = (yy_start);
yy_current_state += YY_AT_BOL();
! for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
{
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if ( yy_accept[yy_current_state] )
{
! (yy_last_accepting_state) = yy_current_state;
! (yy_last_accepting_cpos) = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
--- 2739,2771 ----
else
ret_val = EOB_ACT_CONTINUE_SCAN;
! yy_n_chars += number_to_move;
! yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
! yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
! yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
return ret_val;
! }
!
/* yy_get_previous_state - get the state just before the EOB char was reached */
! static yy_state_type yy_get_previous_state()
! {
register yy_state_type yy_current_state;
register char *yy_cp;
!
! yy_current_state = yy_start;
yy_current_state += YY_AT_BOL();
! for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
{
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if ( yy_accept[yy_current_state] )
{
! yy_last_accepting_state = yy_current_state;
! yy_last_accepting_cpos = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
*************** static int yy_get_next_buffer (void)
*** 2878,2900 ****
}
return yy_current_state;
! }
/* yy_try_NUL_trans - try to make a transition on the NUL character
*
* synopsis
* next_state = yy_try_NUL_trans( current_state );
*/
! static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
! {
register int yy_is_jam;
! register char *yy_cp = (yy_c_buf_p);
register YY_CHAR yy_c = 1;
if ( yy_accept[yy_current_state] )
{
! (yy_last_accepting_state) = yy_current_state;
! (yy_last_accepting_cpos) = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
--- 2777,2806 ----
}
return yy_current_state;
! }
!
/* yy_try_NUL_trans - try to make a transition on the NUL character
*
* synopsis
* next_state = yy_try_NUL_trans( current_state );
*/
!
! #ifdef YY_USE_PROTOS
! static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
! #else
! static yy_state_type yy_try_NUL_trans( yy_current_state )
! yy_state_type yy_current_state;
! #endif
! {
register int yy_is_jam;
! register char *yy_cp = yy_c_buf_p;
register YY_CHAR yy_c = 1;
if ( yy_accept[yy_current_state] )
{
! yy_last_accepting_state = yy_current_state;
! yy_last_accepting_cpos = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
*************** static int yy_get_next_buffer (void)
*** 2906,2941 ****
yy_is_jam = (yy_current_state == 931);
return yy_is_jam ? 0 : yy_current_state;
! }
! #ifndef YY_NO_INPUT
! #ifdef __cplusplus
! static int yyinput (void)
#else
! static int input (void)
#endif
! {
int c;
-
- *(yy_c_buf_p) = (yy_hold_char);
! if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
{
/* yy_c_buf_p now points to the character we want to return.
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
! if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
/* This was really a NUL. */
! *(yy_c_buf_p) = '\0';
else
{ /* need more input */
! int offset = (yy_c_buf_p) - (yytext_ptr);
! ++(yy_c_buf_p);
! switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_LAST_MATCH:
/* This happens because yy_g_n_b()
--- 2812,2891 ----
yy_is_jam = (yy_current_state == 931);
return yy_is_jam ? 0 : yy_current_state;
! }
!
! #ifndef YY_NO_UNPUT
! #ifdef YY_USE_PROTOS
! static void yyunput( int c, register char *yy_bp )
#else
! static void yyunput( c, yy_bp )
! int c;
! register char *yy_bp;
#endif
+ {
+ register char *yy_cp = yy_c_buf_p;
! /* undo effects of setting up yytext */
! *yy_cp = yy_hold_char;
!
! if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
! { /* need to shift things up to make room */
! /* +2 for EOB chars. */
! register int number_to_move = yy_n_chars + 2;
! register char *dest = &yy_current_buffer->yy_ch_buf[
! yy_current_buffer->yy_buf_size + 2];
! register char *source =
! &yy_current_buffer->yy_ch_buf[number_to_move];
!
! while ( source > yy_current_buffer->yy_ch_buf )
! *--dest = *--source;
!
! yy_cp += (int) (dest - source);
! yy_bp += (int) (dest - source);
! yy_current_buffer->yy_n_chars =
! yy_n_chars = yy_current_buffer->yy_buf_size;
!
! if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
! YY_FATAL_ERROR( "flex scanner push-back overflow" );
! }
!
! *--yy_cp = (char) c;
!
!
! yytext_ptr = yy_bp;
! yy_hold_char = *yy_cp;
! yy_c_buf_p = yy_cp;
! }
! #endif /* ifndef YY_NO_UNPUT */
!
!
! #ifdef __cplusplus
! static int yyinput()
! #else
! static int input()
! #endif
! {
int c;
! *yy_c_buf_p = yy_hold_char;
!
! if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
{
/* yy_c_buf_p now points to the character we want to return.
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
! if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
/* This was really a NUL. */
! *yy_c_buf_p = '\0';
else
{ /* need more input */
! int offset = yy_c_buf_p - yytext_ptr;
! ++yy_c_buf_p;
! switch ( yy_get_next_buffer() )
{
case EOB_ACT_LAST_MATCH:
/* This happens because yy_g_n_b()
*************** static int yy_get_next_buffer (void)
*** 2949,2964 ****
*/
/* Reset buffer status. */
! yyrestart(yyin );
! /*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE:
{
! if ( yywrap( ) )
return EOF;
! if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
#ifdef __cplusplus
return yyinput();
--- 2899,2914 ----
*/
/* Reset buffer status. */
! yyrestart( yyin );
! /* fall through */
case EOB_ACT_END_OF_FILE:
{
! if ( yywrap() )
return EOF;
! if ( ! yy_did_buffer_switch_on_eof )
YY_NEW_FILE;
#ifdef __cplusplus
return yyinput();
*************** static int yy_get_next_buffer (void)
*** 2968,3061 ****
}
case EOB_ACT_CONTINUE_SCAN:
! (yy_c_buf_p) = (yytext_ptr) + offset;
break;
}
}
}
! c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
! *(yy_c_buf_p) = '\0'; /* preserve yytext */
! (yy_hold_char) = *++(yy_c_buf_p);
! YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
return c;
! }
! #endif /* ifndef YY_NO_INPUT */
! /** Immediately switch to a different input stream.
! * @param input_file A readable stream.
! *
! * @note This function does not reset the start condition to @c INITIAL .
! */
! void yyrestart (FILE * input_file )
! {
!
! if ( ! YY_CURRENT_BUFFER ){
! yyensure_buffer_stack ();
! YY_CURRENT_BUFFER_LVALUE =
! yy_create_buffer(yyin,YY_BUF_SIZE );
}
- yy_init_buffer(YY_CURRENT_BUFFER,input_file );
- yy_load_buffer_state( );
- }
! /** Switch to a different input buffer.
! * @param new_buffer The new input buffer.
! *
! */
! void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
! {
!
! /* TODO. We should be able to replace this entire function body
! * with
! * yypop_buffer_state();
! * yypush_buffer_state(new_buffer);
! */
! yyensure_buffer_stack ();
! if ( YY_CURRENT_BUFFER == new_buffer )
return;
! if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
! *(yy_c_buf_p) = (yy_hold_char);
! YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
! YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
! YY_CURRENT_BUFFER_LVALUE = new_buffer;
! yy_load_buffer_state( );
/* We don't actually know whether we did this switch during
* EOF (yywrap()) processing, but the only time this flag
* is looked at is after yywrap() is called, so it's safe
* to go ahead and always set it.
*/
! (yy_did_buffer_switch_on_eof) = 1;
! }
- static void yy_load_buffer_state (void)
- {
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
- yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
- (yy_hold_char) = *(yy_c_buf_p);
- }
! /** Allocate and initialize an input buffer state.
! * @param file A readable stream.
! * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
! *
! * @return the allocated buffer state.
! */
! YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
! {
YY_BUFFER_STATE b;
!
! b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
--- 2918,3008 ----
}
case EOB_ACT_CONTINUE_SCAN:
! yy_c_buf_p = yytext_ptr + offset;
break;
}
}
}
! c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
! *yy_c_buf_p = '\0'; /* preserve yytext */
! yy_hold_char = *++yy_c_buf_p;
! yy_current_buffer->yy_at_bol = (c == '\n');
return c;
! }
!
! #ifdef YY_USE_PROTOS
! void yyrestart( FILE *input_file )
! #else
! void yyrestart( input_file )
! FILE *input_file;
! #endif
! {
! if ( ! yy_current_buffer )
! yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
!
! yy_init_buffer( yy_current_buffer, input_file );
! yy_load_buffer_state();
}
! #ifdef YY_USE_PROTOS
! void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
! #else
! void yy_switch_to_buffer( new_buffer )
! YY_BUFFER_STATE new_buffer;
! #endif
! {
! if ( yy_current_buffer == new_buffer )
return;
! if ( yy_current_buffer )
{
/* Flush out information for old buffer. */
! *yy_c_buf_p = yy_hold_char;
! yy_current_buffer->yy_buf_pos = yy_c_buf_p;
! yy_current_buffer->yy_n_chars = yy_n_chars;
}
! yy_current_buffer = new_buffer;
! yy_load_buffer_state();
/* We don't actually know whether we did this switch during
* EOF (yywrap()) processing, but the only time this flag
* is looked at is after yywrap() is called, so it's safe
* to go ahead and always set it.
*/
! yy_did_buffer_switch_on_eof = 1;
! }
! #ifdef YY_USE_PROTOS
! void yy_load_buffer_state( void )
! #else
! void yy_load_buffer_state()
! #endif
! {
! yy_n_chars = yy_current_buffer->yy_n_chars;
! yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
! yyin = yy_current_buffer->yy_input_file;
! yy_hold_char = *yy_c_buf_p;
! }
!
!
! #ifdef YY_USE_PROTOS
! YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
! #else
! YY_BUFFER_STATE yy_create_buffer( file, size )
! FILE *file;
! int size;
! #endif
! {
YY_BUFFER_STATE b;
!
! b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
*************** static void yy_load_buffer_state (void)
*** 3064,3134 ****
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
! b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
! yy_init_buffer(b,file );
return b;
! }
! /** Destroy the buffer.
! * @param b a buffer created with yy_create_buffer()
! *
! */
! void yy_delete_buffer (YY_BUFFER_STATE b )
! {
!
if ( ! b )
return;
! if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
! YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
! yyfree((void *) b->yy_ch_buf );
! yyfree((void *) b );
! }
- /* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
- */
- static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
! {
! int oerrno = errno;
!
! yy_flush_buffer(b );
b->yy_input_file = file;
b->yy_fill_buffer = 1;
! /* If b is the current buffer, then yy_init_buffer was _probably_
! * called from yyrestart() or through yy_get_next_buffer.
! * In that case, we don't want to reset the lineno or column.
! */
! if (b != YY_CURRENT_BUFFER){
! b->yy_bs_lineno = 1;
! b->yy_bs_column = 0;
! }
- b->yy_is_interactive = 0;
-
- errno = oerrno;
- }
! /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
! * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
! *
! */
! void yy_flush_buffer (YY_BUFFER_STATE b )
! {
! if ( ! b )
return;
b->yy_n_chars = 0;
--- 3011,3090 ----
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
! b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
! yy_init_buffer( b, file );
return b;
! }
!
! #ifdef YY_USE_PROTOS
! void yy_delete_buffer( YY_BUFFER_STATE b )
! #else
! void yy_delete_buffer( b )
! YY_BUFFER_STATE b;
! #endif
! {
if ( ! b )
return;
! if ( b == yy_current_buffer )
! yy_current_buffer = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
! yy_flex_free( (void *) b->yy_ch_buf );
! yy_flex_free( (void *) b );
! }
! #ifndef YY_ALWAYS_INTERACTIVE
! #ifndef YY_NEVER_INTERACTIVE
! extern int isatty YY_PROTO(( int ));
! #endif
! #endif
!
! #ifdef YY_USE_PROTOS
! void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
! #else
! void yy_init_buffer( b, file )
! YY_BUFFER_STATE b;
! FILE *file;
! #endif
!
!
! {
! yy_flush_buffer( b );
b->yy_input_file = file;
b->yy_fill_buffer = 1;
! #if YY_ALWAYS_INTERACTIVE
! b->yy_is_interactive = 1;
! #else
! #if YY_NEVER_INTERACTIVE
! b->yy_is_interactive = 0;
! #else
! b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
! #endif
! #endif
! }
! #ifdef YY_USE_PROTOS
! void yy_flush_buffer( YY_BUFFER_STATE b )
! #else
! void yy_flush_buffer( b )
! YY_BUFFER_STATE b;
! #endif
!
! {
! if ( ! b )
return;
b->yy_n_chars = 0;
*************** static void yy_load_buffer_state (void)
*** 3145,3265 ****
b->yy_at_bol = 1;
b->yy_buffer_status = YY_BUFFER_NEW;
! if ( b == YY_CURRENT_BUFFER )
! yy_load_buffer_state( );
! }
!
! /** Pushes the new state onto the stack. The new state becomes
! * the current state. This function will allocate the stack
! * if necessary.
! * @param new_buffer The new state.
! *
! */
! void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
! {
! if (new_buffer == NULL)
! return;
!
! yyensure_buffer_stack();
!
! /* This block is copied from yy_switch_to_buffer. */
! if ( YY_CURRENT_BUFFER )
! {
! /* Flush out information for old buffer. */
! *(yy_c_buf_p) = (yy_hold_char);
! YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
! YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
! }
!
! /* Only push if top exists. Otherwise, replace top. */
! if (YY_CURRENT_BUFFER)
! (yy_buffer_stack_top)++;
! YY_CURRENT_BUFFER_LVALUE = new_buffer;
!
! /* copied from yy_switch_to_buffer. */
! yy_load_buffer_state( );
! (yy_did_buffer_switch_on_eof) = 1;
! }
!
! /** Removes and deletes the top of the stack, if present.
! * The next element becomes the new top.
! *
! */
! void yypop_buffer_state (void)
! {
! if (!YY_CURRENT_BUFFER)
! return;
!
! yy_delete_buffer(YY_CURRENT_BUFFER );
! YY_CURRENT_BUFFER_LVALUE = NULL;
! if ((yy_buffer_stack_top) > 0)
! --(yy_buffer_stack_top);
!
! if (YY_CURRENT_BUFFER) {
! yy_load_buffer_state( );
! (yy_did_buffer_switch_on_eof) = 1;
! }
! }
!
! /* Allocates the stack if it does not exist.
! * Guarantees space for at least one push.
! */
! static void yyensure_buffer_stack (void)
! {
! int num_to_alloc;
!
! if (!(yy_buffer_stack)) {
!
! /* First allocation is just for 2 elements, since we don't know if this
! * scanner will even need a stack. We use 2 instead of 1 to avoid an
! * immediate realloc on the next call.
! */
! num_to_alloc = 1;
! (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
! (num_to_alloc * sizeof(struct yy_buffer_state*)
! );
!
! memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
!
! (yy_buffer_stack_max) = num_to_alloc;
! (yy_buffer_stack_top) = 0;
! return;
}
- if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
- /* Increase the buffer to prepare for a possible push. */
- int grow_size = 8 /* arbitrary grow size */;
-
- num_to_alloc = (yy_buffer_stack_max) + grow_size;
- (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
- ((yy_buffer_stack),
- num_to_alloc * sizeof(struct yy_buffer_state*)
- );
-
- /* zero only the new slots.*/
- memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
- (yy_buffer_stack_max) = num_to_alloc;
- }
- }
! /** Setup the input buffer state to scan directly from a user-specified character buffer.
! * @param base the character buffer
! * @param size the size in bytes of the character buffer
! *
! * @return the newly allocated buffer state object.
! */
! YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
! {
YY_BUFFER_STATE b;
!
if ( size < 2 ||
base[size-2] != YY_END_OF_BUFFER_CHAR ||
base[size-1] != YY_END_OF_BUFFER_CHAR )
/* They forgot to leave room for the EOB's. */
return 0;
! b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
--- 3101,3129 ----
b->yy_at_bol = 1;
b->yy_buffer_status = YY_BUFFER_NEW;
! if ( b == yy_current_buffer )
! yy_load_buffer_state();
}
! #ifndef YY_NO_SCAN_BUFFER
! #ifdef YY_USE_PROTOS
! YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
! #else
! YY_BUFFER_STATE yy_scan_buffer( base, size )
! char *base;
! yy_size_t size;
! #endif
! {
YY_BUFFER_STATE b;
!
if ( size < 2 ||
base[size-2] != YY_END_OF_BUFFER_CHAR ||
base[size-1] != YY_END_OF_BUFFER_CHAR )
/* They forgot to leave room for the EOB's. */
return 0;
! b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
*************** YY_BUFFER_STATE yy_scan_buffer (char *
*** 3273,3314 ****
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
! yy_switch_to_buffer(b );
return b;
! }
- /** Setup the input buffer state to scan a string. The next call to yylex() will
- * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
- *
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- * yy_scan_bytes() instead.
- */
- YY_BUFFER_STATE yy_scan_string (yyconst char * str )
- {
-
- return yy_scan_bytes(str,strlen(str) );
- }
! /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
! * scan from a @e copy of @a bytes.
! * @param bytes the byte buffer to scan
! * @param len the number of bytes in the buffer pointed to by @a bytes.
! *
! * @return the newly allocated buffer state object.
! */
! YY_BUFFER_STATE yy_scan_bytes (yyconst char * bytes, int len )
! {
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
int i;
!
/* Get memory for full buffer, including space for trailing EOB's. */
n = len + 2;
! buf = (char *) yyalloc(n );
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
--- 3137,3183 ----
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
! yy_switch_to_buffer( b );
return b;
! }
! #endif
! #ifndef YY_NO_SCAN_STRING
! #ifdef YY_USE_PROTOS
! YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
! #else
! YY_BUFFER_STATE yy_scan_string( yy_str )
! yyconst char *yy_str;
! #endif
! {
! int len;
! for ( len = 0; yy_str[len]; ++len )
! ;
!
! return yy_scan_bytes( yy_str, len );
! }
! #endif
!
!
! #ifndef YY_NO_SCAN_BYTES
! #ifdef YY_USE_PROTOS
! YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
! #else
! YY_BUFFER_STATE yy_scan_bytes( bytes, len )
! yyconst char *bytes;
! int len;
! #endif
! {
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
int i;
!
/* Get memory for full buffer, including space for trailing EOB's. */
n = len + 2;
! buf = (char *) yy_flex_alloc( n );
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
*************** YY_BUFFER_STATE yy_scan_bytes (yyconst
*** 3317,3323 ****
buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
! b = yy_scan_buffer(buf,n );
if ( ! b )
YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
--- 3186,3192 ----
buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
! b = yy_scan_buffer( buf, n );
if ( ! b )
YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
*************** YY_BUFFER_STATE yy_scan_bytes (yyconst
*** 3327,3490 ****
b->yy_is_our_buffer = 1;
return b;
! }
! #ifndef YY_EXIT_FAILURE
! #define YY_EXIT_FAILURE 2
#endif
! static void yy_fatal_error (yyconst char* msg )
! {
! (void) fprintf( stderr, "%s\n", msg );
! exit( YY_EXIT_FAILURE );
! }
! /* Redefine yyless() so it works in section 3 code. */
! #undef yyless
! #define yyless(n) \
! do \
! { \
! /* Undo effects of setting up yytext. */ \
! int yyless_macro_arg = (n); \
! YY_LESS_LINENO(yyless_macro_arg);\
! yytext[yyleng] = (yy_hold_char); \
! (yy_c_buf_p) = yytext + yyless_macro_arg; \
! (yy_hold_char) = *(yy_c_buf_p); \
! *(yy_c_buf_p) = '\0'; \
! yyleng = yyless_macro_arg; \
! } \
! while ( 0 )
! /* Accessor methods (get/set functions) to struct members. */
! /** Get the current line number.
! *
! */
! int yyget_lineno (void)
! {
!
! return yylineno;
! }
! /** Get the input stream.
! *
! */
! FILE *yyget_in (void)
! {
! return yyin;
! }
- /** Get the output stream.
- *
- */
- FILE *yyget_out (void)
- {
- return yyout;
- }
! /** Get the length of the current token.
! *
! */
! int yyget_leng (void)
! {
! return yyleng;
! }
! /** Get the current token.
! *
! */
- char *yyget_text (void)
- {
- return yytext;
- }
! /** Set the current line number.
! * @param line_number
! *
! */
! void yyset_lineno (int line_number )
! {
!
! yylineno = line_number;
! }
! /** Set the input stream. This does not discard the current
! * input buffer.
! * @param in_str A readable stream.
! *
! * @see yy_switch_to_buffer
! */
! void yyset_in (FILE * in_str )
! {
! yyin = in_str ;
! }
! void yyset_out (FILE * out_str )
! {
! yyout = out_str ;
! }
- int yyget_debug (void)
- {
- return yy_flex_debug;
- }
- void yyset_debug (int bdebug )
- {
- yy_flex_debug = bdebug ;
- }
! /* yylex_destroy is for both reentrant and non-reentrant scanners. */
! int yylex_destroy (void)
! {
!
! /* Pop the buffer stack, destroying each element. */
! while(YY_CURRENT_BUFFER){
! yy_delete_buffer(YY_CURRENT_BUFFER );
! YY_CURRENT_BUFFER_LVALUE = NULL;
! yypop_buffer_state();
! }
! /* Destroy the stack itself. */
! yyfree((yy_buffer_stack) );
! (yy_buffer_stack) = NULL;
- return 0;
- }
! /*
! * Internal utility routines.
! */
#ifndef yytext_ptr
! static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
! {
register int i;
! for ( i = 0; i < n; ++i )
s1[i] = s2[i];
! }
#endif
#ifdef YY_NEED_STRLEN
! static int yy_flex_strlen (yyconst char * s )
! {
register int n;
! for ( n = 0; s[n]; ++n )
;
return n;
! }
#endif
! void *yyalloc (yy_size_t size )
! {
return (void *) malloc( size );
! }
! void *yyrealloc (void * ptr, yy_size_t size )
! {
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
--- 3196,3343 ----
b->yy_is_our_buffer = 1;
return b;
! }
! #endif
!
! #ifndef YY_NO_PUSH_STATE
! #ifdef YY_USE_PROTOS
! static void yy_push_state( int new_state )
! #else
! static void yy_push_state( new_state )
! int new_state;
#endif
+ {
+ if ( yy_start_stack_ptr >= yy_start_stack_depth )
+ {
+ yy_size_t new_size;
! yy_start_stack_depth += YY_START_STACK_INCR;
! new_size = yy_start_stack_depth * sizeof( int );
! if ( ! yy_start_stack )
! yy_start_stack = (int *) yy_flex_alloc( new_size );
! else
! yy_start_stack = (int *) yy_flex_realloc(
! (void *) yy_start_stack, new_size );
! if ( ! yy_start_stack )
! YY_FATAL_ERROR(
! "out of memory expanding start-condition stack" );
! }
! yy_start_stack[yy_start_stack_ptr++] = YY_START;
! BEGIN(new_state);
! }
! #endif
! #ifndef YY_NO_POP_STATE
! static void yy_pop_state()
! {
! if ( --yy_start_stack_ptr < 0 )
! YY_FATAL_ERROR( "start-condition stack underflow" );
! BEGIN(yy_start_stack[yy_start_stack_ptr]);
! }
! #endif
! #ifndef YY_NO_TOP_STATE
! static int yy_top_state()
! {
! return yy_start_stack[yy_start_stack_ptr - 1];
! }
! #endif
! #ifndef YY_EXIT_FAILURE
! #define YY_EXIT_FAILURE 2
! #endif
! #ifdef YY_USE_PROTOS
! static void yy_fatal_error( yyconst char msg[] )
! #else
! static void yy_fatal_error( msg )
! char msg[];
! #endif
! {
! (void) fprintf( stderr, "%s\n", msg );
! exit( YY_EXIT_FAILURE );
! }
! /* Redefine yyless() so it works in section 3 code. */
! #undef yyless
! #define yyless(n) \
! do \
! { \
! /* Undo effects of setting up yytext. */ \
! yytext[yyleng] = yy_hold_char; \
! yy_c_buf_p = yytext + n; \
! yy_hold_char = *yy_c_buf_p; \
! *yy_c_buf_p = '\0'; \
! yyleng = n; \
! } \
! while ( 0 )
! /* Internal utility routines. */
#ifndef yytext_ptr
! #ifdef YY_USE_PROTOS
! static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
! #else
! static void yy_flex_strncpy( s1, s2, n )
! char *s1;
! yyconst char *s2;
! int n;
! #endif
! {
register int i;
! for ( i = 0; i < n; ++i )
s1[i] = s2[i];
! }
#endif
#ifdef YY_NEED_STRLEN
! #ifdef YY_USE_PROTOS
! static int yy_flex_strlen( yyconst char *s )
! #else
! static int yy_flex_strlen( s )
! yyconst char *s;
! #endif
! {
register int n;
! for ( n = 0; s[n]; ++n )
;
return n;
! }
#endif
!
! #ifdef YY_USE_PROTOS
! static void *yy_flex_alloc( yy_size_t size )
! #else
! static void *yy_flex_alloc( size )
! yy_size_t size;
! #endif
! {
return (void *) malloc( size );
! }
! #ifdef YY_USE_PROTOS
! static void *yy_flex_realloc( void *ptr, yy_size_t size )
! #else
! static void *yy_flex_realloc( ptr, size )
! void *ptr;
! yy_size_t size;
! #endif
! {
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
*************** void *yyrealloc (void * ptr, yy_size_t
*** 3493,3521 ****
* as though doing an assignment.
*/
return (void *) realloc( (char *) ptr, size );
! }
!
! void yyfree (void * ptr )
! {
! free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
! }
!
! #define YYTABLES_NAME "yytables"
!
! #undef YY_NEW_FILE
! #undef YY_FLUSH_BUFFER
! #undef yy_set_bol
! #undef yy_new_buffer
! #undef yy_set_interactive
! #undef yytext_ptr
! #undef YY_DO_BEFORE_ACTION
! #ifdef YY_DECL_IS_OURS
! #undef YY_DECL_IS_OURS
! #undef YY_DECL
#endif
! #line 412 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-lex.l"
/* Deal with the expansion caused by the DEF_VEC_x macros. */
--- 3346,3371 ----
* as though doing an assignment.
*/
return (void *) realloc( (char *) ptr, size );
! }
! #ifdef YY_USE_PROTOS
! static void yy_flex_free( void *ptr )
! #else
! static void yy_flex_free( ptr )
! void *ptr;
#endif
! {
! free( ptr );
! }
+ #if YY_MAIN
+ int main()
+ {
+ yylex();
+ return 0;
+ }
+ #endif
+ #line 412 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-lex.l"
/* Deal with the expansion caused by the DEF_VEC_x macros. */
*************** parse_file (const char *fname)
*** 3626,3629 ****
exit (1);
fclose (yyin);
}
-
--- 3476,3478 ----
diff -Nrcpad gcc-4.0.3/gcc/gengtype-yacc.c gcc-4.0.4/gcc/gengtype-yacc.c
*** gcc-4.0.3/gcc/gengtype-yacc.c 2006-03-09 20:50:06.000000000 +0000
--- gcc-4.0.4/gcc/gengtype-yacc.c 2007-01-31 10:40:52.000000000 +0000
***************
*** 1,7 ****
! /* A Bison parser, made by GNU Bison 2.0. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
--- 1,7 ----
! /* A Bison parser, made by GNU Bison 1.875. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
***************
*** 98,104 ****
/* Copy the first part of user declarations. */
! #line 22 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
#include "bconfig.h"
#include "system.h"
--- 98,104 ----
/* Copy the first part of user declarations. */
! #line 22 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
#include "bconfig.h"
#include "system.h"
***************
*** 122,136 ****
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 31 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
typedef union YYSTYPE {
type_p t;
pair_p p;
options_p o;
const char *s;
} YYSTYPE;
! /* Line 190 of yacc.c. */
! #line 134 "gengtype-yacc.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
--- 122,136 ----
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 31 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
typedef union YYSTYPE {
type_p t;
pair_p p;
options_p o;
const char *s;
} YYSTYPE;
! /* Line 191 of yacc.c. */
! #line 133 "gengtype-yacc.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
*************** typedef union YYSTYPE {
*** 141,166 ****
/* Copy the second part of user declarations. */
! /* Line 213 of yacc.c. */
! #line 146 "gengtype-yacc.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
- # ifndef YYFREE
- # define YYFREE free
- # endif
- # ifndef YYMALLOC
- # define YYMALLOC malloc
- # endif
-
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # ifdef YYSTACK_USE_ALLOCA
! # if YYSTACK_USE_ALLOCA
! # ifdef __GNUC__
! # define YYSTACK_ALLOC __builtin_alloca
! # else
# define YYSTACK_ALLOC alloca
# endif
# endif
# endif
--- 141,163 ----
/* Copy the second part of user declarations. */
! /* Line 214 of yacc.c. */
! #line 145 "gengtype-yacc.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # if YYSTACK_USE_ALLOCA
! # define YYSTACK_ALLOC alloca
! # else
! # ifndef YYSTACK_USE_ALLOCA
! # if defined (alloca) || defined (_ALLOCA_H)
# define YYSTACK_ALLOC alloca
+ # else
+ # ifdef __GNUC__
+ # define YYSTACK_ALLOC __builtin_alloca
+ # endif
# endif
# endif
# endif
*************** typedef union YYSTYPE {
*** 173,192 ****
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC YYMALLOC
! # define YYSTACK_FREE YYFREE
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short int yyss;
YYSTYPE yyvs;
};
--- 170,189 ----
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC malloc
! # define YYSTACK_FREE free
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short yyss;
YYSTYPE yyvs;
};
*************** union yyalloc
*** 196,208 ****
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if defined (__GNUC__) && 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
--- 193,205 ----
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
*************** union yyalloc
*** 238,244 ****
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short int yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
--- 235,241 ----
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
*************** static const yysigned_char yyrhs[] =
*** 336,342 ****
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short int yyrline[] =
{
0, 65, 65, 66, 67, 68, 72, 71, 81, 80,
90, 95, 100, 108, 115, 116, 119, 127, 128, 141,
--- 333,339 ----
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short yyrline[] =
{
0, 65, 65, 66, 67, 68, 72, 71, 81, 80,
90, 95, 100, 108, 115, 116, 119, 127, 128, 141,
*************** static const unsigned short int yyrline[
*** 352,374 ****
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "ENT_TYPEDEF_STRUCT", "ENT_STRUCT",
! "ENT_EXTERNSTATIC", "ENT_YACCUNION", "GTY_TOKEN", "UNION", "STRUCT",
! "ENUM", "ALIAS", "NESTED_PTR", "PARAM_IS", "NUM", "\"%%\"", "SCALAR",
! "ID", "STRING", "ARRAY", "PERCENT_ID", "CHAR", "'{'", "'}'", "';'",
! "'='", "'<'", "'>'", "':'", "'*'", "','", "'('", "')'", "$accept",
! "start", "typedef_struct", "@1", "@2", "externstatic", "lasttype",
! "semiequal", "yacc_union", "yacc_typematch", "yacc_ids", "struct_fields",
! "bitfieldopt", "bitfieldlen", "type", "enum_items", "optionsopt",
! "options", "type_option", "option", "optionseq", "optionseqopt",
! "stringseq", 0
};
#endif
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short int yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
--- 349,371 ----
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "ENT_TYPEDEF_STRUCT", "ENT_STRUCT",
! "ENT_EXTERNSTATIC", "ENT_YACCUNION", "GTY_TOKEN", "UNION", "STRUCT",
! "ENUM", "ALIAS", "NESTED_PTR", "PARAM_IS", "NUM", "\"%%\"", "SCALAR",
! "ID", "STRING", "ARRAY", "PERCENT_ID", "CHAR", "'{'", "'}'", "';'",
! "'='", "'<'", "'>'", "':'", "'*'", "','", "'('", "')'", "$accept",
! "start", "typedef_struct", "@1", "@2", "externstatic", "lasttype",
! "semiequal", "yacc_union", "yacc_typematch", "yacc_ids",
! "struct_fields", "bitfieldopt", "bitfieldlen", "type", "enum_items",
! "optionsopt", "options", "type_option", "option", "optionseq",
! "optionseqopt", "stringseq", 0
};
#endif
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
*************** static const unsigned char yystos[] =
*** 534,541 ****
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrorlab
!
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
--- 531,537 ----
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
*************** do \
*** 562,614 ****
} \
while (0)
-
#define YYTERROR 1
#define YYERRCODE 256
- /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
- #define YYRHSLOC(Rhs, K) ((Rhs)[K])
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! do \
! if (N) \
! { \
! (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
! (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
! (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
! (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
! } \
! else \
! { \
! (Current).first_line = (Current).last_line = \
! YYRHSLOC (Rhs, 0).last_line; \
! (Current).first_column = (Current).last_column = \
! YYRHSLOC (Rhs, 0).last_column; \
! } \
! while (0)
! #endif
!
!
! /* YY_LOCATION_PRINT -- Print the location on the stream.
! This macro was not mandated originally: define only if we know
! we won't break user code: when these are the locations we know. */
!
! #ifndef YY_LOCATION_PRINT
! # if YYLTYPE_IS_TRIVIAL
! # define YY_LOCATION_PRINT(File, Loc) \
! fprintf (File, "%d.%d-%d.%d", \
! (Loc).first_line, (Loc).first_column, \
! (Loc).last_line, (Loc).last_column)
! # else
! # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
! # endif
#endif
-
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
--- 558,577 ----
} \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
+ /* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run). */
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! Current.first_line = Rhs[1].first_line; \
! Current.first_column = Rhs[1].first_column; \
! Current.last_line = Rhs[N].last_line; \
! Current.last_column = Rhs[N].last_column;
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
*************** do { \
*** 631,660 ****
YYFPRINTF Args; \
} while (0)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Type, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (included). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short int *bottom, short int *top)
#else
static void
yy_stack_print (bottom, top)
! short int *bottom;
! short int *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
--- 594,629 ----
YYFPRINTF Args; \
} while (0)
! # define YYDSYMPRINT(Args) \
! do { \
! if (yydebug) \
! yysymprint Args; \
! } while (0)
!
! # define YYDSYMPRINTF(Title, Token, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Token, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (cinluded). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short *bottom, short *top)
#else
static void
yy_stack_print (bottom, top)
! short *bottom;
! short *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
*************** yy_reduce_print (yyrule)
*** 684,692 ****
#endif
{
int yyi;
! unsigned int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
--- 653,661 ----
#endif
{
int yyi;
! unsigned int yylineno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylineno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
*************** do { \
*** 704,710 ****
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
--- 673,680 ----
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YYDSYMPRINT(Args)
! # define YYDSYMPRINTF(Title, Token, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
*************** int yydebug;
*** 722,727 ****
--- 692,701 ----
SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
evaluated with infinite-precision integer arithmetic. */
+ #if YYMAXDEPTH == 0
+ # undef YYMAXDEPTH
+ #endif
+
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 803,817 ****
(void) yyvaluep;
if (yytype < YYNTOKENS)
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- # ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
- # endif
switch (yytype)
{
default:
--- 777,791 ----
(void) yyvaluep;
if (yytype < YYNTOKENS)
! {
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
! # ifdef YYPRINT
! YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
! # endif
! }
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
switch (yytype)
{
default:
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 827,837 ****
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yymsg, yytype, yyvaluep)
! const char *yymsg;
int yytype;
YYSTYPE *yyvaluep;
#endif
--- 801,810 ----
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yytype, yyvaluep)
int yytype;
YYSTYPE *yyvaluep;
#endif
*************** yydestruct (yymsg, yytype, yyvaluep)
*** 839,848 ****
/* Pacify ``unused variable'' warnings. */
(void) yyvaluep;
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
switch (yytype)
{
--- 812,817 ----
*************** int yyparse ();
*** 870,879 ****
! /* The look-ahead symbol. */
int yychar;
! /* The semantic value of the look-ahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
--- 839,848 ----
! /* The lookahead symbol. */
int yychar;
! /* The semantic value of the lookahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
*************** yyparse ()
*** 909,915 ****
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Look-ahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
--- 878,884 ----
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Lookahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
*************** yyparse ()
*** 921,929 ****
to reallocate them elsewhere. */
/* The state stack. */
! short int yyssa[YYINITDEPTH];
! short int *yyss = yyssa;
! register short int *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
--- 890,898 ----
to reallocate them elsewhere. */
/* The state stack. */
! short yyssa[YYINITDEPTH];
! short *yyss = yyssa;
! register short *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
*************** yyparse ()
*** 960,968 ****
yyssp = yyss;
yyvsp = yyvs;
-
- yyvsp[0] = yylval;
-
goto yysetstate;
/*------------------------------------------------------------.
--- 929,934 ----
*************** yyparse ()
*** 988,994 ****
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short int *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
--- 954,960 ----
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
*************** yyparse ()
*** 1016,1022 ****
yystacksize = YYMAXDEPTH;
{
! short int *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
--- 982,988 ----
yystacksize = YYMAXDEPTH;
{
! short *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
*************** yyparse ()
*** 1052,1069 ****
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a look-ahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to look-ahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a look-ahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
--- 1018,1035 ----
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a lookahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a lookahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
*************** yybackup:
*** 1078,1084 ****
else
{
yytoken = YYTRANSLATE (yychar);
! YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
--- 1044,1050 ----
else
{
yytoken = YYTRANSLATE (yychar);
! YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
*************** yybackup:
*** 1098,1105 ****
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the look-ahead token. */
! YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
--- 1064,1071 ----
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the lookahead token. */
! YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
*************** yyreduce:
*** 1149,1516 ****
switch (yyn)
{
case 6:
! #line 72 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! new_structure ((yyvsp[-5].t)->u.s.tag, UNION_P ((yyvsp[-5].t)), &lexer_line,
! (yyvsp[-2].p), (yyvsp[-4].o));
! do_typedef ((yyvsp[0].s), (yyvsp[-5].t), &lexer_line);
lexer_toplevel_done = 1;
;}
break;
case 7:
! #line 79 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{;}
break;
case 8:
! #line 81 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! new_structure ((yyvsp[-4].t)->u.s.tag, UNION_P ((yyvsp[-4].t)), &lexer_line,
! (yyvsp[-1].p), (yyvsp[-3].o));
lexer_toplevel_done = 1;
;}
break;
case 9:
! #line 87 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{;}
break;
case 10:
! #line 91 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! note_variable ((yyvsp[-1].s), adjust_field_type ((yyvsp[-2].t), (yyvsp[-3].o)), (yyvsp[-3].o),
&lexer_line);
;}
break;
case 11:
! #line 96 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! note_variable ((yyvsp[-2].s), create_array ((yyvsp[-3].t), (yyvsp[-1].s)),
! (yyvsp[-4].o), &lexer_line);
;}
break;
case 12:
! #line 101 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! note_variable ((yyvsp[-3].s), create_array (create_array ((yyvsp[-4].t), (yyvsp[-1].s)),
! (yyvsp[-2].s)),
! (yyvsp[-5].o), &lexer_line);
;}
break;
case 13:
! #line 109 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
lexer_toplevel_done = 1;
! (yyval.t) = (yyvsp[0].t);
;}
break;
case 16:
! #line 121 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! note_yacc_type ((yyvsp[-4].o), (yyvsp[-3].p), (yyvsp[-1].p), &lexer_line);
;}
break;
case 17:
! #line 127 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.p) = NULL; ;}
break;
case 18:
! #line 129 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
pair_p p;
! for (p = (yyvsp[0].p); p->next != NULL; p = p->next)
{
p->name = NULL;
p->type = NULL;
}
p->name = NULL;
p->type = NULL;
! p->next = (yyvsp[-2].p);
! (yyval.p) = (yyvsp[0].p);
;}
break;
case 19:
! #line 142 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
pair_p p;
type_p newtype = NULL;
! if (strcmp ((yyvsp[-4].s), "type") == 0)
newtype = (type_p) 1;
! for (p = (yyvsp[0].p); p->next != NULL; p = p->next)
{
! p->name = (yyvsp[-2].s);
p->type = newtype;
}
! p->name = (yyvsp[-2].s);
! p->next = (yyvsp[-5].p);
p->type = newtype;
! (yyval.p) = (yyvsp[0].p);
;}
break;
case 20:
! #line 160 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.p) = NULL; ;}
break;
case 21:
! #line 162 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
pair_p p = XCNEW (struct pair);
! p->next = (yyvsp[-1].p);
p->line = lexer_line;
p->opt = XNEW (struct options);
p->opt->name = "tag";
p->opt->next = NULL;
! p->opt->info = (char *)(yyvsp[0].s);
! (yyval.p) = p;
;}
break;
case 22:
! #line 173 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
pair_p p = XCNEW (struct pair);
! p->next = (yyvsp[-1].p);
p->line = lexer_line;
p->opt = XNEW (struct options);
p->opt->name = "tag";
p->opt->next = NULL;
! p->opt->info = xasprintf ("'%s'", (yyvsp[0].s));
! (yyval.p) = p;
;}
break;
case 23:
! #line 185 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.p) = NULL; ;}
break;
case 24:
! #line 187 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
pair_p p = XNEW (struct pair);
! p->type = adjust_field_type ((yyvsp[-5].t), (yyvsp[-4].o));
! p->opt = (yyvsp[-4].o);
! p->name = (yyvsp[-3].s);
! p->next = (yyvsp[0].p);
p->line = lexer_line;
! (yyval.p) = p;
;}
break;
case 25:
! #line 197 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
pair_p p = XNEW (struct pair);
! p->type = adjust_field_type (create_array ((yyvsp[-5].t), (yyvsp[-2].s)), (yyvsp[-4].o));
! p->opt = (yyvsp[-4].o);
! p->name = (yyvsp[-3].s);
! p->next = (yyvsp[0].p);
p->line = lexer_line;
! (yyval.p) = p;
;}
break;
case 26:
! #line 207 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
pair_p p = XNEW (struct pair);
! p->type = create_array (create_array ((yyvsp[-6].t), (yyvsp[-2].s)), (yyvsp[-3].s));
! p->opt = (yyvsp[-5].o);
! p->name = (yyvsp[-4].s);
! p->next = (yyvsp[0].p);
p->line = lexer_line;
! (yyval.p) = p;
;}
break;
case 27:
! #line 217 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.p) = (yyvsp[0].p); ;}
break;
case 31:
! #line 225 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{ ;}
break;
case 32:
! #line 229 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.t) = (yyvsp[0].t); ;}
break;
case 33:
! #line 231 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.t) = resolve_typedef ((yyvsp[0].s), &lexer_line); ;}
break;
case 34:
! #line 233 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.t) = create_pointer ((yyvsp[-1].t)); ;}
break;
case 35:
! #line 235 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! new_structure ((yyvsp[-3].s), 0, &lexer_line, (yyvsp[-1].p), NULL);
! (yyval.t) = find_structure ((yyvsp[-3].s), 0);
;}
break;
case 36:
! #line 240 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.t) = find_structure ((yyvsp[0].s), 0); ;}
break;
case 37:
! #line 242 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! new_structure ((yyvsp[-3].s), 1, &lexer_line, (yyvsp[-1].p), NULL);
! (yyval.t) = find_structure ((yyvsp[-3].s), 1);
;}
break;
case 38:
! #line 247 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.t) = find_structure ((yyvsp[0].s), 1); ;}
break;
case 39:
! #line 249 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.t) = create_scalar_type ((yyvsp[0].s), strlen ((yyvsp[0].s))); ;}
break;
case 40:
! #line 251 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.t) = create_scalar_type ((yyvsp[-3].s), strlen ((yyvsp[-3].s))); ;}
break;
case 42:
! #line 256 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{ ;}
break;
case 43:
! #line 258 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{ ;}
break;
case 44:
! #line 260 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{ ;}
break;
case 45:
! #line 263 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.o) = NULL; ;}
break;
case 46:
! #line 264 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.o) = (yyvsp[0].o); ;}
break;
case 47:
! #line 268 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.o) = (yyvsp[-2].o); ;}
break;
case 48:
! #line 272 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.s) = "ptr_alias"; ;}
break;
case 49:
! #line 274 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.s) = (yyvsp[0].s); ;}
break;
case 50:
! #line 278 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.o) = create_option ((yyvsp[0].s), (void *)""); ;}
break;
case 51:
! #line 280 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.o) = create_option ((yyvsp[-3].s), (void *)(yyvsp[-1].s)); ;}
break;
case 52:
! #line 282 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.o) = create_option ((yyvsp[-3].s), adjust_field_type ((yyvsp[-1].t), NULL)); ;}
break;
case 53:
! #line 284 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
struct nested_ptr_data d;
! d.type = adjust_field_type ((yyvsp[-5].t), NULL);
! d.convert_to = (yyvsp[-3].s);
! d.convert_from = (yyvsp[-1].s);
! (yyval.o) = create_option ("nested_ptr",
xmemdup (&d, sizeof (d), sizeof (d)));
;}
break;
case 54:
! #line 296 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! (yyvsp[0].o)->next = NULL;
! (yyval.o) = (yyvsp[0].o);
;}
break;
case 55:
! #line 301 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! (yyvsp[0].o)->next = (yyvsp[-2].o);
! (yyval.o) = (yyvsp[0].o);
;}
break;
case 56:
! #line 307 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.o) = NULL; ;}
break;
case 57:
! #line 308 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.o) = (yyvsp[0].o); ;}
break;
case 58:
! #line 312 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
! { (yyval.s) = (yyvsp[0].s); ;}
break;
case 59:
! #line 314 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
{
! size_t l1 = strlen ((yyvsp[-1].s));
! size_t l2 = strlen ((yyvsp[0].s));
! char *s = XRESIZEVEC (char, (yyvsp[-1].s), l1 + l2 + 1);
! memcpy (s + l1, (yyvsp[0].s), l2 + 1);
! XDELETE ((yyvsp[0].s));
! (yyval.s) = s;
;}
break;
}
! /* Line 1037 of yacc.c. */
! #line 1514 "gengtype-yacc.c"
yyvsp -= yylen;
yyssp -= yylen;
--- 1115,1482 ----
switch (yyn)
{
case 6:
! #line 72 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! new_structure (yyvsp[-5].t->u.s.tag, UNION_P (yyvsp[-5].t), &lexer_line,
! yyvsp[-2].p, yyvsp[-4].o);
! do_typedef (yyvsp[0].s, yyvsp[-5].t, &lexer_line);
lexer_toplevel_done = 1;
;}
break;
case 7:
! #line 79 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{;}
break;
case 8:
! #line 81 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! new_structure (yyvsp[-4].t->u.s.tag, UNION_P (yyvsp[-4].t), &lexer_line,
! yyvsp[-1].p, yyvsp[-3].o);
lexer_toplevel_done = 1;
;}
break;
case 9:
! #line 87 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{;}
break;
case 10:
! #line 91 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! note_variable (yyvsp[-1].s, adjust_field_type (yyvsp[-2].t, yyvsp[-3].o), yyvsp[-3].o,
&lexer_line);
;}
break;
case 11:
! #line 96 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! note_variable (yyvsp[-2].s, create_array (yyvsp[-3].t, yyvsp[-1].s),
! yyvsp[-4].o, &lexer_line);
;}
break;
case 12:
! #line 101 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! note_variable (yyvsp[-3].s, create_array (create_array (yyvsp[-4].t, yyvsp[-1].s),
! yyvsp[-2].s),
! yyvsp[-5].o, &lexer_line);
;}
break;
case 13:
! #line 109 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
lexer_toplevel_done = 1;
! yyval.t = yyvsp[0].t;
;}
break;
case 16:
! #line 121 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! note_yacc_type (yyvsp[-4].o, yyvsp[-3].p, yyvsp[-1].p, &lexer_line);
;}
break;
case 17:
! #line 127 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.p = NULL; ;}
break;
case 18:
! #line 129 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
pair_p p;
! for (p = yyvsp[0].p; p->next != NULL; p = p->next)
{
p->name = NULL;
p->type = NULL;
}
p->name = NULL;
p->type = NULL;
! p->next = yyvsp[-2].p;
! yyval.p = yyvsp[0].p;
;}
break;
case 19:
! #line 142 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
pair_p p;
type_p newtype = NULL;
! if (strcmp (yyvsp[-4].s, "type") == 0)
newtype = (type_p) 1;
! for (p = yyvsp[0].p; p->next != NULL; p = p->next)
{
! p->name = yyvsp[-2].s;
p->type = newtype;
}
! p->name = yyvsp[-2].s;
! p->next = yyvsp[-5].p;
p->type = newtype;
! yyval.p = yyvsp[0].p;
;}
break;
case 20:
! #line 160 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.p = NULL; ;}
break;
case 21:
! #line 162 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
pair_p p = XCNEW (struct pair);
! p->next = yyvsp[-1].p;
p->line = lexer_line;
p->opt = XNEW (struct options);
p->opt->name = "tag";
p->opt->next = NULL;
! p->opt->info = (char *)yyvsp[0].s;
! yyval.p = p;
;}
break;
case 22:
! #line 173 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
pair_p p = XCNEW (struct pair);
! p->next = yyvsp[-1].p;
p->line = lexer_line;
p->opt = XNEW (struct options);
p->opt->name = "tag";
p->opt->next = NULL;
! p->opt->info = xasprintf ("'%s'", yyvsp[0].s);
! yyval.p = p;
;}
break;
case 23:
! #line 185 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.p = NULL; ;}
break;
case 24:
! #line 187 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
pair_p p = XNEW (struct pair);
! p->type = adjust_field_type (yyvsp[-5].t, yyvsp[-4].o);
! p->opt = yyvsp[-4].o;
! p->name = yyvsp[-3].s;
! p->next = yyvsp[0].p;
p->line = lexer_line;
! yyval.p = p;
;}
break;
case 25:
! #line 197 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
pair_p p = XNEW (struct pair);
! p->type = adjust_field_type (create_array (yyvsp[-5].t, yyvsp[-2].s), yyvsp[-4].o);
! p->opt = yyvsp[-4].o;
! p->name = yyvsp[-3].s;
! p->next = yyvsp[0].p;
p->line = lexer_line;
! yyval.p = p;
;}
break;
case 26:
! #line 207 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
pair_p p = XNEW (struct pair);
! p->type = create_array (create_array (yyvsp[-6].t, yyvsp[-2].s), yyvsp[-3].s);
! p->opt = yyvsp[-5].o;
! p->name = yyvsp[-4].s;
! p->next = yyvsp[0].p;
p->line = lexer_line;
! yyval.p = p;
;}
break;
case 27:
! #line 217 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.p = yyvsp[0].p; ;}
break;
case 31:
! #line 225 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{ ;}
break;
case 32:
! #line 229 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.t = yyvsp[0].t; ;}
break;
case 33:
! #line 231 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.t = resolve_typedef (yyvsp[0].s, &lexer_line); ;}
break;
case 34:
! #line 233 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.t = create_pointer (yyvsp[-1].t); ;}
break;
case 35:
! #line 235 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! new_structure (yyvsp[-3].s, 0, &lexer_line, yyvsp[-1].p, NULL);
! yyval.t = find_structure (yyvsp[-3].s, 0);
;}
break;
case 36:
! #line 240 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.t = find_structure (yyvsp[0].s, 0); ;}
break;
case 37:
! #line 242 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! new_structure (yyvsp[-3].s, 1, &lexer_line, yyvsp[-1].p, NULL);
! yyval.t = find_structure (yyvsp[-3].s, 1);
;}
break;
case 38:
! #line 247 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.t = find_structure (yyvsp[0].s, 1); ;}
break;
case 39:
! #line 249 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.t = create_scalar_type (yyvsp[0].s, strlen (yyvsp[0].s)); ;}
break;
case 40:
! #line 251 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.t = create_scalar_type (yyvsp[-3].s, strlen (yyvsp[-3].s)); ;}
break;
case 42:
! #line 256 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{ ;}
break;
case 43:
! #line 258 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{ ;}
break;
case 44:
! #line 260 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{ ;}
break;
case 45:
! #line 263 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.o = NULL; ;}
break;
case 46:
! #line 264 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.o = yyvsp[0].o; ;}
break;
case 47:
! #line 268 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.o = yyvsp[-2].o; ;}
break;
case 48:
! #line 272 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.s = "ptr_alias"; ;}
break;
case 49:
! #line 274 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.s = yyvsp[0].s; ;}
break;
case 50:
! #line 278 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.o = create_option (yyvsp[0].s, (void *)""); ;}
break;
case 51:
! #line 280 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.o = create_option (yyvsp[-3].s, (void *)yyvsp[-1].s); ;}
break;
case 52:
! #line 282 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.o = create_option (yyvsp[-3].s, adjust_field_type (yyvsp[-1].t, NULL)); ;}
break;
case 53:
! #line 284 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
struct nested_ptr_data d;
! d.type = adjust_field_type (yyvsp[-5].t, NULL);
! d.convert_to = yyvsp[-3].s;
! d.convert_from = yyvsp[-1].s;
! yyval.o = create_option ("nested_ptr",
xmemdup (&d, sizeof (d), sizeof (d)));
;}
break;
case 54:
! #line 296 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! yyvsp[0].o->next = NULL;
! yyval.o = yyvsp[0].o;
;}
break;
case 55:
! #line 301 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! yyvsp[0].o->next = yyvsp[-2].o;
! yyval.o = yyvsp[0].o;
;}
break;
case 56:
! #line 307 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.o = NULL; ;}
break;
case 57:
! #line 308 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.o = yyvsp[0].o; ;}
break;
case 58:
! #line 312 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
! { yyval.s = yyvsp[0].s; ;}
break;
case 59:
! #line 314 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
{
! size_t l1 = strlen (yyvsp[-1].s);
! size_t l2 = strlen (yyvsp[0].s);
! char *s = XRESIZEVEC (char, yyvsp[-1].s, l1 + l2 + 1);
! memcpy (s + l1, yyvsp[0].s, l2 + 1);
! XDELETE (yyvsp[0].s);
! yyval.s = s;
;}
break;
}
! /* Line 991 of yacc.c. */
! #line 1479 "gengtype-yacc.c"
yyvsp -= yylen;
yyssp -= yylen;
*************** yyerrlab:
*** 1551,1583 ****
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
- const char* yyprefix;
char *yymsg;
! int yyx;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! int yyxbegin = yyn < 0 ? -yyn : 0;
!
! /* Stay within bounds of both yycheck and yytname. */
! int yychecklim = YYLAST - yyn;
! int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
! int yycount = 0;
!
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! {
! yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
! yycount += 1;
! if (yycount == 5)
! {
! yysize = 0;
! break;
! }
! }
! yysize += (sizeof ("syntax error, unexpected ")
! + yystrlen (yytname[yytype]));
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
--- 1517,1534 ----
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
char *yymsg;
! int yyx, yycount;
+ yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! yysize += yystrlen (yytname[yyx]) + 15, yycount++;
! yysize += yystrlen ("syntax error, unexpected ") + 1;
! yysize += yystrlen (yytname[yytype]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
*************** yyerrlab:
*** 1586,1598 ****
if (yycount < 5)
{
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! yyp = yystpcpy (yyp, yyprefix);
yyp = yystpcpy (yyp, yytname[yyx]);
! yyprefix = " or ";
}
}
yyerror (yymsg);
--- 1537,1552 ----
if (yycount < 5)
{
! yycount = 0;
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *));
! yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! const char *yyq = ! yycount ? ", expecting " : " or ";
! yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
! yycount++;
}
}
yyerror (yymsg);
*************** yyerrlab:
*** 1610,1667 ****
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse look-ahead token after an
error, discard it. */
! if (yychar <= YYEOF)
{
! /* If at end of input, pop the error token,
! then the rest of the stack, then return failure. */
! if (yychar == YYEOF)
! for (;;)
! {
!
! YYPOPSTACK;
! if (yyssp == yyss)
! YYABORT;
! yydestruct ("Error: popping",
! yystos[*yyssp], yyvsp);
! }
}
! else
! {
! yydestruct ("Error: discarding", yytoken, &yylval);
! yychar = YYEMPTY;
! }
}
! /* Else will try to reuse look-ahead token after shifting the error
token. */
! goto yyerrlab1;
! /*---------------------------------------------------.
! | yyerrorlab -- error raised explicitly by YYERROR. |
! `---------------------------------------------------*/
! yyerrorlab:
! #ifdef __GNUC__
! /* Pacify GCC when the user code never invokes YYERROR and the label
! yyerrorlab therefore never appears in user code. */
! if (0)
! goto yyerrorlab;
#endif
- yyvsp -= yylen;
- yyssp -= yylen;
- yystate = *yyssp;
- goto yyerrlab1;
! /*-------------------------------------------------------------.
! | yyerrlab1 -- common code for both syntax error and YYERROR. |
! `-------------------------------------------------------------*/
! yyerrlab1:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
--- 1564,1618 ----
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse lookahead token after an
error, discard it. */
! /* Return failure if at end of input. */
! if (yychar == YYEOF)
{
! /* Pop the error token. */
! YYPOPSTACK;
! /* Pop the rest of the stack. */
! while (yyss < yyssp)
! {
! YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
! yydestruct (yystos[*yyssp], yyvsp);
! YYPOPSTACK;
! }
! YYABORT;
}
!
! YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
! yydestruct (yytoken, &yylval);
! yychar = YYEMPTY;
!
}
! /* Else will try to reuse lookahead token after shifting the error
token. */
! goto yyerrlab2;
! /*----------------------------------------------------.
! | yyerrlab1 -- error raised explicitly by an action. |
! `----------------------------------------------------*/
! yyerrlab1:
! /* Suppress GCC warning that yyerrlab1 is unused when no action
! invokes YYERROR. */
! #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) \
! && !defined __cplusplus
! __attribute__ ((__unused__))
#endif
+ goto yyerrlab2;
!
! /*---------------------------------------------------------------.
! | yyerrlab2 -- pop states until the error token can be shifted. |
! `---------------------------------------------------------------*/
! yyerrlab2:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
*************** yyerrlab1:
*** 1682,1702 ****
if (yyssp == yyss)
YYABORT;
- yydestruct ("Error: popping", yystos[yystate], yyvsp);
- YYPOPSTACK;
- yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
! *++yyvsp = yylval;
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
yystate = yyn;
goto yynewstate;
--- 1633,1653 ----
if (yyssp == yyss)
YYABORT;
+ YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+ yydestruct (yystos[yystate], yyvsp);
+ yyvsp--;
+ yystate = *--yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
! YYDPRINTF ((stderr, "Shifting error token, "));
+ *++yyvsp = yylval;
yystate = yyn;
goto yynewstate;
*************** yyacceptlab:
*** 1713,1721 ****
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
yyabortlab:
- yydestruct ("Error: discarding lookahead",
- yytoken, &yylval);
- yychar = YYEMPTY;
yyresult = 1;
goto yyreturn;
--- 1664,1669 ----
*************** yyreturn:
*** 1738,1743 ****
}
! #line 323 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
--- 1686,1691 ----
}
! #line 323 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
diff -Nrcpad gcc-4.0.3/gcc/gengtype-yacc.h gcc-4.0.4/gcc/gengtype-yacc.h
*** gcc-4.0.3/gcc/gengtype-yacc.h 2006-03-09 20:50:06.000000000 +0000
--- gcc-4.0.4/gcc/gengtype-yacc.h 2007-01-31 10:40:52.000000000 +0000
***************
*** 1,7 ****
! /* A Bison parser, made by GNU Bison 2.0. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
--- 1,7 ----
! /* A Bison parser, made by GNU Bison 1.875. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
***************
*** 74,88 ****
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 31 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/gengtype-yacc.y"
typedef union YYSTYPE {
type_p t;
pair_p p;
options_p o;
const char *s;
} YYSTYPE;
! /* Line 1318 of yacc.c. */
! #line 86 "gengtype-yacc.h"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
--- 74,88 ----
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 31 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/gengtype-yacc.y"
typedef union YYSTYPE {
type_p t;
pair_p p;
options_p o;
const char *s;
} YYSTYPE;
! /* Line 1249 of yacc.c. */
! #line 85 "gengtype-yacc.h"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
diff -Nrcpad gcc-4.0.3/gcc/gimplify.c gcc-4.0.4/gcc/gimplify.c
*** gcc-4.0.3/gcc/gimplify.c 2006-02-28 19:58:33.000000000 +0000
--- gcc-4.0.4/gcc/gimplify.c 2006-08-26 00:16:07.000000000 +0000
*************** gimplify_decl_expr (tree *stmt_p)
*** 992,998 ****
{
tree init = DECL_INITIAL (decl);
! if (!TREE_CONSTANT (DECL_SIZE (decl)))
{
/* This is a variable-sized decl. Simplify its size and mark it
for deferred expansion. Note that mudflap depends on the format
--- 992,998 ----
{
tree init = DECL_INITIAL (decl);
! if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
{
/* This is a variable-sized decl. Simplify its size and mark it
for deferred expansion. Note that mudflap depends on the format
*************** gimplify_init_ctor_preeval (tree *expr_p
*** 2398,2404 ****
/* If this is of variable size, we have no choice but to assume it doesn't
overlap since we can't make a temporary for it. */
! if (!TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (*expr_p))))
return;
/* Otherwise, we must search for overlap ... */
--- 2398,2404 ----
/* If this is of variable size, we have no choice but to assume it doesn't
overlap since we can't make a temporary for it. */
! if (TREE_CODE (TYPE_SIZE (TREE_TYPE (*expr_p))) != INTEGER_CST)
return;
/* Otherwise, we must search for overlap ... */
*************** gimplify_expr (tree *expr_p, tree *pre_p
*** 4282,4288 ****
/* Historically, the compiler has treated a bare
reference to a volatile lvalue as forcing a load. */
tree type = TYPE_MAIN_VARIANT (TREE_TYPE (*expr_p));
! /* Normally, we do want to create a temporary for a
TREE_ADDRESSABLE type because such a type should not be
copied by bitwise-assignment. However, we make an
exception here, as all we are doing here is ensuring that
--- 4282,4288 ----
/* Historically, the compiler has treated a bare
reference to a volatile lvalue as forcing a load. */
tree type = TYPE_MAIN_VARIANT (TREE_TYPE (*expr_p));
! /* Normally, we do not want to create a temporary for a
TREE_ADDRESSABLE type because such a type should not be
copied by bitwise-assignment. However, we make an
exception here, as all we are doing here is ensuring that
diff -Nrcpad gcc-4.0.3/gcc/java/ChangeLog gcc-4.0.4/gcc/java/ChangeLog
*** gcc-4.0.3/gcc/java/ChangeLog 2006-03-09 20:44:08.000000000 +0000
--- gcc-4.0.4/gcc/java/ChangeLog 2007-01-31 10:21:46.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/gcc/java/parse.c gcc-4.0.4/gcc/java/parse.c
*** gcc-4.0.3/gcc/java/parse.c 2006-03-09 20:51:49.000000000 +0000
--- gcc-4.0.4/gcc/java/parse.c 2007-01-31 10:49:31.000000000 +0000
***************
*** 1,7 ****
! /* A Bison parser, made by GNU Bison 2.0. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
--- 1,7 ----
! /* A Bison parser, made by GNU Bison 1.875. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
***************
*** 45,51 ****
/* Using locations. */
#define YYLSP_NEEDED 0
! /* Substitute the variable and function names. */
#define yyparse java_parse
#define yylex java_lex
#define yyerror java_error
--- 45,52 ----
/* Using locations. */
#define YYLSP_NEEDED 0
! /* If NAME_PREFIX is specified substitute the variables and functions
! names. */
#define yyparse java_parse
#define yylex java_lex
#define yyerror java_error
***************
*** 286,292 ****
/* Copy the first part of user declarations. */
! #line 49 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
#include "config.h"
#include "system.h"
--- 287,293 ----
/* Copy the first part of user declarations. */
! #line 49 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
#include "config.h"
#include "system.h"
*************** static GTY(()) tree src_parse_roots[1];
*** 704,710 ****
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 452 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
typedef union YYSTYPE {
tree node;
int sub_token;
--- 705,711 ----
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 452 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
typedef union YYSTYPE {
tree node;
int sub_token;
*************** typedef union YYSTYPE {
*** 718,724 ****
} operator;
int value;
} YYSTYPE;
! /* Line 190 of yacc.c. */
#line 723 "java/parse.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
--- 719,725 ----
} operator;
int value;
} YYSTYPE;
! /* Line 191 of yacc.c. */
#line 723 "java/parse.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
*************** typedef union YYSTYPE {
*** 728,734 ****
/* Copy the second part of user declarations. */
! #line 466 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
#ifdef USE_MAPPED_LOCATION
#define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \
--- 729,735 ----
/* Copy the second part of user declarations. */
! #line 466 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
#ifdef USE_MAPPED_LOCATION
#define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \
*************** typedef union YYSTYPE {
*** 741,766 ****
#include "lex.c"
! /* Line 213 of yacc.c. */
#line 746 "java/parse.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
- # ifndef YYFREE
- # define YYFREE free
- # endif
- # ifndef YYMALLOC
- # define YYMALLOC malloc
- # endif
-
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # ifdef YYSTACK_USE_ALLOCA
! # if YYSTACK_USE_ALLOCA
! # ifdef __GNUC__
! # define YYSTACK_ALLOC __builtin_alloca
! # else
# define YYSTACK_ALLOC alloca
# endif
# endif
# endif
--- 742,764 ----
#include "lex.c"
! /* Line 214 of yacc.c. */
#line 746 "java/parse.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # if YYSTACK_USE_ALLOCA
! # define YYSTACK_ALLOC alloca
! # else
! # ifndef YYSTACK_USE_ALLOCA
! # if defined (alloca) || defined (_ALLOCA_H)
# define YYSTACK_ALLOC alloca
+ # else
+ # ifdef __GNUC__
+ # define YYSTACK_ALLOC __builtin_alloca
+ # endif
# endif
# endif
# endif
*************** typedef union YYSTYPE {
*** 773,792 ****
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC YYMALLOC
! # define YYSTACK_FREE YYFREE
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short int yyss;
YYSTYPE yyvs;
};
--- 771,790 ----
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC malloc
! # define YYSTACK_FREE free
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short yyss;
YYSTYPE yyvs;
};
*************** union yyalloc
*** 796,808 ****
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if defined (__GNUC__) && 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
--- 794,806 ----
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
*************** union yyalloc
*** 838,844 ****
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short int yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
--- 836,842 ----
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
*************** static const unsigned char yytranslate[]
*** 907,913 ****
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
! static const unsigned short int yyprhs[] =
{
0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
--- 905,911 ----
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
! static const unsigned short yyprhs[] =
{
0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
*************** static const unsigned short int yyprhs[]
*** 964,970 ****
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
! static const short int yyrhs[] =
{
113, 0, -1, 126, -1, 106, -1, 107, -1, 110,
-1, 105, -1, 104, -1, 111, -1, 116, -1, 117,
--- 962,968 ----
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
! static const short yyrhs[] =
{
113, 0, -1, 126, -1, 106, -1, 107, -1, 110,
-1, 105, -1, 104, -1, 111, -1, 116, -1, 117,
*************** static const short int yyrhs[] =
*** 1147,1153 ****
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short int yyrline[] =
{
0, 625, 625, 631, 632, 633, 634, 635, 636, 641,
642, 646, 647, 648, 652, 653, 657, 661, 665, 669,
--- 1145,1151 ----
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short yyrline[] =
{
0, 625, 625, 631, 632, 633, 634, 635, 636, 641,
642, 646, 647, 648, 652, 653, 657, 661, 665, 669,
*************** static const unsigned short int yyrline[
*** 1209,1287 ****
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "PLUS_TK", "MINUS_TK", "MULT_TK",
! "DIV_TK", "REM_TK", "LS_TK", "SRS_TK", "ZRS_TK", "AND_TK", "XOR_TK",
! "OR_TK", "BOOL_AND_TK", "BOOL_OR_TK", "EQ_TK", "NEQ_TK", "GT_TK",
! "GTE_TK", "LT_TK", "LTE_TK", "PLUS_ASSIGN_TK", "MINUS_ASSIGN_TK",
! "MULT_ASSIGN_TK", "DIV_ASSIGN_TK", "REM_ASSIGN_TK", "LS_ASSIGN_TK",
! "SRS_ASSIGN_TK", "ZRS_ASSIGN_TK", "AND_ASSIGN_TK", "XOR_ASSIGN_TK",
! "OR_ASSIGN_TK", "PUBLIC_TK", "PRIVATE_TK", "PROTECTED_TK", "STATIC_TK",
! "FINAL_TK", "SYNCHRONIZED_TK", "VOLATILE_TK", "TRANSIENT_TK",
! "NATIVE_TK", "PAD_TK", "ABSTRACT_TK", "STRICT_TK", "MODIFIER_TK",
! "DECR_TK", "INCR_TK", "DEFAULT_TK", "IF_TK", "THROW_TK", "BOOLEAN_TK",
! "DO_TK", "IMPLEMENTS_TK", "THROWS_TK", "BREAK_TK", "IMPORT_TK",
! "ELSE_TK", "INSTANCEOF_TK", "RETURN_TK", "VOID_TK", "CATCH_TK",
! "INTERFACE_TK", "CASE_TK", "EXTENDS_TK", "FINALLY_TK", "SUPER_TK",
! "WHILE_TK", "CLASS_TK", "SWITCH_TK", "CONST_TK", "TRY_TK", "FOR_TK",
! "NEW_TK", "CONTINUE_TK", "GOTO_TK", "PACKAGE_TK", "THIS_TK", "ASSERT_TK",
! "BYTE_TK", "SHORT_TK", "INT_TK", "LONG_TK", "CHAR_TK", "INTEGRAL_TK",
! "FLOAT_TK", "DOUBLE_TK", "FP_TK", "ID_TK", "REL_QM_TK", "REL_CL_TK",
! "NOT_TK", "NEG_TK", "ASSIGN_ANY_TK", "ASSIGN_TK", "OP_TK", "CP_TK",
! "OCB_TK", "CCB_TK", "OSB_TK", "CSB_TK", "SC_TK", "C_TK", "DOT_TK",
! "STRING_LIT_TK", "CHAR_LIT_TK", "INT_LIT_TK", "FP_LIT_TK", "TRUE_TK",
! "FALSE_TK", "BOOL_LIT_TK", "NULL_TK", "$accept", "goal", "literal",
! "type", "primitive_type", "reference_type", "class_or_interface_type",
! "class_type", "interface_type", "array_type", "name", "simple_name",
! "qualified_name", "identifier", "compilation_unit",
! "import_declarations", "type_declarations", "package_declaration",
! "import_declaration", "single_type_import_declaration",
! "type_import_on_demand_declaration", "type_declaration", "modifiers",
! "class_declaration", "@1", "@2", "super", "interfaces",
! "interface_type_list", "class_body", "class_body_declarations",
! "class_body_declaration", "class_member_declaration",
! "field_declaration", "variable_declarators", "variable_declarator",
! "variable_declarator_id", "variable_initializer", "method_declaration",
! "@3", "method_header", "method_declarator", "formal_parameter_list",
! "formal_parameter", "final", "throws", "class_type_list", "method_body",
! "static_initializer", "static", "constructor_declaration", "@4",
! "constructor_header", "constructor_declarator", "constructor_body",
! "constructor_block_end", "explicit_constructor_invocation",
! "this_or_super", "interface_declaration", "@5", "@6", "@7", "@8",
! "extends_interfaces", "interface_body", "interface_member_declarations",
! "interface_member_declaration", "constant_declaration",
! "abstract_method_declaration", "array_initializer",
! "variable_initializers", "block", "block_begin", "block_end",
! "block_statements", "block_statement",
! "local_variable_declaration_statement", "local_variable_declaration",
! "statement", "statement_nsi", "statement_without_trailing_substatement",
! "empty_statement", "label_decl", "labeled_statement",
! "labeled_statement_nsi", "expression_statement", "statement_expression",
! "if_then_statement", "if_then_else_statement",
! "if_then_else_statement_nsi", "switch_statement", "@9",
! "switch_expression", "switch_block", "switch_block_statement_groups",
! "switch_block_statement_group", "switch_labels", "switch_label",
! "while_expression", "while_statement", "while_statement_nsi",
! "do_statement_begin", "do_statement", "for_statement",
! "for_statement_nsi", "for_header", "for_begin", "for_init", "for_update",
! "statement_expression_list", "break_statement", "continue_statement",
! "return_statement", "throw_statement", "assert_statement",
! "synchronized_statement", "synchronized", "try_statement", "catches",
! "catch_clause", "catch_clause_parameter", "finally", "primary",
! "primary_no_new_array", "type_literals",
! "class_instance_creation_expression", "anonymous_class_creation", "@10",
! "@11", "something_dot_new", "argument_list",
! "array_creation_uninitialized", "array_creation_initialized",
! "dim_exprs", "dim_expr", "dims", "field_access", "method_invocation",
! "array_access", "postfix_expression", "post_increment_expression",
! "post_decrement_expression", "trap_overflow_corner_case",
! "unary_expression", "pre_increment_expression",
! "pre_decrement_expression", "unary_expression_not_plus_minus",
! "cast_expression", "multiplicative_expression", "additive_expression",
! "shift_expression", "relational_expression", "equality_expression",
! "and_expression", "exclusive_or_expression", "inclusive_or_expression",
! "conditional_and_expression", "conditional_or_expression",
! "conditional_expression", "assignment_expression", "assignment",
! "left_hand_side", "assignment_operator", "expression",
"constant_expression", 0
};
#endif
--- 1207,1286 ----
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "PLUS_TK", "MINUS_TK", "MULT_TK", "DIV_TK",
! "REM_TK", "LS_TK", "SRS_TK", "ZRS_TK", "AND_TK", "XOR_TK", "OR_TK",
! "BOOL_AND_TK", "BOOL_OR_TK", "EQ_TK", "NEQ_TK", "GT_TK", "GTE_TK",
! "LT_TK", "LTE_TK", "PLUS_ASSIGN_TK", "MINUS_ASSIGN_TK",
! "MULT_ASSIGN_TK", "DIV_ASSIGN_TK", "REM_ASSIGN_TK", "LS_ASSIGN_TK",
! "SRS_ASSIGN_TK", "ZRS_ASSIGN_TK", "AND_ASSIGN_TK", "XOR_ASSIGN_TK",
! "OR_ASSIGN_TK", "PUBLIC_TK", "PRIVATE_TK", "PROTECTED_TK", "STATIC_TK",
! "FINAL_TK", "SYNCHRONIZED_TK", "VOLATILE_TK", "TRANSIENT_TK",
! "NATIVE_TK", "PAD_TK", "ABSTRACT_TK", "STRICT_TK", "MODIFIER_TK",
! "DECR_TK", "INCR_TK", "DEFAULT_TK", "IF_TK", "THROW_TK", "BOOLEAN_TK",
! "DO_TK", "IMPLEMENTS_TK", "THROWS_TK", "BREAK_TK", "IMPORT_TK",
! "ELSE_TK", "INSTANCEOF_TK", "RETURN_TK", "VOID_TK", "CATCH_TK",
! "INTERFACE_TK", "CASE_TK", "EXTENDS_TK", "FINALLY_TK", "SUPER_TK",
! "WHILE_TK", "CLASS_TK", "SWITCH_TK", "CONST_TK", "TRY_TK", "FOR_TK",
! "NEW_TK", "CONTINUE_TK", "GOTO_TK", "PACKAGE_TK", "THIS_TK",
! "ASSERT_TK", "BYTE_TK", "SHORT_TK", "INT_TK", "LONG_TK", "CHAR_TK",
! "INTEGRAL_TK", "FLOAT_TK", "DOUBLE_TK", "FP_TK", "ID_TK", "REL_QM_TK",
! "REL_CL_TK", "NOT_TK", "NEG_TK", "ASSIGN_ANY_TK", "ASSIGN_TK", "OP_TK",
! "CP_TK", "OCB_TK", "CCB_TK", "OSB_TK", "CSB_TK", "SC_TK", "C_TK",
! "DOT_TK", "STRING_LIT_TK", "CHAR_LIT_TK", "INT_LIT_TK", "FP_LIT_TK",
! "TRUE_TK", "FALSE_TK", "BOOL_LIT_TK", "NULL_TK", "$accept", "goal",
! "literal", "type", "primitive_type", "reference_type",
! "class_or_interface_type", "class_type", "interface_type", "array_type",
! "name", "simple_name", "qualified_name", "identifier",
! "compilation_unit", "import_declarations", "type_declarations",
! "package_declaration", "import_declaration",
! "single_type_import_declaration", "type_import_on_demand_declaration",
! "type_declaration", "modifiers", "class_declaration", "@1", "@2",
! "super", "interfaces", "interface_type_list", "class_body",
! "class_body_declarations", "class_body_declaration",
! "class_member_declaration", "field_declaration", "variable_declarators",
! "variable_declarator", "variable_declarator_id", "variable_initializer",
! "method_declaration", "@3", "method_header", "method_declarator",
! "formal_parameter_list", "formal_parameter", "final", "throws",
! "class_type_list", "method_body", "static_initializer", "static",
! "constructor_declaration", "@4", "constructor_header",
! "constructor_declarator", "constructor_body", "constructor_block_end",
! "explicit_constructor_invocation", "this_or_super",
! "interface_declaration", "@5", "@6", "@7", "@8", "extends_interfaces",
! "interface_body", "interface_member_declarations",
! "interface_member_declaration", "constant_declaration",
! "abstract_method_declaration", "array_initializer",
! "variable_initializers", "block", "block_begin", "block_end",
! "block_statements", "block_statement",
! "local_variable_declaration_statement", "local_variable_declaration",
! "statement", "statement_nsi", "statement_without_trailing_substatement",
! "empty_statement", "label_decl", "labeled_statement",
! "labeled_statement_nsi", "expression_statement", "statement_expression",
! "if_then_statement", "if_then_else_statement",
! "if_then_else_statement_nsi", "switch_statement", "@9",
! "switch_expression", "switch_block", "switch_block_statement_groups",
! "switch_block_statement_group", "switch_labels", "switch_label",
! "while_expression", "while_statement", "while_statement_nsi",
! "do_statement_begin", "do_statement", "for_statement",
! "for_statement_nsi", "for_header", "for_begin", "for_init",
! "for_update", "statement_expression_list", "break_statement",
! "continue_statement", "return_statement", "throw_statement",
! "assert_statement", "synchronized_statement", "synchronized",
! "try_statement", "catches", "catch_clause", "catch_clause_parameter",
! "finally", "primary", "primary_no_new_array", "type_literals",
! "class_instance_creation_expression", "anonymous_class_creation", "@10",
! "@11", "something_dot_new", "argument_list",
! "array_creation_uninitialized", "array_creation_initialized",
! "dim_exprs", "dim_expr", "dims", "field_access", "method_invocation",
! "array_access", "postfix_expression", "post_increment_expression",
! "post_decrement_expression", "trap_overflow_corner_case",
! "unary_expression", "pre_increment_expression",
! "pre_decrement_expression", "unary_expression_not_plus_minus",
! "cast_expression", "multiplicative_expression", "additive_expression",
! "shift_expression", "relational_expression", "equality_expression",
! "and_expression", "exclusive_or_expression", "inclusive_or_expression",
! "conditional_and_expression", "conditional_or_expression",
! "conditional_expression", "assignment_expression", "assignment",
! "left_hand_side", "assignment_operator", "expression",
"constant_expression", 0
};
#endif
*************** static const char *const yytname[] =
*** 1289,1295 ****
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short int yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
--- 1288,1294 ----
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
*************** static const unsigned short int yytoknum
*** 1307,1313 ****
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short int yyr1[] =
{
0, 112, 113, 114, 114, 114, 114, 114, 114, 115,
115, 116, 116, 116, 117, 117, 118, 119, 120, 121,
--- 1306,1312 ----
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short yyr1[] =
{
0, 112, 113, 114, 114, 114, 114, 114, 114, 115,
115, 116, 116, 116, 117, 117, 118, 119, 120, 121,
*************** static const unsigned char yyr2[] =
*** 1423,1429 ****
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
! static const unsigned short int yydefact[] =
{
0, 52, 53, 0, 0, 0, 0, 221, 0, 2,
0, 0, 0, 34, 41, 42, 36, 0, 49, 50,
--- 1422,1428 ----
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
! static const unsigned short yydefact[] =
{
0, 52, 53, 0, 0, 0, 0, 221, 0, 2,
0, 0, 0, 34, 41, 42, 36, 0, 49, 50,
*************** static const unsigned short int yydefact
*** 1508,1514 ****
};
/* YYDEFGOTO[NTERM-NUM]. */
! static const short int yydefgoto[] =
{
-1, 8, 211, 285, 212, 88, 89, 71, 63, 213,
214, 24, 25, 26, 9, 10, 11, 12, 13, 14,
--- 1507,1513 ----
};
/* YYDEFGOTO[NTERM-NUM]. */
! static const short yydefgoto[] =
{
-1, 8, 211, 285, 212, 88, 89, 71, 63, 213,
214, 24, 25, 26, 9, 10, 11, 12, 13, 14,
*************** static const short int yydefgoto[] =
*** 1532,1538 ****
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -641
! static const short int yypact[] =
{
472, -641, -641, 313, -38, 413, 435, -641, 85, -641,
364, 161, 670, -641, -641, -641, -641, 617, -641, -641,
--- 1531,1537 ----
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -641
! static const short yypact[] =
{
472, -641, -641, 313, -38, 413, 435, -641, 85, -641,
364, 161, 670, -641, -641, -641, -641, 617, -641, -641,
*************** static const short int yypact[] =
*** 1617,1623 ****
};
/* YYPGOTO[NTERM-NUM]. */
! static const short int yypgoto[] =
{
-641, -641, -641, -39, -58, 676, 23, -112, -13, -57,
-3, 531, -641, 144, -641, 1065, 609, -641, 60, -641,
--- 1616,1622 ----
};
/* YYPGOTO[NTERM-NUM]. */
! static const short yypgoto[] =
{
-641, -641, -641, -39, -58, 676, 23, -112, -13, -57,
-3, 531, -641, 144, -641, 1065, 609, -641, 60, -641,
*************** static const short int yypgoto[] =
*** 1643,1649 ****
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -513
! static const short int yytable[] =
{
23, 449, 176, 31, 152, 368, 183, 87, 90, 173,
460, 17, 296, 467, 122, 335, 627, 598, 295, 41,
--- 1642,1648 ----
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -513
! static const short yytable[] =
{
23, 449, 176, 31, 152, 368, 183, 87, 90, 173,
460, 17, 296, 467, 122, 335, 627, 598, 295, 41,
*************** static const short int yytable[] =
*** 2218,2224 ****
207, 208, 0, 0, 209, 210
};
! static const short int yycheck[] =
{
3, 296, 135, 6, 126, 204, 136, 65, 65, 132,
316, 0, 174, 337, 87, 179, 492, 447, 174, 1,
--- 2217,2223 ----
207, 208, 0, 0, 209, 210
};
! static const short yycheck[] =
{
3, 296, 135, 6, 126, 204, 136, 65, 65, 132,
316, 0, 174, 337, 87, 179, 492, 447, 174, 1,
*************** static const short int yycheck[] =
*** 2795,2801 ****
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
! static const unsigned short int yystos[] =
{
0, 1, 45, 56, 62, 68, 76, 101, 113, 126,
127, 128, 129, 130, 131, 132, 133, 134, 135, 170,
--- 2794,2800 ----
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
! static const unsigned short yystos[] =
{
0, 1, 45, 56, 62, 68, 76, 101, 113, 126,
127, 128, 129, 130, 131, 132, 133, 134, 135, 170,
*************** static const unsigned short int yystos[]
*** 2902,2909 ****
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrorlab
!
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
--- 2901,2907 ----
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
*************** do \
*** 2930,2982 ****
} \
while (0)
-
#define YYTERROR 1
#define YYERRCODE 256
- /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
- #define YYRHSLOC(Rhs, K) ((Rhs)[K])
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! do \
! if (N) \
! { \
! (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
! (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
! (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
! (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
! } \
! else \
! { \
! (Current).first_line = (Current).last_line = \
! YYRHSLOC (Rhs, 0).last_line; \
! (Current).first_column = (Current).last_column = \
! YYRHSLOC (Rhs, 0).last_column; \
! } \
! while (0)
! #endif
!
!
! /* YY_LOCATION_PRINT -- Print the location on the stream.
! This macro was not mandated originally: define only if we know
! we won't break user code: when these are the locations we know. */
!
! #ifndef YY_LOCATION_PRINT
! # if YYLTYPE_IS_TRIVIAL
! # define YY_LOCATION_PRINT(File, Loc) \
! fprintf (File, "%d.%d-%d.%d", \
! (Loc).first_line, (Loc).first_column, \
! (Loc).last_line, (Loc).last_column)
! # else
! # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
! # endif
#endif
-
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
--- 2928,2947 ----
} \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
+ /* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run). */
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! Current.first_line = Rhs[1].first_line; \
! Current.first_column = Rhs[1].first_column; \
! Current.last_line = Rhs[N].last_line; \
! Current.last_column = Rhs[N].last_column;
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
*************** do { \
*** 2999,3028 ****
YYFPRINTF Args; \
} while (0)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Type, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (included). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short int *bottom, short int *top)
#else
static void
yy_stack_print (bottom, top)
! short int *bottom;
! short int *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
--- 2964,2999 ----
YYFPRINTF Args; \
} while (0)
! # define YYDSYMPRINT(Args) \
! do { \
! if (yydebug) \
! yysymprint Args; \
! } while (0)
!
! # define YYDSYMPRINTF(Title, Token, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Token, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (cinluded). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short *bottom, short *top)
#else
static void
yy_stack_print (bottom, top)
! short *bottom;
! short *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
*************** yy_reduce_print (yyrule)
*** 3052,3060 ****
#endif
{
int yyi;
! unsigned int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
--- 3023,3031 ----
#endif
{
int yyi;
! unsigned int yylineno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylineno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
*************** do { \
*** 3072,3078 ****
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
--- 3043,3050 ----
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YYDSYMPRINT(Args)
! # define YYDSYMPRINTF(Title, Token, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
*************** int yydebug;
*** 3090,3095 ****
--- 3062,3071 ----
SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
evaluated with infinite-precision integer arithmetic. */
+ #if YYMAXDEPTH == 0
+ # undef YYMAXDEPTH
+ #endif
+
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 3171,3185 ****
(void) yyvaluep;
if (yytype < YYNTOKENS)
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- # ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
- # endif
switch (yytype)
{
default:
--- 3147,3161 ----
(void) yyvaluep;
if (yytype < YYNTOKENS)
! {
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
! # ifdef YYPRINT
! YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
! # endif
! }
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
switch (yytype)
{
default:
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 3195,3205 ****
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yymsg, yytype, yyvaluep)
! const char *yymsg;
int yytype;
YYSTYPE *yyvaluep;
#endif
--- 3171,3180 ----
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yytype, yyvaluep)
int yytype;
YYSTYPE *yyvaluep;
#endif
*************** yydestruct (yymsg, yytype, yyvaluep)
*** 3207,3216 ****
/* Pacify ``unused variable'' warnings. */
(void) yyvaluep;
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
switch (yytype)
{
--- 3182,3187 ----
*************** yyparse ()
*** 3263,3272 ****
#endif
#endif
{
! /* The look-ahead symbol. */
int yychar;
! /* The semantic value of the look-ahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
--- 3234,3243 ----
#endif
#endif
{
! /* The lookahead symbol. */
int yychar;
! /* The semantic value of the lookahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
*************** int yynerrs;
*** 3277,3283 ****
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Look-ahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
--- 3248,3254 ----
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Lookahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
*************** int yynerrs;
*** 3289,3297 ****
to reallocate them elsewhere. */
/* The state stack. */
! short int yyssa[YYINITDEPTH];
! short int *yyss = yyssa;
! register short int *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
--- 3260,3268 ----
to reallocate them elsewhere. */
/* The state stack. */
! short yyssa[YYINITDEPTH];
! short *yyss = yyssa;
! register short *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
*************** int yynerrs;
*** 3328,3336 ****
yyssp = yyss;
yyvsp = yyvs;
-
- yyvsp[0] = yylval;
-
goto yysetstate;
/*------------------------------------------------------------.
--- 3299,3304 ----
*************** int yynerrs;
*** 3356,3362 ****
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short int *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
--- 3324,3330 ----
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
*************** int yynerrs;
*** 3384,3390 ****
yystacksize = YYMAXDEPTH;
{
! short int *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
--- 3352,3358 ----
yystacksize = YYMAXDEPTH;
{
! short *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
*************** int yynerrs;
*** 3420,3437 ****
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a look-ahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to look-ahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a look-ahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
--- 3388,3405 ----
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a lookahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a lookahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
*************** yybackup:
*** 3446,3452 ****
else
{
yytoken = YYTRANSLATE (yychar);
! YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
--- 3414,3420 ----
else
{
yytoken = YYTRANSLATE (yychar);
! YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
*************** yybackup:
*** 3466,3473 ****
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the look-ahead token. */
! YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
--- 3434,3441 ----
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the lookahead token. */
! YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
*************** yyreduce:
*** 3517,3593 ****
switch (yyn)
{
case 2:
! #line 626 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{;}
break;
case 19:
! #line 670 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
int osb = pop_current_osb (ctxp);
! tree t = build_java_array_type (((yyvsp[-1].node)), -1);
while (--osb)
t = build_unresolved_array_type (t);
! (yyval.node) = t;
;}
break;
case 20:
! #line 678 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
int osb = pop_current_osb (ctxp);
! tree t = (yyvsp[-1].node);
while (osb--)
t = build_unresolved_array_type (t);
! (yyval.node) = t;
;}
break;
case 24:
! #line 699 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = make_qualified_name ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;}
break;
case 26:
! #line 708 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = NULL;;}
break;
case 34:
! #line 720 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = NULL;
;}
break;
case 35:
! #line 724 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = NULL;
;}
break;
case 38:
! #line 736 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! ctxp->package = EXPR_WFL_NODE ((yyvsp[-1].node));
;}
break;
case 39:
! #line 740 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing name"); RECOVER;;}
break;
case 40:
! #line 742 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 43:
! #line 752 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! tree name = EXPR_WFL_NODE ((yyvsp[-1].node)), last_name;
int i = IDENTIFIER_LENGTH (name)-1;
const char *last = &IDENTIFIER_POINTER (name)[i];
while (last != IDENTIFIER_POINTER (name))
--- 3485,3561 ----
switch (yyn)
{
case 2:
! #line 626 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{;}
break;
case 19:
! #line 670 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
int osb = pop_current_osb (ctxp);
! tree t = build_java_array_type ((yyvsp[-1].node), -1);
while (--osb)
t = build_unresolved_array_type (t);
! yyval.node = t;
;}
break;
case 20:
! #line 678 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
int osb = pop_current_osb (ctxp);
! tree t = yyvsp[-1].node;
while (osb--)
t = build_unresolved_array_type (t);
! yyval.node = t;
;}
break;
case 24:
! #line 699 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = make_qualified_name (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;}
break;
case 26:
! #line 708 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = NULL;;}
break;
case 34:
! #line 720 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = NULL;
;}
break;
case 35:
! #line 724 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = NULL;
;}
break;
case 38:
! #line 736 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! ctxp->package = EXPR_WFL_NODE (yyvsp[-1].node);
;}
break;
case 39:
! #line 740 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing name"); RECOVER;;}
break;
case 40:
! #line 742 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 43:
! #line 752 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! tree name = EXPR_WFL_NODE (yyvsp[-1].node), last_name;
int i = IDENTIFIER_LENGTH (name)-1;
const char *last = &IDENTIFIER_POINTER (name)[i];
while (last != IDENTIFIER_POINTER (name))
*************** yyreduce:
*** 3602,3632 ****
tree err = find_name_in_single_imports (last_name);
if (err && err != name)
parse_error_context
! ((yyvsp[-1].node), "Ambiguous class: %qs and %qs",
IDENTIFIER_POINTER (name),
IDENTIFIER_POINTER (err));
else
! REGISTER_IMPORT ((yyvsp[-1].node), last_name);
}
else
! REGISTER_IMPORT ((yyvsp[-1].node), last_name);
;}
break;
case 44:
! #line 778 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing name"); RECOVER;;}
break;
case 45:
! #line 780 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 46:
! #line 785 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! tree name = EXPR_WFL_NODE ((yyvsp[-3].node));
tree it;
/* Search for duplicates. */
for (it = ctxp->import_demand_list; it; it = TREE_CHAIN (it))
--- 3570,3600 ----
tree err = find_name_in_single_imports (last_name);
if (err && err != name)
parse_error_context
! (yyvsp[-1].node, "Ambiguous class: %qs and %qs",
IDENTIFIER_POINTER (name),
IDENTIFIER_POINTER (err));
else
! REGISTER_IMPORT (yyvsp[-1].node, last_name);
}
else
! REGISTER_IMPORT (yyvsp[-1].node, last_name);
;}
break;
case 44:
! #line 778 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing name"); RECOVER;;}
break;
case 45:
! #line 780 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 46:
! #line 785 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! tree name = EXPR_WFL_NODE (yyvsp[-3].node);
tree it;
/* Search for duplicates. */
for (it = ctxp->import_demand_list; it; it = TREE_CHAIN (it))
*************** yyreduce:
*** 3636,3671 ****
duplicates (7.5.2) */
if (! it)
{
! read_import_dir ((yyvsp[-3].node));
ctxp->import_demand_list =
chainon (ctxp->import_demand_list,
! build_tree_list ((yyvsp[-3].node), NULL_TREE));
}
;}
break;
case 47:
! #line 803 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'*' expected"); RECOVER;;}
break;
case 48:
! #line 805 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 49:
! #line 810 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ end_class_declaration (0); ;}
break;
case 50:
! #line 812 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ end_class_declaration (0); ;}
break;
case 52:
! #line 815 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
YYERROR_NOW;
yyerror ("Class or interface declaration expected");
--- 3604,3639 ----
duplicates (7.5.2) */
if (! it)
{
! read_import_dir (yyvsp[-3].node);
ctxp->import_demand_list =
chainon (ctxp->import_demand_list,
! build_tree_list (yyvsp[-3].node, NULL_TREE));
}
;}
break;
case 47:
! #line 803 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'*' expected"); RECOVER;;}
break;
case 48:
! #line 805 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 49:
! #line 810 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ end_class_declaration (0); ;}
break;
case 50:
! #line 812 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ end_class_declaration (0); ;}
break;
case 52:
! #line 815 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
YYERROR_NOW;
yyerror ("Class or interface declaration expected");
*************** yyreduce:
*** 3673,3731 ****
break;
case 53:
! #line 826 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.value) = (1 << (yyvsp[0].value));
;}
break;
case 54:
! #line 830 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! int acc = (1 << (yyvsp[0].value));
! if ((yyval.value) & acc)
parse_error_context
! (ctxp->modifier_ctx [(yyvsp[0].value)], "Modifier %qs declared twice",
java_accstring_lookup (acc));
else
{
! (yyval.value) |= acc;
}
;}
break;
case 55:
! #line 846 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { create_class ((yyvsp[-4].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 56:
! #line 848 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{;;}
break;
case 57:
! #line 850 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { create_class (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 58:
! #line 852 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{;;}
break;
case 59:
! #line 854 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ yyerror ("Missing class name"); RECOVER; ;}
break;
case 60:
! #line 856 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ yyerror ("Missing class name"); RECOVER; ;}
break;
case 61:
! #line 858 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
if (!ctxp->class_err) yyerror ("'{' expected");
DRECOVER(class1);
--- 3641,3699 ----
break;
case 53:
! #line 826 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.value = (1 << yyvsp[0].value);
;}
break;
case 54:
! #line 830 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! int acc = (1 << yyvsp[0].value);
! if (yyval.value & acc)
parse_error_context
! (ctxp->modifier_ctx [yyvsp[0].value], "Modifier %qs declared twice",
java_accstring_lookup (acc));
else
{
! yyval.value |= acc;
}
;}
break;
case 55:
! #line 846 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { create_class (yyvsp[-4].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 56:
! #line 848 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{;;}
break;
case 57:
! #line 850 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { create_class (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 58:
! #line 852 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{;;}
break;
case 59:
! #line 854 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ yyerror ("Missing class name"); RECOVER; ;}
break;
case 60:
! #line 856 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ yyerror ("Missing class name"); RECOVER; ;}
break;
case 61:
! #line 858 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
if (!ctxp->class_err) yyerror ("'{' expected");
DRECOVER(class1);
*************** yyreduce:
*** 3733,3774 ****
break;
case 62:
! #line 863 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER; ;}
break;
case 63:
! #line 867 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL; ;}
break;
case 64:
! #line 869 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 65:
! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'{' expected"); ctxp->class_err=1;;}
break;
case 66:
! #line 873 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing super class name"); ctxp->class_err=1;;}
break;
case 67:
! #line 877 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 68:
! #line 879 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 69:
! #line 881 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->class_err=1;
yyerror ("Missing interface name");
--- 3701,3742 ----
break;
case 62:
! #line 863 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER; ;}
break;
case 63:
! #line 867 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL; ;}
break;
case 64:
! #line 869 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 65:
! #line 871 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'{' expected"); ctxp->class_err=1;;}
break;
case 66:
! #line 873 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing super class name"); ctxp->class_err=1;;}
break;
case 67:
! #line 877 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 68:
! #line 879 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 69:
! #line 881 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->class_err=1;
yyerror ("Missing interface name");
*************** yyreduce:
*** 3776,3913 ****
break;
case 70:
! #line 889 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->interface_number = 1;
! (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE);
;}
break;
case 71:
! #line 894 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->interface_number++;
! (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE));
;}
break;
case 72:
! #line 899 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing interface name"); RECOVER;;}
break;
case 73:
! #line 904 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* Store the location of the `}' when doing xrefs */
if (flag_emit_xref)
! DECL_END_SOURCE_LINE (GET_CPC ()) = (yyvsp[0].operator).location;
! (yyval.node) = GET_CPC ();
;}
break;
case 74:
! #line 911 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* Store the location of the `}' when doing xrefs */
if (flag_emit_xref)
! DECL_END_SOURCE_LINE (GET_CPC ()) = (yyvsp[0].operator).location;
! (yyval.node) = GET_CPC ();
;}
break;
case 80:
! #line 929 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! if (!IS_EMPTY_STMT ((yyvsp[0].node)))
{
! TREE_CHAIN ((yyvsp[0].node)) = CPC_INSTANCE_INITIALIZER_STMT (ctxp);
! SET_CPC_INSTANCE_INITIALIZER_STMT (ctxp, (yyvsp[0].node));
}
;}
break;
case 83:
! #line 942 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ end_class_declaration (1); ;}
break;
case 84:
! #line 944 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ end_class_declaration (1); ;}
break;
case 86:
! #line 951 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { register_fields (0, (yyvsp[-2].node), (yyvsp[-1].node)); ;}
break;
case 87:
! #line 953 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
check_modifiers
("Illegal modifier %qs for field declaration",
! (yyvsp[-3].value), FIELD_MODIFIERS);
! check_modifiers_consistency ((yyvsp[-3].value));
! register_fields ((yyvsp[-3].value), (yyvsp[-2].node), (yyvsp[-1].node));
;}
break;
case 89:
! #line 966 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node)); ;}
break;
case 90:
! #line 968 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 91:
! #line 973 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); ;}
break;
case 92:
! #line 975 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
if (java_error_count)
! (yyvsp[0].node) = NULL_TREE;
! (yyval.node) = build_tree_list
! ((yyvsp[-2].node), build_assignment ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)));
;}
break;
case 93:
! #line 982 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Missing variable initializer");
! (yyval.node) = build_tree_list ((yyvsp[-2].node), NULL_TREE);
RECOVER;
;}
break;
case 94:
! #line 988 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("';' expected");
! (yyval.node) = build_tree_list ((yyvsp[-3].node), NULL_TREE);
RECOVER;
;}
break;
case 96:
! #line 998 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_unresolved_array_type ((yyvsp[-2].node)); ;}
break;
case 97:
! #line 1000 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Invalid declaration"); DRECOVER(vdi);;}
break;
case 98:
! #line 1002 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("']' expected");
DRECOVER(vdi);
--- 3744,3881 ----
break;
case 70:
! #line 889 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->interface_number = 1;
! yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
;}
break;
case 71:
! #line 894 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->interface_number++;
! yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
;}
break;
case 72:
! #line 899 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing interface name"); RECOVER;;}
break;
case 73:
! #line 904 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* Store the location of the `}' when doing xrefs */
if (flag_emit_xref)
! DECL_END_SOURCE_LINE (GET_CPC ()) = yyvsp[0].operator.location;
! yyval.node = GET_CPC ();
;}
break;
case 74:
! #line 911 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* Store the location of the `}' when doing xrefs */
if (flag_emit_xref)
! DECL_END_SOURCE_LINE (GET_CPC ()) = yyvsp[0].operator.location;
! yyval.node = GET_CPC ();
;}
break;
case 80:
! #line 929 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! if (!IS_EMPTY_STMT (yyvsp[0].node))
{
! TREE_CHAIN (yyvsp[0].node) = CPC_INSTANCE_INITIALIZER_STMT (ctxp);
! SET_CPC_INSTANCE_INITIALIZER_STMT (ctxp, yyvsp[0].node);
}
;}
break;
case 83:
! #line 942 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ end_class_declaration (1); ;}
break;
case 84:
! #line 944 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ end_class_declaration (1); ;}
break;
case 86:
! #line 951 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { register_fields (0, yyvsp[-2].node, yyvsp[-1].node); ;}
break;
case 87:
! #line 953 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
check_modifiers
("Illegal modifier %qs for field declaration",
! yyvsp[-3].value, FIELD_MODIFIERS);
! check_modifiers_consistency (yyvsp[-3].value);
! register_fields (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node);
;}
break;
case 89:
! #line 966 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node); ;}
break;
case 90:
! #line 968 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 91:
! #line 973 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE); ;}
break;
case 92:
! #line 975 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
if (java_error_count)
! yyvsp[0].node = NULL_TREE;
! yyval.node = build_tree_list
! (yyvsp[-2].node, build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node));
;}
break;
case 93:
! #line 982 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Missing variable initializer");
! yyval.node = build_tree_list (yyvsp[-2].node, NULL_TREE);
RECOVER;
;}
break;
case 94:
! #line 988 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("';' expected");
! yyval.node = build_tree_list (yyvsp[-3].node, NULL_TREE);
RECOVER;
;}
break;
case 96:
! #line 998 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;}
break;
case 97:
! #line 1000 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Invalid declaration"); DRECOVER(vdi);;}
break;
case 98:
! #line 1002 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("']' expected");
DRECOVER(vdi);
*************** yyreduce:
*** 3915,3928 ****
break;
case 99:
! #line 1007 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Unbalanced ']'"); DRECOVER(vdi);;}
break;
case 102:
! #line 1018 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! current_function_decl = (yyvsp[0].node);
if (current_function_decl
&& TREE_CODE (current_function_decl) == FUNCTION_DECL)
source_start_java_method (current_function_decl);
--- 3883,3896 ----
break;
case 99:
! #line 1007 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Unbalanced ']'"); DRECOVER(vdi);;}
break;
case 102:
! #line 1018 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! current_function_decl = yyvsp[0].node;
if (current_function_decl
&& TREE_CODE (current_function_decl) == FUNCTION_DECL)
source_start_java_method (current_function_decl);
*************** yyreduce:
*** 3932,3968 ****
break;
case 103:
! #line 1027 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { finish_method_declaration ((yyvsp[0].node)); ;}
break;
case 104:
! #line 1029 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;}
break;
case 105:
! #line 1034 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = method_header (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 106:
! #line 1036 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = method_header (0, void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 107:
! #line 1038 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = method_header ((yyvsp[-3].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 108:
! #line 1040 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = method_header ((yyvsp[-3].value), void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 109:
! #line 1042 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Invalid method declaration, method name required");
RECOVER;
--- 3900,3936 ----
break;
case 103:
! #line 1027 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { finish_method_declaration (yyvsp[0].node); ;}
break;
case 104:
! #line 1029 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;}
break;
case 105:
! #line 1034 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = method_header (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 106:
! #line 1036 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = method_header (0, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 107:
! #line 1038 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = method_header (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 108:
! #line 1040 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = method_header (yyvsp[-3].value, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 109:
! #line 1042 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Invalid method declaration, method name required");
RECOVER;
*************** yyreduce:
*** 3970,3976 ****
break;
case 110:
! #line 1047 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Identifier expected");
RECOVER;
--- 3938,3944 ----
break;
case 110:
! #line 1047 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Identifier expected");
RECOVER;
*************** yyreduce:
*** 3978,3984 ****
break;
case 111:
! #line 1052 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Identifier expected");
RECOVER;
--- 3946,3952 ----
break;
case 111:
! #line 1052 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Identifier expected");
RECOVER;
*************** yyreduce:
*** 3986,3992 ****
break;
case 112:
! #line 1057 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Identifier expected");
RECOVER;
--- 3954,3960 ----
break;
case 112:
! #line 1057 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Identifier expected");
RECOVER;
*************** yyreduce:
*** 3994,4000 ****
break;
case 113:
! #line 1062 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Invalid method declaration, return type required");
RECOVER;
--- 3962,3968 ----
break;
case 113:
! #line 1062 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Invalid method declaration, return type required");
RECOVER;
*************** yyreduce:
*** 4002,4025 ****
break;
case 114:
! #line 1070 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->formal_parameter_number = 0;
! (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE);
;}
break;
case 115:
! #line 1075 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
break;
case 116:
! #line 1077 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! SET_EXPR_LOCATION_FROM_TOKEN (wfl_operator, (yyvsp[-1].operator));
! TREE_PURPOSE ((yyvsp[-2].node)) =
! build_unresolved_array_type (TREE_PURPOSE ((yyvsp[-2].node)));
parse_warning_context
(wfl_operator,
"Discouraged form of returned type specification");
--- 3970,3993 ----
break;
case 114:
! #line 1070 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->formal_parameter_number = 0;
! yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE);
;}
break;
case 115:
! #line 1075 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;}
break;
case 116:
! #line 1077 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! SET_EXPR_LOCATION_FROM_TOKEN (wfl_operator, yyvsp[-1].operator);
! TREE_PURPOSE (yyvsp[-2].node) =
! build_unresolved_array_type (TREE_PURPOSE (yyvsp[-2].node));
parse_warning_context
(wfl_operator,
"Discouraged form of returned type specification");
*************** yyreduce:
*** 4027,4450 ****
break;
case 117:
! #line 1086 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("')' expected"); DRECOVER(method_declarator);;}
break;
case 118:
! #line 1088 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("']' expected"); RECOVER;;}
break;
case 119:
! #line 1093 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->formal_parameter_number = 1;
;}
break;
case 120:
! #line 1097 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->formal_parameter_number += 1;
! (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 121:
! #line 1102 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ yyerror ("Missing formal parameter term"); RECOVER; ;}
break;
case 122:
! #line 1107 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node));
;}
break;
case 123:
! #line 1111 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node));
! ARG_FINAL_P ((yyval.node)) = 1;
;}
break;
case 124:
! #line 1116 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Missing identifier"); RECOVER;
! (yyval.node) = NULL_TREE;
;}
break;
case 125:
! #line 1121 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Missing identifier"); RECOVER;
! (yyval.node) = NULL_TREE;
;}
break;
case 126:
! #line 1129 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
check_modifiers ("Illegal modifier %qs. Only % was expected here",
! (yyvsp[0].value), ACC_FINAL);
! if ((yyvsp[0].value) != ACC_FINAL)
MODIFIER_WFL (FINAL_TK) = build_wfl_node (NULL_TREE);
;}
break;
case 127:
! #line 1138 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 128:
! #line 1140 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 129:
! #line 1142 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing class type term"); RECOVER;;}
break;
case 130:
! #line 1147 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[0].node)); ;}
break;
case 131:
! #line 1149 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = tree_cons ((yyvsp[0].node), (yyvsp[0].node), (yyvsp[-2].node)); ;}
break;
case 132:
! #line 1151 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing class type term"); RECOVER;;}
break;
case 134:
! #line 1156 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 135:
! #line 1162 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! TREE_CHAIN ((yyvsp[0].node)) = CPC_STATIC_INITIALIZER_STMT (ctxp);
! SET_CPC_STATIC_INITIALIZER_STMT (ctxp, (yyvsp[0].node));
current_static_block = NULL_TREE;
;}
break;
case 136:
! #line 1171 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! check_modifiers ("Illegal modifier %qs for static initializer", (yyvsp[0].value), ACC_STATIC);
/* Can't have a static initializer in an innerclass */
! if ((yyvsp[0].value) | ACC_STATIC &&
GET_CPC_LIST () && !TOPLEVEL_CLASS_DECL_P (GET_CPC ()))
parse_error_context
(MODIFIER_WFL (STATIC_TK),
"Can't define static initializer in class %qs. Static initializer can only be defined in top-level classes",
IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())));
! SOURCE_FRONTEND_DEBUG (("Modifiers: %d", (yyvsp[0].value)));
;}
break;
case 137:
! #line 1187 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! current_function_decl = (yyvsp[0].node);
source_start_java_method (current_function_decl);
;}
break;
case 138:
! #line 1192 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { finish_method_declaration ((yyvsp[0].node)); ;}
break;
case 139:
! #line 1197 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = method_header (0, NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 140:
! #line 1199 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = method_header ((yyvsp[-2].value), NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 141:
! #line 1204 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->formal_parameter_number = 0;
! (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE);
;}
break;
case 142:
! #line 1209 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
break;
case 143:
! #line 1217 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! BLOCK_EXPR_BODY ((yyvsp[0].node)) = build_java_empty_stmt ();
! (yyval.node) = (yyvsp[0].node);
;}
break;
case 144:
! #line 1222 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 145:
! #line 1224 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 146:
! #line 1226 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 148:
! #line 1236 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_method_invocation ((yyvsp[-3].node), NULL_TREE);
! (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-3].node)), (yyval.node));
! (yyval.node) = java_method_add_stmt (current_function_decl, (yyval.node));
;}
break;
case 149:
! #line 1242 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_method_invocation ((yyvsp[-4].node), (yyvsp[-2].node));
! (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyval.node));
! (yyval.node) = java_method_add_stmt (current_function_decl, (yyval.node));
;}
break;
case 150:
! #line 1250 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;}
break;
case 151:
! #line 1252 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;}
break;
case 152:
! #line 1257 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
tree wfl = build_wfl_node (this_identifier_node);
! SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator));
! (yyval.node) = wfl;
;}
break;
case 153:
! #line 1263 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
tree wfl = build_wfl_node (super_identifier_node);
! SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator));
! (yyval.node) = wfl;
;}
break;
case 154:
! #line 1274 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { create_interface (0, (yyvsp[0].node), NULL_TREE); ;}
break;
case 155:
! #line 1276 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ ; ;}
break;
case 156:
! #line 1278 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { create_interface ((yyvsp[-2].value), (yyvsp[0].node), NULL_TREE); ;}
break;
case 157:
! #line 1280 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ ; ;}
break;
case 158:
! #line 1282 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { create_interface (0, (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 159:
! #line 1284 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ ; ;}
break;
case 160:
! #line 1286 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { create_interface ((yyvsp[-3].value), (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 161:
! #line 1288 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ ; ;}
break;
case 162:
! #line 1290 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ yyerror ("'{' expected"); RECOVER; ;}
break;
case 163:
! #line 1292 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ yyerror ("'{' expected"); RECOVER; ;}
break;
case 164:
! #line 1297 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->interface_number = 1;
! (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE);
;}
break;
case 165:
! #line 1302 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->interface_number++;
! (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE));
;}
break;
case 166:
! #line 1307 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Invalid interface type"); RECOVER;;}
break;
case 167:
! #line 1309 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 168:
! #line 1314 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 169:
! #line 1316 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 174:
! #line 1328 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ end_class_declaration (1); ;}
break;
case 175:
! #line 1330 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ end_class_declaration (1); ;}
break;
case 177:
! #line 1339 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! check_abstract_method_header ((yyvsp[-1].node));
current_function_decl = NULL_TREE; /* FIXME ? */
;}
break;
case 178:
! #line 1344 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 179:
! #line 1350 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_new_array_init ((yyvsp[-1].operator).location, NULL_TREE); ;}
break;
case 180:
! #line 1352 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, NULL_TREE); ;}
break;
case 181:
! #line 1354 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;}
break;
case 182:
! #line 1356 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_new_array_init ((yyvsp[-3].operator).location, (yyvsp[-2].node)); ;}
break;
case 183:
! #line 1361 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)),
! (yyvsp[0].node), NULL_TREE);
;}
break;
case 184:
! #line 1366 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)), (yyvsp[0].node), (yyvsp[-2].node));
;}
break;
case 185:
! #line 1370 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 186:
! #line 1376 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 187:
! #line 1378 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 188:
! #line 1383 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ enter_block (); ;}
break;
case 189:
! #line 1388 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
maybe_absorb_scoping_blocks ();
/* Store the location of the `}' when doing xrefs */
if (current_function_decl && flag_emit_xref)
! DECL_END_SOURCE_LINE (current_function_decl) = (yyvsp[0].operator).location;
! (yyval.node) = exit_block ();
! if (!BLOCK_SUBBLOCKS ((yyval.node)))
! BLOCK_SUBBLOCKS ((yyval.node)) = build_java_empty_stmt ();
;}
break;
case 193:
! #line 1407 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { java_method_add_stmt (current_function_decl, (yyvsp[0].node)); ;}
break;
case 194:
! #line 1409 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1;
end_class_declaration (1);
--- 3995,4418 ----
break;
case 117:
! #line 1086 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("')' expected"); DRECOVER(method_declarator);;}
break;
case 118:
! #line 1088 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("']' expected"); RECOVER;;}
break;
case 119:
! #line 1093 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->formal_parameter_number = 1;
;}
break;
case 120:
! #line 1097 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->formal_parameter_number += 1;
! yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 121:
! #line 1102 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ yyerror ("Missing formal parameter term"); RECOVER; ;}
break;
case 122:
! #line 1107 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
;}
break;
case 123:
! #line 1111 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
! ARG_FINAL_P (yyval.node) = 1;
;}
break;
case 124:
! #line 1116 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Missing identifier"); RECOVER;
! yyval.node = NULL_TREE;
;}
break;
case 125:
! #line 1121 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Missing identifier"); RECOVER;
! yyval.node = NULL_TREE;
;}
break;
case 126:
! #line 1129 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
check_modifiers ("Illegal modifier %qs. Only % was expected here",
! yyvsp[0].value, ACC_FINAL);
! if (yyvsp[0].value != ACC_FINAL)
MODIFIER_WFL (FINAL_TK) = build_wfl_node (NULL_TREE);
;}
break;
case 127:
! #line 1138 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 128:
! #line 1140 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 129:
! #line 1142 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing class type term"); RECOVER;;}
break;
case 130:
! #line 1147 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_tree_list (yyvsp[0].node, yyvsp[0].node); ;}
break;
case 131:
! #line 1149 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = tree_cons (yyvsp[0].node, yyvsp[0].node, yyvsp[-2].node); ;}
break;
case 132:
! #line 1151 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing class type term"); RECOVER;;}
break;
case 134:
! #line 1156 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 135:
! #line 1162 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! TREE_CHAIN (yyvsp[0].node) = CPC_STATIC_INITIALIZER_STMT (ctxp);
! SET_CPC_STATIC_INITIALIZER_STMT (ctxp, yyvsp[0].node);
current_static_block = NULL_TREE;
;}
break;
case 136:
! #line 1171 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! check_modifiers ("Illegal modifier %qs for static initializer", yyvsp[0].value, ACC_STATIC);
/* Can't have a static initializer in an innerclass */
! if (yyvsp[0].value | ACC_STATIC &&
GET_CPC_LIST () && !TOPLEVEL_CLASS_DECL_P (GET_CPC ()))
parse_error_context
(MODIFIER_WFL (STATIC_TK),
"Can't define static initializer in class %qs. Static initializer can only be defined in top-level classes",
IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())));
! SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[0].value));
;}
break;
case 137:
! #line 1187 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! current_function_decl = yyvsp[0].node;
source_start_java_method (current_function_decl);
;}
break;
case 138:
! #line 1192 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { finish_method_declaration (yyvsp[0].node); ;}
break;
case 139:
! #line 1197 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = method_header (0, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 140:
! #line 1199 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = method_header (yyvsp[-2].value, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 141:
! #line 1204 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->formal_parameter_number = 0;
! yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE);
;}
break;
case 142:
! #line 1209 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;}
break;
case 143:
! #line 1217 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! BLOCK_EXPR_BODY (yyvsp[0].node) = build_java_empty_stmt ();
! yyval.node = yyvsp[0].node;
;}
break;
case 144:
! #line 1222 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 145:
! #line 1224 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 146:
! #line 1226 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 148:
! #line 1236 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_method_invocation (yyvsp[-3].node, NULL_TREE);
! yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-3].node), yyval.node);
! yyval.node = java_method_add_stmt (current_function_decl, yyval.node);
;}
break;
case 149:
! #line 1242 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_method_invocation (yyvsp[-4].node, yyvsp[-2].node);
! yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-4].node), yyval.node);
! yyval.node = java_method_add_stmt (current_function_decl, yyval.node);
;}
break;
case 150:
! #line 1250 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;}
break;
case 151:
! #line 1252 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;}
break;
case 152:
! #line 1257 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
tree wfl = build_wfl_node (this_identifier_node);
! SET_EXPR_LOCATION_FROM_TOKEN (wfl, yyvsp[0].operator);
! yyval.node = wfl;
;}
break;
case 153:
! #line 1263 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
tree wfl = build_wfl_node (super_identifier_node);
! SET_EXPR_LOCATION_FROM_TOKEN (wfl, yyvsp[0].operator);
! yyval.node = wfl;
;}
break;
case 154:
! #line 1274 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { create_interface (0, yyvsp[0].node, NULL_TREE); ;}
break;
case 155:
! #line 1276 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ ; ;}
break;
case 156:
! #line 1278 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { create_interface (yyvsp[-2].value, yyvsp[0].node, NULL_TREE); ;}
break;
case 157:
! #line 1280 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ ; ;}
break;
case 158:
! #line 1282 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { create_interface (0, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 159:
! #line 1284 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ ; ;}
break;
case 160:
! #line 1286 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { create_interface (yyvsp[-3].value, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 161:
! #line 1288 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ ; ;}
break;
case 162:
! #line 1290 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ yyerror ("'{' expected"); RECOVER; ;}
break;
case 163:
! #line 1292 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ yyerror ("'{' expected"); RECOVER; ;}
break;
case 164:
! #line 1297 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->interface_number = 1;
! yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
;}
break;
case 165:
! #line 1302 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->interface_number++;
! yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
;}
break;
case 166:
! #line 1307 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Invalid interface type"); RECOVER;;}
break;
case 167:
! #line 1309 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 168:
! #line 1314 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 169:
! #line 1316 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 174:
! #line 1328 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ end_class_declaration (1); ;}
break;
case 175:
! #line 1330 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ end_class_declaration (1); ;}
break;
case 177:
! #line 1339 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! check_abstract_method_header (yyvsp[-1].node);
current_function_decl = NULL_TREE; /* FIXME ? */
;}
break;
case 178:
! #line 1344 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 179:
! #line 1350 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_new_array_init (yyvsp[-1].operator.location, NULL_TREE); ;}
break;
case 180:
! #line 1352 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_new_array_init (yyvsp[-2].operator.location, NULL_TREE); ;}
break;
case 181:
! #line 1354 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_new_array_init (yyvsp[-2].operator.location, yyvsp[-1].node); ;}
break;
case 182:
! #line 1356 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_new_array_init (yyvsp[-3].operator.location, yyvsp[-2].node); ;}
break;
case 183:
! #line 1361 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node),
! yyvsp[0].node, NULL_TREE);
;}
break;
case 184:
! #line 1366 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = tree_cons (maybe_build_array_element_wfl (yyvsp[0].node), yyvsp[0].node, yyvsp[-2].node);
;}
break;
case 185:
! #line 1370 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 186:
! #line 1376 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 187:
! #line 1378 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 188:
! #line 1383 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ enter_block (); ;}
break;
case 189:
! #line 1388 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
maybe_absorb_scoping_blocks ();
/* Store the location of the `}' when doing xrefs */
if (current_function_decl && flag_emit_xref)
! DECL_END_SOURCE_LINE (current_function_decl) = yyvsp[0].operator.location;
! yyval.node = exit_block ();
! if (!BLOCK_SUBBLOCKS (yyval.node))
! BLOCK_SUBBLOCKS (yyval.node) = build_java_empty_stmt ();
;}
break;
case 193:
! #line 1407 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { java_method_add_stmt (current_function_decl, yyvsp[0].node); ;}
break;
case 194:
! #line 1409 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1;
end_class_declaration (1);
*************** yyreduce:
*** 4452,4478 ****
break;
case 196:
! #line 1421 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { declare_local_variables (0, (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 197:
! #line 1423 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { declare_local_variables ((yyvsp[-2].value), (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 203:
! #line 1433 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = exit_block (); ;}
break;
case 208:
! #line 1442 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = exit_block (); ;}
break;
case 221:
! #line 1462 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
if (flag_extraneous_semicolon
&& ! current_static_block
--- 4420,4446 ----
break;
case 196:
! #line 1421 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { declare_local_variables (0, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 197:
! #line 1423 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { declare_local_variables (yyvsp[-2].value, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 203:
! #line 1433 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = exit_block (); ;}
break;
case 208:
! #line 1442 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = exit_block (); ;}
break;
case 221:
! #line 1462 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
if (flag_extraneous_semicolon
&& ! current_static_block
*************** yyreduce:
*** 4489,4534 ****
#endif
parse_warning_context (wfl_operator, "An empty declaration is a deprecated feature that should not be used");
}
! (yyval.node) = build_java_empty_stmt ();
;}
break;
case 222:
! #line 1484 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_labeled_block (EXPR_WFL_LINECOL ((yyvsp[-1].node)),
! EXPR_WFL_NODE ((yyvsp[-1].node)));
pushlevel (2);
! push_labeled_block ((yyval.node));
! PUSH_LABELED_BLOCK ((yyval.node));
;}
break;
case 223:
! #line 1495 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 224:
! #line 1497 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("':' expected"); RECOVER;;}
break;
case 225:
! #line 1502 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 226:
! #line 1509 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* We have a statement. Generate a WFL around it so
we can debug it */
#ifdef USE_MAPPED_LOCATION
! (yyval.node) = expr_add_location ((yyvsp[-1].node), input_location, 1);
#else
! (yyval.node) = build_expr_wfl ((yyvsp[-1].node), input_filename, input_line, 0);
! JAVA_MAYBE_GENERATE_DEBUG_INFO ((yyval.node));
#endif
/* We know we have a statement, so set the debug
info to be eventually generate here. */
--- 4457,4502 ----
#endif
parse_warning_context (wfl_operator, "An empty declaration is a deprecated feature that should not be used");
}
! yyval.node = build_java_empty_stmt ();
;}
break;
case 222:
! #line 1484 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_labeled_block (EXPR_WFL_LINECOL (yyvsp[-1].node),
! EXPR_WFL_NODE (yyvsp[-1].node));
pushlevel (2);
! push_labeled_block (yyval.node);
! PUSH_LABELED_BLOCK (yyval.node);
;}
break;
case 223:
! #line 1495 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 224:
! #line 1497 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("':' expected"); RECOVER;;}
break;
case 225:
! #line 1502 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = finish_labeled_statement (yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 226:
! #line 1509 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* We have a statement. Generate a WFL around it so
we can debug it */
#ifdef USE_MAPPED_LOCATION
! yyval.node = expr_add_location (yyvsp[-1].node, input_location, 1);
#else
! yyval.node = build_expr_wfl (yyvsp[-1].node, input_filename, input_line, 0);
! JAVA_MAYBE_GENERATE_DEBUG_INFO (yyval.node);
#endif
/* We know we have a statement, so set the debug
info to be eventually generate here. */
*************** yyreduce:
*** 4536,4542 ****
break;
case 227:
! #line 1522 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Invalid expression statement");
DRECOVER (expr_stmt);
--- 4504,4510 ----
break;
case 227:
! #line 1522 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Invalid expression statement");
DRECOVER (expr_stmt);
*************** yyreduce:
*** 4544,4550 ****
break;
case 228:
! #line 1527 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Invalid expression statement");
DRECOVER (expr_stmt);
--- 4512,4518 ----
break;
case 228:
! #line 1527 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Invalid expression statement");
DRECOVER (expr_stmt);
*************** yyreduce:
*** 4552,4558 ****
break;
case 229:
! #line 1532 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Invalid expression statement");
DRECOVER (expr_stmt);
--- 4520,4526 ----
break;
case 229:
! #line 1532 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Invalid expression statement");
DRECOVER (expr_stmt);
*************** yyreduce:
*** 4560,4571 ****
break;
case 230:
! #line 1537 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 231:
! #line 1539 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
parse_ctor_invocation_error ();
RECOVER;
--- 4528,4539 ----
break;
case 230:
! #line 1537 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 231:
! #line 1539 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
parse_ctor_invocation_error ();
RECOVER;
*************** yyreduce:
*** 4573,4584 ****
break;
case 232:
! #line 1544 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 233:
! #line 1546 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
parse_ctor_invocation_error ();
RECOVER;
--- 4541,4552 ----
break;
case 232:
! #line 1544 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 233:
! #line 1546 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
parse_ctor_invocation_error ();
RECOVER;
*************** yyreduce:
*** 4586,4841 ****
break;
case 234:
! #line 1551 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'(' expected"); RECOVER;;}
break;
case 235:
! #line 1553 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 236:
! #line 1555 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 237:
! #line 1557 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 238:
! #line 1559 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 246:
! #line 1574 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_if_else_statement ((yyvsp[-3].operator).location, (yyvsp[-2].node),
! (yyvsp[0].node), NULL_TREE);
;}
break;
case 247:
! #line 1579 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'(' expected"); RECOVER;;}
break;
case 248:
! #line 1581 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 249:
! #line 1583 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 250:
! #line 1588 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;}
break;
case 251:
! #line 1593 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;}
break;
case 252:
! #line 1598 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
enter_block ();
;}
break;
case 253:
! #line 1602 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* Make into "proper list" of COMPOUND_EXPRs.
I.e. make the last statement also have its own
COMPOUND_EXPR. */
maybe_absorb_scoping_blocks ();
! TREE_OPERAND ((yyvsp[-2].node), 1) = exit_block ();
! (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-2].node)), (yyvsp[-2].node));
;}
break;
case 254:
! #line 1614 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build3 (SWITCH_EXPR, NULL_TREE, (yyvsp[-1].node),
NULL_TREE, NULL_TREE);
! SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-2].operator));
;}
break;
case 255:
! #line 1620 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'(' expected"); RECOVER;;}
break;
case 256:
! #line 1622 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;}
break;
case 257:
! #line 1624 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'{' expected"); RECOVER;;}
break;
case 258:
! #line 1632 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 259:
! #line 1634 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 260:
! #line 1636 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 261:
! #line 1638 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = NULL_TREE; ;}
break;
case 267:
! #line 1657 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! tree lab = build1 (CASE_EXPR, NULL_TREE, (yyvsp[-1].node));
! SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-2].operator));
java_method_add_stmt (current_function_decl, lab);
;}
break;
case 268:
! #line 1663 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
tree lab = make_node (DEFAULT_EXPR);
! SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-1].operator));
java_method_add_stmt (current_function_decl, lab);
;}
break;
case 269:
! #line 1669 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing or invalid constant expression"); RECOVER;;}
break;
case 270:
! #line 1671 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("':' expected"); RECOVER;;}
break;
case 271:
! #line 1673 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("':' expected"); RECOVER;;}
break;
case 272:
! #line 1678 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! tree body = build_loop_body ((yyvsp[-2].operator).location, (yyvsp[-1].node), 0);
! (yyval.node) = build_new_loop (body);
;}
break;
case 273:
! #line 1686 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;}
break;
case 274:
! #line 1688 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;}
break;
case 275:
! #line 1690 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term and ')' expected"); RECOVER;;}
break;
case 276:
! #line 1692 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 277:
! #line 1697 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;}
break;
case 278:
! #line 1702 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
tree body = build_loop_body (0, NULL_TREE, 1);
! (yyval.node) = build_new_loop (body);
;}
break;
case 279:
! #line 1711 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = finish_loop_body ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[-5].node), 1); ;}
break;
case 280:
! #line 1716 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! if (CONSTANT_CLASS_P ((yyvsp[-4].node)))
! (yyvsp[-4].node) = build_wfl_node ((yyvsp[-4].node));
! (yyval.node) = finish_for_loop (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 281:
! #line 1722 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
/* We have not condition, so we get rid of the EXIT_EXPR */
! LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY ((yyval.node)), 0) =
build_java_empty_stmt ();
;}
break;
case 282:
! #line 1729 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Invalid control expression"); RECOVER;;}
break;
case 283:
! #line 1731 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Invalid update expression"); RECOVER;;}
break;
case 284:
! #line 1733 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Invalid update expression"); RECOVER;;}
break;
case 285:
! #line 1738 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = finish_for_loop (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));;}
break;
case 286:
! #line 1740 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
/* We have not condition, so we get rid of the EXIT_EXPR */
! LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY ((yyval.node)), 0) =
build_java_empty_stmt ();
;}
break;
case 287:
! #line 1750 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* This scope defined for local variable that may be
defined within the scope of the for loop */
--- 4554,4809 ----
break;
case 234:
! #line 1551 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'(' expected"); RECOVER;;}
break;
case 235:
! #line 1553 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 236:
! #line 1555 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 237:
! #line 1557 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 238:
! #line 1559 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 246:
! #line 1574 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_if_else_statement (yyvsp[-3].operator.location, yyvsp[-2].node,
! yyvsp[0].node, NULL_TREE);
;}
break;
case 247:
! #line 1579 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'(' expected"); RECOVER;;}
break;
case 248:
! #line 1581 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 249:
! #line 1583 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 250:
! #line 1588 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;}
break;
case 251:
! #line 1593 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;}
break;
case 252:
! #line 1598 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
enter_block ();
;}
break;
case 253:
! #line 1602 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* Make into "proper list" of COMPOUND_EXPRs.
I.e. make the last statement also have its own
COMPOUND_EXPR. */
maybe_absorb_scoping_blocks ();
! TREE_OPERAND (yyvsp[-2].node, 1) = exit_block ();
! yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-2].node), yyvsp[-2].node);
;}
break;
case 254:
! #line 1614 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build3 (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node,
NULL_TREE, NULL_TREE);
! SET_EXPR_LOCATION_FROM_TOKEN (yyval.node, yyvsp[-2].operator);
;}
break;
case 255:
! #line 1620 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'(' expected"); RECOVER;;}
break;
case 256:
! #line 1622 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;}
break;
case 257:
! #line 1624 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'{' expected"); RECOVER;;}
break;
case 258:
! #line 1632 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 259:
! #line 1634 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 260:
! #line 1636 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 261:
! #line 1638 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = NULL_TREE; ;}
break;
case 267:
! #line 1657 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! tree lab = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node);
! SET_EXPR_LOCATION_FROM_TOKEN (lab, yyvsp[-2].operator);
java_method_add_stmt (current_function_decl, lab);
;}
break;
case 268:
! #line 1663 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
tree lab = make_node (DEFAULT_EXPR);
! SET_EXPR_LOCATION_FROM_TOKEN (lab, yyvsp[-1].operator);
java_method_add_stmt (current_function_decl, lab);
;}
break;
case 269:
! #line 1669 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing or invalid constant expression"); RECOVER;;}
break;
case 270:
! #line 1671 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("':' expected"); RECOVER;;}
break;
case 271:
! #line 1673 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("':' expected"); RECOVER;;}
break;
case 272:
! #line 1678 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! tree body = build_loop_body (yyvsp[-2].operator.location, yyvsp[-1].node, 0);
! yyval.node = build_new_loop (body);
;}
break;
case 273:
! #line 1686 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;}
break;
case 274:
! #line 1688 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;}
break;
case 275:
! #line 1690 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term and ')' expected"); RECOVER;;}
break;
case 276:
! #line 1692 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 277:
! #line 1697 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = finish_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;}
break;
case 278:
! #line 1702 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
tree body = build_loop_body (0, NULL_TREE, 1);
! yyval.node = build_new_loop (body);
;}
break;
case 279:
! #line 1711 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = finish_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ;}
break;
case 280:
! #line 1716 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! if (CONSTANT_CLASS_P (yyvsp[-4].node))
! yyvsp[-4].node = build_wfl_node (yyvsp[-4].node);
! yyval.node = finish_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 281:
! #line 1722 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = finish_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
/* We have not condition, so we get rid of the EXIT_EXPR */
! LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY (yyval.node), 0) =
build_java_empty_stmt ();
;}
break;
case 282:
! #line 1729 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Invalid control expression"); RECOVER;;}
break;
case 283:
! #line 1731 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Invalid update expression"); RECOVER;;}
break;
case 284:
! #line 1733 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Invalid update expression"); RECOVER;;}
break;
case 285:
! #line 1738 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = finish_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);;}
break;
case 286:
! #line 1740 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = finish_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
/* We have not condition, so we get rid of the EXIT_EXPR */
! LOOP_EXPR_BODY_CONDITION_EXPR (LOOP_EXPR_BODY (yyval.node), 0) =
build_java_empty_stmt ();
;}
break;
case 287:
! #line 1750 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* This scope defined for local variable that may be
defined within the scope of the for loop */
*************** yyreduce:
*** 4844,5110 ****
break;
case 288:
! #line 1756 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'(' expected"); DRECOVER(for_1);;}
break;
case 289:
! #line 1758 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Invalid init statement"); RECOVER;;}
break;
case 290:
! #line 1763 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* We now declare the loop body. The loop is
declared as a for loop. */
tree body = build_loop_body (0, NULL_TREE, 0);
! (yyval.node) = build_new_loop (body);
! FOR_LOOP_P ((yyval.node)) = 1;
/* The loop is added to the current block the for
statement is defined within */
! java_method_add_stmt (current_function_decl, (yyval.node));
;}
break;
case 291:
! #line 1775 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_java_empty_stmt (); ;}
break;
case 292:
! #line 1777 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* Init statement recorded within the previously
defined block scope */
! (yyval.node) = java_method_add_stmt (current_function_decl, (yyvsp[0].node));
;}
break;
case 293:
! #line 1783 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* Local variable are recorded within the previously
defined block scope */
! (yyval.node) = NULL_TREE;
;}
break;
case 294:
! #line 1789 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); DRECOVER(for_init_1);;}
break;
case 295:
! #line 1793 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = build_java_empty_stmt ();;}
break;
case 296:
! #line 1795 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_debugable_stmt (BUILD_LOCATION (), (yyvsp[0].node)); ;}
break;
case 297:
! #line 1800 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = add_stmt_to_compound (NULL_TREE, NULL_TREE, (yyvsp[0].node)); ;}
break;
case 298:
! #line 1802 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = add_stmt_to_compound ((yyvsp[-2].node), NULL_TREE, (yyvsp[0].node)); ;}
break;
case 299:
! #line 1804 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 300:
! #line 1809 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 1, NULL_TREE); ;}
break;
case 301:
! #line 1811 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 1, (yyvsp[-1].node)); ;}
break;
case 302:
! #line 1813 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 303:
! #line 1815 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 304:
! #line 1820 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 0, NULL_TREE); ;}
break;
case 305:
! #line 1822 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 0, (yyvsp[-1].node)); ;}
break;
case 306:
! #line 1824 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 307:
! #line 1826 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 308:
! #line 1831 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_return ((yyvsp[-1].operator).location, NULL_TREE); ;}
break;
case 309:
! #line 1833 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_return ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;}
break;
case 310:
! #line 1835 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 311:
! #line 1837 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 312:
! #line 1842 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build1 (THROW_EXPR, NULL_TREE, (yyvsp[-1].node));
! SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-2].operator));
;}
break;
case 313:
! #line 1847 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 314:
! #line 1849 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 315:
! #line 1854 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_assertion ((yyvsp[-4].operator).location, (yyvsp[-3].node), (yyvsp[-1].node));
;}
break;
case 316:
! #line 1858 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_assertion ((yyvsp[-2].operator).location, (yyvsp[-1].node), NULL_TREE);
;}
break;
case 317:
! #line 1862 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 318:
! #line 1864 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 319:
! #line 1869 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build2 (SYNCHRONIZED_EXPR, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node));
! EXPR_WFL_LINECOL ((yyval.node)) =
EXPR_WFL_LINECOL (MODIFIER_WFL (SYNCHRONIZED_TK));
;}
break;
case 320:
! #line 1875 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'{' expected"); RECOVER;;}
break;
case 321:
! #line 1877 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'(' expected"); RECOVER;;}
break;
case 322:
! #line 1879 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 323:
! #line 1881 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 324:
! #line 1886 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
check_modifiers (
"Illegal modifier %qs. Only % was expected here",
! (yyvsp[0].value), ACC_SYNCHRONIZED);
! if ((yyvsp[0].value) != ACC_SYNCHRONIZED)
MODIFIER_WFL (SYNCHRONIZED_TK) =
build_wfl_node (NULL_TREE);
;}
break;
case 325:
! #line 1898 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_try_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 326:
! #line 1900 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_try_finally_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;}
break;
case 327:
! #line 1902 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_try_finally_statement
! ((yyvsp[-3].operator).location, build_try_statement ((yyvsp[-3].operator).location,
! (yyvsp[-2].node), (yyvsp[-1].node)), (yyvsp[0].node));
;}
break;
case 328:
! #line 1907 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'{' expected"); DRECOVER (try_statement);;}
break;
case 330:
! #line 1913 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! TREE_CHAIN ((yyvsp[0].node)) = (yyvsp[-1].node);
! (yyval.node) = (yyvsp[0].node);
;}
break;
case 331:
! #line 1921 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! java_method_add_stmt (current_function_decl, (yyvsp[0].node));
exit_block ();
! (yyval.node) = (yyvsp[-1].node);
;}
break;
case 332:
! #line 1930 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
/* We add a block to define a scope for
formal_parameter (CCBP). The formal parameter is
--- 4812,5078 ----
break;
case 288:
! #line 1756 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'(' expected"); DRECOVER(for_1);;}
break;
case 289:
! #line 1758 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Invalid init statement"); RECOVER;;}
break;
case 290:
! #line 1763 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* We now declare the loop body. The loop is
declared as a for loop. */
tree body = build_loop_body (0, NULL_TREE, 0);
! yyval.node = build_new_loop (body);
! FOR_LOOP_P (yyval.node) = 1;
/* The loop is added to the current block the for
statement is defined within */
! java_method_add_stmt (current_function_decl, yyval.node);
;}
break;
case 291:
! #line 1775 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_java_empty_stmt (); ;}
break;
case 292:
! #line 1777 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* Init statement recorded within the previously
defined block scope */
! yyval.node = java_method_add_stmt (current_function_decl, yyvsp[0].node);
;}
break;
case 293:
! #line 1783 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* Local variable are recorded within the previously
defined block scope */
! yyval.node = NULL_TREE;
;}
break;
case 294:
! #line 1789 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); DRECOVER(for_init_1);;}
break;
case 295:
! #line 1793 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = build_java_empty_stmt ();;}
break;
case 296:
! #line 1795 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ;}
break;
case 297:
! #line 1800 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ;}
break;
case 298:
! #line 1802 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ;}
break;
case 299:
! #line 1804 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 300:
! #line 1809 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ;}
break;
case 301:
! #line 1811 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ;}
break;
case 302:
! #line 1813 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 303:
! #line 1815 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 304:
! #line 1820 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ;}
break;
case 305:
! #line 1822 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ;}
break;
case 306:
! #line 1824 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 307:
! #line 1826 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 308:
! #line 1831 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ;}
break;
case 309:
! #line 1833 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ;}
break;
case 310:
! #line 1835 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 311:
! #line 1837 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 312:
! #line 1842 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build1 (THROW_EXPR, NULL_TREE, yyvsp[-1].node);
! SET_EXPR_LOCATION_FROM_TOKEN (yyval.node, yyvsp[-2].operator);
;}
break;
case 313:
! #line 1847 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 314:
! #line 1849 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 315:
! #line 1854 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_assertion (yyvsp[-4].operator.location, yyvsp[-3].node, yyvsp[-1].node);
;}
break;
case 316:
! #line 1858 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_assertion (yyvsp[-2].operator.location, yyvsp[-1].node, NULL_TREE);
;}
break;
case 317:
! #line 1862 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 318:
! #line 1864 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 319:
! #line 1869 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build2 (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
! EXPR_WFL_LINECOL (yyval.node) =
EXPR_WFL_LINECOL (MODIFIER_WFL (SYNCHRONIZED_TK));
;}
break;
case 320:
! #line 1875 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'{' expected"); RECOVER;;}
break;
case 321:
! #line 1877 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'(' expected"); RECOVER;;}
break;
case 322:
! #line 1879 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 323:
! #line 1881 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 324:
! #line 1886 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
check_modifiers (
"Illegal modifier %qs. Only % was expected here",
! yyvsp[0].value, ACC_SYNCHRONIZED);
! if (yyvsp[0].value != ACC_SYNCHRONIZED)
MODIFIER_WFL (SYNCHRONIZED_TK) =
build_wfl_node (NULL_TREE);
;}
break;
case 325:
! #line 1898 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 326:
! #line 1900 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_try_finally_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node); ;}
break;
case 327:
! #line 1902 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_try_finally_statement
! (yyvsp[-3].operator.location, build_try_statement (yyvsp[-3].operator.location,
! yyvsp[-2].node, yyvsp[-1].node), yyvsp[0].node);
;}
break;
case 328:
! #line 1907 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'{' expected"); DRECOVER (try_statement);;}
break;
case 330:
! #line 1913 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node;
! yyval.node = yyvsp[0].node;
;}
break;
case 331:
! #line 1921 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! java_method_add_stmt (current_function_decl, yyvsp[0].node);
exit_block ();
! yyval.node = yyvsp[-1].node;
;}
break;
case 332:
! #line 1930 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
/* We add a block to define a scope for
formal_parameter (CCBP). The formal parameter is
*************** yyreduce:
*** 5112,5277 ****
call */
tree ccpb;
tree init;
! if ((yyvsp[-1].node))
{
ccpb = enter_block ();
init = build_assignment
! (ASSIGN_TK, (yyvsp[-2].operator).location, TREE_PURPOSE ((yyvsp[-1].node)),
build0 (JAVA_EXC_OBJ_EXPR, ptr_type_node));
! declare_local_variables (0, TREE_VALUE ((yyvsp[-1].node)),
build_tree_list
! (TREE_PURPOSE ((yyvsp[-1].node)), init));
! (yyval.node) = build1 (JAVA_CATCH_EXPR, NULL_TREE, ccpb);
! SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-3].operator));
}
else
{
! (yyval.node) = error_mark_node;
}
;}
break;
case 333:
! #line 1955 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {yyerror ("'(' expected"); RECOVER; (yyval.node) = NULL_TREE;;}
break;
case 334:
! #line 1957 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Missing term or ')' expected");
! RECOVER; (yyval.node) = NULL_TREE;
;}
break;
case 335:
! #line 1962 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {yyerror ("Missing term"); RECOVER; (yyval.node) = NULL_TREE;;}
break;
case 336:
! #line 1967 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[0].node); ;}
break;
case 337:
! #line 1969 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'{' expected"); RECOVER; ;}
break;
case 342:
! #line 1982 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_this ((yyvsp[0].operator).location); ;}
break;
case 343:
! #line 1984 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = (yyvsp[-1].node);;}
break;
case 349:
! #line 1994 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
tree wfl = build_wfl_node (this_identifier_node);
! (yyval.node) = make_qualified_primary ((yyvsp[-2].node), wfl, EXPR_WFL_LINECOL ((yyvsp[-2].node)));
;}
break;
case 350:
! #line 1999 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 351:
! #line 2001 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'class' or 'this' expected" ); RECOVER;;}
break;
case 352:
! #line 2003 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'class' expected" ); RECOVER;;}
break;
case 353:
! #line 2005 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'class' expected" ); RECOVER;;}
break;
case 354:
! #line 2010 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
break;
case 355:
! #line 2012 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
break;
case 356:
! #line 2014 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;}
break;
case 357:
! #line 2016 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location,
void_type_node);
;}
break;
case 358:
! #line 2024 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
break;
case 359:
! #line 2026 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_new_invocation ((yyvsp[-2].node), NULL_TREE); ;}
break;
case 361:
! #line 2032 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! tree ctor = build_new_invocation ((yyvsp[-2].node), NULL_TREE);
! (yyval.node) = make_qualified_primary ((yyvsp[-3].node), ctor,
! EXPR_WFL_LINECOL ((yyvsp[-3].node)));
;}
break;
case 363:
! #line 2039 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! tree ctor = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node));
! (yyval.node) = make_qualified_primary ((yyvsp[-4].node), ctor,
! EXPR_WFL_LINECOL ((yyvsp[-4].node)));
;}
break;
case 365:
! #line 2046 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); DRECOVER(new_1);;}
break;
case 366:
! #line 2048 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;}
break;
case 367:
! #line 2050 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = NULL_TREE; yyerror ("')' or term expected"); RECOVER;;}
break;
case 368:
! #line 2052 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = NULL_TREE; yyerror ("')' expected"); RECOVER;;}
break;
case 369:
! #line 2054 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = NULL_TREE;
YYERROR_NOW;
yyerror ("Identifier expected");
RECOVER;
--- 5080,5245 ----
call */
tree ccpb;
tree init;
! if (yyvsp[-1].node)
{
ccpb = enter_block ();
init = build_assignment
! (ASSIGN_TK, yyvsp[-2].operator.location, TREE_PURPOSE (yyvsp[-1].node),
build0 (JAVA_EXC_OBJ_EXPR, ptr_type_node));
! declare_local_variables (0, TREE_VALUE (yyvsp[-1].node),
build_tree_list
! (TREE_PURPOSE (yyvsp[-1].node), init));
! yyval.node = build1 (JAVA_CATCH_EXPR, NULL_TREE, ccpb);
! SET_EXPR_LOCATION_FROM_TOKEN (yyval.node, yyvsp[-3].operator);
}
else
{
! yyval.node = error_mark_node;
}
;}
break;
case 333:
! #line 1955 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyerror ("'(' expected"); RECOVER; yyval.node = NULL_TREE;;}
break;
case 334:
! #line 1957 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Missing term or ')' expected");
! RECOVER; yyval.node = NULL_TREE;
;}
break;
case 335:
! #line 1962 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyerror ("Missing term"); RECOVER; yyval.node = NULL_TREE;;}
break;
case 336:
! #line 1967 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[0].node; ;}
break;
case 337:
! #line 1969 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'{' expected"); RECOVER; ;}
break;
case 342:
! #line 1982 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_this (yyvsp[0].operator.location); ;}
break;
case 343:
! #line 1984 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = yyvsp[-1].node;;}
break;
case 349:
! #line 1994 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
tree wfl = build_wfl_node (this_identifier_node);
! yyval.node = make_qualified_primary (yyvsp[-2].node, wfl, EXPR_WFL_LINECOL (yyvsp[-2].node));
;}
break;
case 350:
! #line 1999 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("')' expected"); RECOVER;;}
break;
case 351:
! #line 2001 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'class' or 'this' expected" ); RECOVER;;}
break;
case 352:
! #line 2003 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'class' expected" ); RECOVER;;}
break;
case 353:
! #line 2005 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'class' expected" ); RECOVER;;}
break;
case 354:
! #line 2010 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;}
break;
case 355:
! #line 2012 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;}
break;
case 356:
! #line 2014 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location, yyvsp[-2].node); ;}
break;
case 357:
! #line 2016 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_incomplete_class_ref (yyvsp[-1].operator.location,
void_type_node);
;}
break;
case 358:
! #line 2024 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ;}
break;
case 359:
! #line 2026 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ;}
break;
case 361:
! #line 2032 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! tree ctor = build_new_invocation (yyvsp[-2].node, NULL_TREE);
! yyval.node = make_qualified_primary (yyvsp[-3].node, ctor,
! EXPR_WFL_LINECOL (yyvsp[-3].node));
;}
break;
case 363:
! #line 2039 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! tree ctor = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node);
! yyval.node = make_qualified_primary (yyvsp[-4].node, ctor,
! EXPR_WFL_LINECOL (yyvsp[-4].node));
;}
break;
case 365:
! #line 2046 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("'(' expected"); DRECOVER(new_1);;}
break;
case 366:
! #line 2048 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("'(' expected"); RECOVER;;}
break;
case 367:
! #line 2050 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("')' or term expected"); RECOVER;;}
break;
case 368:
! #line 2052 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("')' expected"); RECOVER;;}
break;
case 369:
! #line 2054 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = NULL_TREE;
YYERROR_NOW;
yyerror ("Identifier expected");
RECOVER;
*************** yyreduce:
*** 5279,5303 ****
break;
case 370:
! #line 2061 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;}
break;
case 371:
! #line 2071 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { create_anonymous_class ((yyvsp[-3].node)); ;}
break;
case 372:
! #line 2073 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
! EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-5].node));
end_class_declaration (1);
/* Now we can craft the new expression */
! (yyval.node) = build_new_invocation (id, (yyvsp[-3].node));
/* Note that we can't possibly be here if
`class_type' is an interface (in which case the
--- 5247,5271 ----
break;
case 370:
! #line 2061 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = NULL_TREE; yyerror ("'(' expected"); RECOVER;;}
break;
case 371:
! #line 2071 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { create_anonymous_class (yyvsp[-3].node); ;}
break;
case 372:
! #line 2073 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
! EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (yyvsp[-5].node);
end_class_declaration (1);
/* Now we can craft the new expression */
! yyval.node = build_new_invocation (id, yyvsp[-3].node);
/* Note that we can't possibly be here if
`class_type' is an interface (in which case the
*************** yyreduce:
*** 5323,5337 ****
break;
case 373:
! #line 2104 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { create_anonymous_class ((yyvsp[-2].node)); ;}
break;
case 374:
! #line 2106 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
! EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-4].node));
end_class_declaration (1);
--- 5291,5305 ----
break;
case 373:
! #line 2104 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { create_anonymous_class (yyvsp[-2].node); ;}
break;
case 374:
! #line 2106 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
tree id = build_wfl_node (DECL_NAME (GET_CPC ()));
! EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL (yyvsp[-4].node);
end_class_declaration (1);
*************** yyreduce:
*** 5339,5411 ****
statement doesn't need to be remember so that a
constructor can be generated, since its signature
is already known. */
! (yyval.node) = build_new_invocation (id, NULL_TREE);
;}
break;
case 375:
! #line 2122 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[-2].node); ;}
break;
case 376:
! #line 2124 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = (yyvsp[-2].node); ;}
break;
case 377:
! #line 2129 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), NULL_TREE);
ctxp->formal_parameter_number = 1;
;}
break;
case 378:
! #line 2134 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
ctxp->formal_parameter_number += 1;
! (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyvsp[-2].node));
;}
break;
case 379:
! #line 2139 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 380:
! #line 2144 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;}
break;
case 381:
! #line 2146 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;}
break;
case 382:
! #line 2148 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;}
break;
case 383:
! #line 2150 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;}
break;
case 384:
! #line 2152 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'[' expected"); DRECOVER ("]");;}
break;
case 385:
! #line 2154 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("']' expected"); RECOVER;;}
break;
case 386:
! #line 2161 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
char *sig;
int osb = pop_current_osb (ctxp);
--- 5307,5379 ----
statement doesn't need to be remember so that a
constructor can be generated, since its signature
is already known. */
! yyval.node = build_new_invocation (id, NULL_TREE);
;}
break;
case 375:
! #line 2122 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[-2].node; ;}
break;
case 376:
! #line 2124 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = yyvsp[-2].node; ;}
break;
case 377:
! #line 2129 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE);
ctxp->formal_parameter_number = 1;
;}
break;
case 378:
! #line 2134 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
ctxp->formal_parameter_number += 1;
! yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node);
;}
break;
case 379:
! #line 2139 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 380:
! #line 2144 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;}
break;
case 381:
! #line 2146 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;}
break;
case 382:
! #line 2148 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, pop_current_osb (ctxp));;}
break;
case 383:
! #line 2150 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, pop_current_osb (ctxp));;}
break;
case 384:
! #line 2152 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'[' expected"); DRECOVER ("]");;}
break;
case 385:
! #line 2154 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("']' expected"); RECOVER;;}
break;
case 386:
! #line 2161 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
char *sig;
int osb = pop_current_osb (ctxp);
*************** yyreduce:
*** 5413,5475 ****
obstack_grow (&temporary_obstack, "[]", 2);
obstack_1grow (&temporary_obstack, '\0');
sig = obstack_finish (&temporary_obstack);
! (yyval.node) = build3 (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! (yyvsp[-2].node), get_identifier (sig), (yyvsp[0].node));
;}
break;
case 387:
! #line 2172 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
int osb = pop_current_osb (ctxp);
! tree type = (yyvsp[-2].node);
while (osb--)
type = build_java_array_type (type, -1);
! (yyval.node) = build3 (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! build_pointer_type (type), NULL_TREE, (yyvsp[0].node));
;}
break;
case 388:
! #line 2181 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("'[' expected"); DRECOVER ("]");;}
break;
case 389:
! #line 2183 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("']' expected"); RECOVER;;}
break;
case 390:
! #line 2188 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_tree_list (NULL_TREE, (yyvsp[0].node)); ;}
break;
case 391:
! #line 2190 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyval.node)); ;}
break;
case 392:
! #line 2195 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! if (JNUMERIC_TYPE_P (TREE_TYPE ((yyvsp[-1].node))))
{
! (yyvsp[-1].node) = build_wfl_node ((yyvsp[-1].node));
! TREE_TYPE ((yyvsp[-1].node)) = NULL_TREE;
}
! EXPR_WFL_LINECOL ((yyvsp[-1].node)) = (yyvsp[-2].operator).location;
! (yyval.node) = (yyvsp[-1].node);
;}
break;
case 393:
! #line 2205 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("']' expected"); RECOVER;;}
break;
case 394:
! #line 2207 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Missing term");
yyerror ("']' expected");
--- 5381,5443 ----
obstack_grow (&temporary_obstack, "[]", 2);
obstack_1grow (&temporary_obstack, '\0');
sig = obstack_finish (&temporary_obstack);
! yyval.node = build3 (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! yyvsp[-2].node, get_identifier (sig), yyvsp[0].node);
;}
break;
case 387:
! #line 2172 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
int osb = pop_current_osb (ctxp);
! tree type = yyvsp[-2].node;
while (osb--)
type = build_java_array_type (type, -1);
! yyval.node = build3 (NEW_ANONYMOUS_ARRAY_EXPR, NULL_TREE,
! build_pointer_type (type), NULL_TREE, yyvsp[0].node);
;}
break;
case 388:
! #line 2181 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("'[' expected"); DRECOVER ("]");;}
break;
case 389:
! #line 2183 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("']' expected"); RECOVER;;}
break;
case 390:
! #line 2188 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ;}
break;
case 391:
! #line 2190 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ;}
break;
case 392:
! #line 2195 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! if (JNUMERIC_TYPE_P (TREE_TYPE (yyvsp[-1].node)))
{
! yyvsp[-1].node = build_wfl_node (yyvsp[-1].node);
! TREE_TYPE (yyvsp[-1].node) = NULL_TREE;
}
! EXPR_WFL_LINECOL (yyvsp[-1].node) = yyvsp[-2].operator.location;
! yyval.node = yyvsp[-1].node;
;}
break;
case 393:
! #line 2205 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("']' expected"); RECOVER;;}
break;
case 394:
! #line 2207 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Missing term");
yyerror ("']' expected");
*************** yyreduce:
*** 5478,5484 ****
break;
case 395:
! #line 2216 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
int allocate = 0;
/* If not initialized, allocate memory for the osb
--- 5446,5452 ----
break;
case 395:
! #line 2216 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
int allocate = 0;
/* If not initialized, allocate memory for the osb
*************** yyreduce:
*** 5507,5621 ****
break;
case 396:
! #line 2242 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ CURRENT_OSB (ctxp)++; ;}
break;
case 397:
! #line 2244 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ yyerror ("']' expected"); RECOVER;;}
break;
case 398:
! #line 2249 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = make_qualified_primary ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;}
break;
case 399:
! #line 2253 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
tree super_wfl = build_wfl_node (super_identifier_node);
! SET_EXPR_LOCATION_FROM_TOKEN (super_wfl, (yyvsp[-2].operator));
! (yyval.node) = make_qualified_name (super_wfl, (yyvsp[0].node), (yyvsp[-1].operator).location);
;}
break;
case 400:
! #line 2259 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Field expected"); DRECOVER (super_field_acces);;}
break;
case 401:
! #line 2264 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_method_invocation ((yyvsp[-2].node), NULL_TREE); ;}
break;
case 402:
! #line 2266 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_method_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;}
break;
case 403:
! #line 2268 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! if (TREE_CODE ((yyvsp[-4].node)) == THIS_EXPR)
! (yyval.node) = build_this_super_qualified_invocation
! (1, (yyvsp[-2].node), NULL_TREE, 0, (yyvsp[-3].operator).location);
else
{
! tree invok = build_method_invocation ((yyvsp[-2].node), NULL_TREE);
! (yyval.node) = make_qualified_primary ((yyvsp[-4].node), invok, (yyvsp[-3].operator).location);
}
;}
break;
case 404:
! #line 2279 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! if (TREE_CODE ((yyvsp[-5].node)) == THIS_EXPR)
! (yyval.node) = build_this_super_qualified_invocation
! (1, (yyvsp[-3].node), (yyvsp[-1].node), 0, (yyvsp[-4].operator).location);
else
{
! tree invok = build_method_invocation ((yyvsp[-3].node), (yyvsp[-1].node));
! (yyval.node) = make_qualified_primary ((yyvsp[-5].node), invok, (yyvsp[-4].operator).location);
}
;}
break;
case 405:
! #line 2290 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_this_super_qualified_invocation
! (0, (yyvsp[-2].node), NULL_TREE, (yyvsp[-4].operator).location, (yyvsp[-3].operator).location);
;}
break;
case 406:
! #line 2295 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_this_super_qualified_invocation
! (0, (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[-5].operator).location, (yyvsp[-4].operator).location);
;}
break;
case 407:
! #line 2304 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ yyerror ("'(' expected"); DRECOVER (method_invocation); ;}
break;
case 408:
! #line 2306 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{ yyerror ("'(' expected"); DRECOVER (method_invocation); ;}
break;
case 409:
! #line 2311 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
break;
case 410:
! #line 2313 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
break;
case 411:
! #line 2315 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;}
break;
case 412:
! #line 2317 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Missing term and ']' expected");
DRECOVER(array_access);
--- 5475,5589 ----
break;
case 396:
! #line 2242 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ CURRENT_OSB (ctxp)++; ;}
break;
case 397:
! #line 2244 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ yyerror ("']' expected"); RECOVER;;}
break;
case 398:
! #line 2249 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;}
break;
case 399:
! #line 2253 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
tree super_wfl = build_wfl_node (super_identifier_node);
! SET_EXPR_LOCATION_FROM_TOKEN (super_wfl, yyvsp[-2].operator);
! yyval.node = make_qualified_name (super_wfl, yyvsp[0].node, yyvsp[-1].operator.location);
;}
break;
case 400:
! #line 2259 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Field expected"); DRECOVER (super_field_acces);;}
break;
case 401:
! #line 2264 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ;}
break;
case 402:
! #line 2266 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ;}
break;
case 403:
! #line 2268 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR)
! yyval.node = build_this_super_qualified_invocation
! (1, yyvsp[-2].node, NULL_TREE, 0, yyvsp[-3].operator.location);
else
{
! tree invok = build_method_invocation (yyvsp[-2].node, NULL_TREE);
! yyval.node = make_qualified_primary (yyvsp[-4].node, invok, yyvsp[-3].operator.location);
}
;}
break;
case 404:
! #line 2279 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR)
! yyval.node = build_this_super_qualified_invocation
! (1, yyvsp[-3].node, yyvsp[-1].node, 0, yyvsp[-4].operator.location);
else
{
! tree invok = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node);
! yyval.node = make_qualified_primary (yyvsp[-5].node, invok, yyvsp[-4].operator.location);
}
;}
break;
case 405:
! #line 2290 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_this_super_qualified_invocation
! (0, yyvsp[-2].node, NULL_TREE, yyvsp[-4].operator.location, yyvsp[-3].operator.location);
;}
break;
case 406:
! #line 2295 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_this_super_qualified_invocation
! (0, yyvsp[-3].node, yyvsp[-1].node, yyvsp[-5].operator.location, yyvsp[-4].operator.location);
;}
break;
case 407:
! #line 2304 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ yyerror ("'(' expected"); DRECOVER (method_invocation); ;}
break;
case 408:
! #line 2306 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{ yyerror ("'(' expected"); DRECOVER (method_invocation); ;}
break;
case 409:
! #line 2311 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;}
break;
case 410:
! #line 2313 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;}
break;
case 411:
! #line 2315 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;}
break;
case 412:
! #line 2317 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Missing term and ']' expected");
DRECOVER(array_access);
*************** yyreduce:
*** 5623,5629 ****
break;
case 413:
! #line 2322 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("']' expected");
DRECOVER(array_access);
--- 5591,5597 ----
break;
case 413:
! #line 2322 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("']' expected");
DRECOVER(array_access);
*************** yyreduce:
*** 5631,5637 ****
break;
case 414:
! #line 2327 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Missing term and ']' expected");
DRECOVER(array_access);
--- 5599,5605 ----
break;
case 414:
! #line 2327 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Missing term and ']' expected");
DRECOVER(array_access);
*************** yyreduce:
*** 5639,5645 ****
break;
case 415:
! #line 2332 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("']' expected");
DRECOVER(array_access);
--- 5607,5613 ----
break;
case 415:
! #line 2332 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("']' expected");
DRECOVER(array_access);
*************** yyreduce:
*** 5647,5653 ****
break;
case 416:
! #line 2337 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("Missing term and ']' expected");
DRECOVER(array_access);
--- 5615,5621 ----
break;
case 416:
! #line 2337 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("Missing term and ']' expected");
DRECOVER(array_access);
*************** yyreduce:
*** 5655,5661 ****
break;
case 417:
! #line 2342 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
yyerror ("']' expected");
DRECOVER(array_access);
--- 5623,5629 ----
break;
case 417:
! #line 2342 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
yyerror ("']' expected");
DRECOVER(array_access);
*************** yyreduce:
*** 5663,5791 ****
break;
case 422:
! #line 2357 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;}
break;
case 423:
! #line 2362 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;}
break;
case 426:
! #line 2369 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
break;
case 428:
! #line 2372 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 429:
! #line 2377 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! if ((yyvsp[0].node))
! error_if_numeric_overflow ((yyvsp[0].node));
! (yyval.node) = (yyvsp[0].node);
;}
break;
case 430:
! #line 2383 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
break;
case 431:
! #line 2385 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 432:
! #line 2390 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;}
break;
case 433:
! #line 2392 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 434:
! #line 2397 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;}
break;
case 435:
! #line 2399 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 437:
! #line 2405 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
break;
case 438:
! #line 2407 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;}
break;
case 440:
! #line 2410 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 441:
! #line 2412 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 442:
! #line 2417 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! tree type = (yyvsp[-3].node);
int osb = pop_current_osb (ctxp);
while (osb--)
type = build_java_array_type (type, -1);
! (yyval.node) = build_cast ((yyvsp[-4].operator).location, type, (yyvsp[0].node));
;}
break;
case 443:
! #line 2425 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
break;
case 444:
! #line 2427 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
break;
case 445:
! #line 2429 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
const char *ptr;
int osb = pop_current_osb (ctxp);
obstack_grow (&temporary_obstack,
! IDENTIFIER_POINTER (EXPR_WFL_NODE ((yyvsp[-3].node))),
! IDENTIFIER_LENGTH (EXPR_WFL_NODE ((yyvsp[-3].node))));
while (osb--)
obstack_grow (&temporary_obstack, "[]", 2);
obstack_1grow (&temporary_obstack, '\0');
ptr = obstack_finish (&temporary_obstack);
! EXPR_WFL_NODE ((yyvsp[-3].node)) = get_identifier (ptr);
! (yyval.node) = build_cast ((yyvsp[-4].operator).location, (yyvsp[-3].node), (yyvsp[0].node));
;}
break;
case 446:
! #line 2443 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("']' expected, invalid type expression");;}
break;
case 447:
! #line 2445 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Invalid type expression"); RECOVER;
RECOVER;
--- 5631,5759 ----
break;
case 422:
! #line 2357 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;}
break;
case 423:
! #line 2362 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;}
break;
case 426:
! #line 2369 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;}
break;
case 428:
! #line 2372 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 429:
! #line 2377 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! if (yyvsp[0].node)
! error_if_numeric_overflow (yyvsp[0].node);
! yyval.node = yyvsp[0].node;
;}
break;
case 430:
! #line 2383 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;}
break;
case 431:
! #line 2385 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 432:
! #line 2390 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;}
break;
case 433:
! #line 2392 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 434:
! #line 2397 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;}
break;
case 435:
! #line 2399 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 437:
! #line 2405 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;}
break;
case 438:
! #line 2407 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;}
break;
case 440:
! #line 2410 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 441:
! #line 2412 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;}
break;
case 442:
! #line 2417 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! tree type = yyvsp[-3].node;
int osb = pop_current_osb (ctxp);
while (osb--)
type = build_java_array_type (type, -1);
! yyval.node = build_cast (yyvsp[-4].operator.location, type, yyvsp[0].node);
;}
break;
case 443:
! #line 2425 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;}
break;
case 444:
! #line 2427 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;}
break;
case 445:
! #line 2429 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
const char *ptr;
int osb = pop_current_osb (ctxp);
obstack_grow (&temporary_obstack,
! IDENTIFIER_POINTER (EXPR_WFL_NODE (yyvsp[-3].node)),
! IDENTIFIER_LENGTH (EXPR_WFL_NODE (yyvsp[-3].node)));
while (osb--)
obstack_grow (&temporary_obstack, "[]", 2);
obstack_1grow (&temporary_obstack, '\0');
ptr = obstack_finish (&temporary_obstack);
! EXPR_WFL_NODE (yyvsp[-3].node) = get_identifier (ptr);
! yyval.node = build_cast (yyvsp[-4].operator.location, yyvsp[-3].node, yyvsp[0].node);
;}
break;
case 446:
! #line 2443 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("']' expected, invalid type expression");;}
break;
case 447:
! #line 2445 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Invalid type expression"); RECOVER;
RECOVER;
*************** yyreduce:
*** 5793,6079 ****
break;
case 448:
! #line 2450 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 449:
! #line 2452 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 450:
! #line 2454 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 452:
! #line 2460 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token),
! (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 453:
! #line 2465 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 454:
! #line 2470 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 455:
! #line 2475 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 456:
! #line 2477 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 457:
! #line 2479 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 459:
! #line 2485 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 460:
! #line 2490 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 461:
! #line 2495 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 462:
! #line 2497 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 464:
! #line 2503 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 465:
! #line 2508 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 466:
! #line 2513 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 467:
! #line 2518 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 468:
! #line 2520 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 469:
! #line 2522 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 471:
! #line 2528 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 472:
! #line 2533 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 473:
! #line 2538 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 474:
! #line 2543 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 475:
! #line 2548 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_binop (INSTANCEOF_EXPR, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
break;
case 476:
! #line 2550 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 477:
! #line 2552 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 478:
! #line 2554 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 479:
! #line 2556 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 480:
! #line 2558 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Invalid reference type"); RECOVER;;}
break;
case 482:
! #line 2564 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 483:
! #line 2569 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 484:
! #line 2574 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 485:
! #line 2576 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 487:
! #line 2582 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 488:
! #line 2587 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 490:
! #line 2593 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 491:
! #line 2598 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 493:
! #line 2604 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 494:
! #line 2609 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 496:
! #line 2615 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 497:
! #line 2620 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 499:
! #line 2626 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location,
! (yyvsp[-2].node), (yyvsp[0].node));
;}
break;
case 500:
! #line 2631 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 502:
! #line 2637 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
! (yyval.node) = build3 (CONDITIONAL_EXPR, NULL_TREE, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));
! SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-3].operator));
;}
break;
case 503:
! #line 2642 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
YYERROR_NOW;
yyerror ("Missing term");
--- 5761,6047 ----
break;
case 448:
! #line 2450 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 449:
! #line 2452 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 450:
! #line 2454 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 452:
! #line 2460 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token),
! yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 453:
! #line 2465 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 454:
! #line 2470 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 455:
! #line 2475 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 456:
! #line 2477 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 457:
! #line 2479 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 459:
! #line 2485 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 460:
! #line 2490 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 461:
! #line 2495 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 462:
! #line 2497 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 464:
! #line 2503 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 465:
! #line 2508 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 466:
! #line 2513 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 467:
! #line 2518 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 468:
! #line 2520 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 469:
! #line 2522 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 471:
! #line 2528 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 472:
! #line 2533 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 473:
! #line 2538 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 474:
! #line 2543 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 475:
! #line 2548 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_binop (INSTANCEOF_EXPR, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;}
break;
case 476:
! #line 2550 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 477:
! #line 2552 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 478:
! #line 2554 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 479:
! #line 2556 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 480:
! #line 2558 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Invalid reference type"); RECOVER;;}
break;
case 482:
! #line 2564 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 483:
! #line 2569 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 484:
! #line 2574 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 485:
! #line 2576 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 487:
! #line 2582 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 488:
! #line 2587 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 490:
! #line 2593 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 491:
! #line 2598 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 493:
! #line 2604 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 494:
! #line 2609 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 496:
! #line 2615 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 497:
! #line 2620 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 499:
! #line 2626 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
! yyvsp[-2].node, yyvsp[0].node);
;}
break;
case 500:
! #line 2631 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 502:
! #line 2637 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
! yyval.node = build3 (CONDITIONAL_EXPR, NULL_TREE, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);
! SET_EXPR_LOCATION_FROM_TOKEN (yyval.node, yyvsp[-3].operator);
;}
break;
case 503:
! #line 2642 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
YYERROR_NOW;
yyerror ("Missing term");
*************** yyreduce:
*** 6082,6103 ****
break;
case 504:
! #line 2648 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); DRECOVER (2);;}
break;
case 505:
! #line 2650 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{yyerror ("Missing term"); DRECOVER (3);;}
break;
case 508:
! #line 2660 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
! { (yyval.node) = build_assignment ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;}
break;
case 509:
! #line 2662 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Missing term");
DRECOVER (assign);
--- 6050,6071 ----
break;
case 504:
! #line 2648 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); DRECOVER (2);;}
break;
case 505:
! #line 2650 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{yyerror ("Missing term"); DRECOVER (3);;}
break;
case 508:
! #line 2660 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
! { yyval.node = build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;}
break;
case 509:
! #line 2662 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
{
YYNOT_TWICE yyerror ("Missing term");
DRECOVER (assign);
*************** yyreduce:
*** 6107,6114 ****
}
! /* Line 1037 of yacc.c. */
! #line 6112 "java/parse.c"
yyvsp -= yylen;
yyssp -= yylen;
--- 6075,6082 ----
}
! /* Line 991 of yacc.c. */
! #line 6079 "java/parse.c"
yyvsp -= yylen;
yyssp -= yylen;
*************** yyerrlab:
*** 6149,6181 ****
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
- const char* yyprefix;
char *yymsg;
! int yyx;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! int yyxbegin = yyn < 0 ? -yyn : 0;
!
! /* Stay within bounds of both yycheck and yytname. */
! int yychecklim = YYLAST - yyn;
! int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
! int yycount = 0;
!
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! {
! yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
! yycount += 1;
! if (yycount == 5)
! {
! yysize = 0;
! break;
! }
! }
! yysize += (sizeof ("syntax error, unexpected ")
! + yystrlen (yytname[yytype]));
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
--- 6117,6134 ----
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
char *yymsg;
! int yyx, yycount;
+ yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! yysize += yystrlen (yytname[yyx]) + 15, yycount++;
! yysize += yystrlen ("syntax error, unexpected ") + 1;
! yysize += yystrlen (yytname[yytype]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
*************** yyerrlab:
*** 6184,6196 ****
if (yycount < 5)
{
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! yyp = yystpcpy (yyp, yyprefix);
yyp = yystpcpy (yyp, yytname[yyx]);
! yyprefix = " or ";
}
}
yyerror (yymsg);
--- 6137,6152 ----
if (yycount < 5)
{
! yycount = 0;
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *));
! yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! const char *yyq = ! yycount ? ", expecting " : " or ";
! yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
! yycount++;
}
}
yyerror (yymsg);
*************** yyerrlab:
*** 6208,6265 ****
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse look-ahead token after an
error, discard it. */
! if (yychar <= YYEOF)
{
! /* If at end of input, pop the error token,
! then the rest of the stack, then return failure. */
! if (yychar == YYEOF)
! for (;;)
! {
!
! YYPOPSTACK;
! if (yyssp == yyss)
! YYABORT;
! yydestruct ("Error: popping",
! yystos[*yyssp], yyvsp);
! }
}
! else
! {
! yydestruct ("Error: discarding", yytoken, &yylval);
! yychar = YYEMPTY;
! }
}
! /* Else will try to reuse look-ahead token after shifting the error
token. */
! goto yyerrlab1;
! /*---------------------------------------------------.
! | yyerrorlab -- error raised explicitly by YYERROR. |
! `---------------------------------------------------*/
! yyerrorlab:
! #ifdef __GNUC__
! /* Pacify GCC when the user code never invokes YYERROR and the label
! yyerrorlab therefore never appears in user code. */
! if (0)
! goto yyerrorlab;
#endif
- yyvsp -= yylen;
- yyssp -= yylen;
- yystate = *yyssp;
- goto yyerrlab1;
! /*-------------------------------------------------------------.
! | yyerrlab1 -- common code for both syntax error and YYERROR. |
! `-------------------------------------------------------------*/
! yyerrlab1:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
--- 6164,6218 ----
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse lookahead token after an
error, discard it. */
! /* Return failure if at end of input. */
! if (yychar == YYEOF)
{
! /* Pop the error token. */
! YYPOPSTACK;
! /* Pop the rest of the stack. */
! while (yyss < yyssp)
! {
! YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
! yydestruct (yystos[*yyssp], yyvsp);
! YYPOPSTACK;
! }
! YYABORT;
}
!
! YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
! yydestruct (yytoken, &yylval);
! yychar = YYEMPTY;
!
}
! /* Else will try to reuse lookahead token after shifting the error
token. */
! goto yyerrlab2;
! /*----------------------------------------------------.
! | yyerrlab1 -- error raised explicitly by an action. |
! `----------------------------------------------------*/
! yyerrlab1:
! /* Suppress GCC warning that yyerrlab1 is unused when no action
! invokes YYERROR. */
! #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) \
! && !defined __cplusplus
! __attribute__ ((__unused__))
#endif
+ goto yyerrlab2;
!
! /*---------------------------------------------------------------.
! | yyerrlab2 -- pop states until the error token can be shifted. |
! `---------------------------------------------------------------*/
! yyerrlab2:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
*************** yyerrlab1:
*** 6280,6301 ****
if (yyssp == yyss)
YYABORT;
- yydestruct ("Error: popping", yystos[yystate], yyvsp);
- YYPOPSTACK;
- yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
*++yyvsp = yylval;
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
yystate = yyn;
goto yynewstate;
--- 6233,6254 ----
if (yyssp == yyss)
YYABORT;
+ YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+ yydestruct (yystos[yystate], yyvsp);
+ yyvsp--;
+ yystate = *--yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
+ YYDPRINTF ((stderr, "Shifting error token, "));
+
*++yyvsp = yylval;
yystate = yyn;
goto yynewstate;
*************** yyacceptlab:
*** 6311,6319 ****
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
yyabortlab:
- yydestruct ("Error: discarding lookahead",
- yytoken, &yylval);
- yychar = YYEMPTY;
yyresult = 1;
goto yyreturn;
--- 6264,6269 ----
*************** yyreturn:
*** 6336,6342 ****
}
! #line 2687 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y"
/* Helper function to retrieve an OSB count. Should be used when the
--- 6286,6292 ----
}
! #line 2687 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse.y"
/* Helper function to retrieve an OSB count. Should be used when the
diff -Nrcpad gcc-4.0.3/gcc/java/parse-scan.c gcc-4.0.4/gcc/java/parse-scan.c
*** gcc-4.0.3/gcc/java/parse-scan.c 2006-03-09 20:51:49.000000000 +0000
--- gcc-4.0.4/gcc/java/parse-scan.c 2007-01-31 10:49:32.000000000 +0000
***************
*** 1,7 ****
! /* A Bison parser, made by GNU Bison 2.0. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
--- 1,7 ----
! /* A Bison parser, made by GNU Bison 1.875. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
***************
*** 278,284 ****
/* Copy the first part of user declarations. */
! #line 38 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
#define JC1_LITE
--- 278,284 ----
/* Copy the first part of user declarations. */
! #line 38 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
#define JC1_LITE
*************** void report (void);
*** 383,396 ****
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 128 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
typedef union YYSTYPE {
char *node;
struct method_declarator *declarator;
int value; /* For modifiers */
} YYSTYPE;
! /* Line 190 of yacc.c. */
! #line 394 "java/parse-scan.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
--- 383,396 ----
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
! #line 128 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
typedef union YYSTYPE {
char *node;
struct method_declarator *declarator;
int value; /* For modifiers */
} YYSTYPE;
! /* Line 191 of yacc.c. */
! #line 393 "java/parse-scan.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
*************** typedef union YYSTYPE {
*** 399,431 ****
/* Copy the second part of user declarations. */
! #line 134 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
extern int flag_assert;
#include "lex.c"
! /* Line 213 of yacc.c. */
! #line 411 "java/parse-scan.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
- # ifndef YYFREE
- # define YYFREE free
- # endif
- # ifndef YYMALLOC
- # define YYMALLOC malloc
- # endif
-
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # ifdef YYSTACK_USE_ALLOCA
! # if YYSTACK_USE_ALLOCA
! # ifdef __GNUC__
! # define YYSTACK_ALLOC __builtin_alloca
! # else
# define YYSTACK_ALLOC alloca
# endif
# endif
# endif
--- 399,428 ----
/* Copy the second part of user declarations. */
! #line 134 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
extern int flag_assert;
#include "lex.c"
! /* Line 214 of yacc.c. */
! #line 410 "java/parse-scan.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # if YYSTACK_USE_ALLOCA
! # define YYSTACK_ALLOC alloca
! # else
! # ifndef YYSTACK_USE_ALLOCA
! # if defined (alloca) || defined (_ALLOCA_H)
# define YYSTACK_ALLOC alloca
+ # else
+ # ifdef __GNUC__
+ # define YYSTACK_ALLOC __builtin_alloca
+ # endif
# endif
# endif
# endif
*************** extern int flag_assert;
*** 438,457 ****
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC YYMALLOC
! # define YYSTACK_FREE YYFREE
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short int yyss;
YYSTYPE yyvs;
};
--- 435,454 ----
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC malloc
! # define YYSTACK_FREE free
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short yyss;
YYSTYPE yyvs;
};
*************** union yyalloc
*** 461,473 ****
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if defined (__GNUC__) && 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
--- 458,470 ----
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
*************** union yyalloc
*** 503,509 ****
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short int yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
--- 500,506 ----
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
*************** static const unsigned char yytranslate[]
*** 572,578 ****
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
! static const unsigned short int yyprhs[] =
{
0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
--- 569,575 ----
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
! static const unsigned short yyprhs[] =
{
0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
*************** static const unsigned short int yyprhs[]
*** 613,619 ****
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
! static const short int yyrhs[] =
{
113, 0, -1, 126, -1, 106, -1, 107, -1, 110,
-1, 105, -1, 104, -1, 111, -1, 116, -1, 117,
--- 610,616 ----
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
! static const short yyrhs[] =
{
113, 0, -1, 126, -1, 106, -1, 107, -1, 110,
-1, 105, -1, 104, -1, 111, -1, 116, -1, 117,
*************** static const short int yyrhs[] =
*** 734,740 ****
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short int yyrline[] =
{
0, 208, 208, 213, 214, 215, 216, 217, 218, 223,
224, 228, 233, 238, 246, 247, 251, 255, 259, 263,
--- 731,737 ----
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short yyrline[] =
{
0, 208, 208, 213, 214, 215, 216, 217, 218, 223,
224, 228, 233, 238, 246, 247, 251, 255, 259, 263,
*************** static const unsigned short int yyrline[
*** 780,855 ****
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "PLUS_TK", "MINUS_TK", "MULT_TK",
! "DIV_TK", "REM_TK", "LS_TK", "SRS_TK", "ZRS_TK", "AND_TK", "XOR_TK",
! "OR_TK", "BOOL_AND_TK", "BOOL_OR_TK", "EQ_TK", "NEQ_TK", "GT_TK",
! "GTE_TK", "LT_TK", "LTE_TK", "PLUS_ASSIGN_TK", "MINUS_ASSIGN_TK",
! "MULT_ASSIGN_TK", "DIV_ASSIGN_TK", "REM_ASSIGN_TK", "LS_ASSIGN_TK",
! "SRS_ASSIGN_TK", "ZRS_ASSIGN_TK", "AND_ASSIGN_TK", "XOR_ASSIGN_TK",
! "OR_ASSIGN_TK", "PUBLIC_TK", "PRIVATE_TK", "PROTECTED_TK", "STATIC_TK",
! "FINAL_TK", "SYNCHRONIZED_TK", "VOLATILE_TK", "TRANSIENT_TK",
! "NATIVE_TK", "PAD_TK", "ABSTRACT_TK", "MODIFIER_TK", "STRICT_TK",
! "DECR_TK", "INCR_TK", "DEFAULT_TK", "IF_TK", "THROW_TK", "BOOLEAN_TK",
! "DO_TK", "IMPLEMENTS_TK", "THROWS_TK", "BREAK_TK", "IMPORT_TK",
! "ELSE_TK", "INSTANCEOF_TK", "RETURN_TK", "VOID_TK", "CATCH_TK",
! "INTERFACE_TK", "CASE_TK", "EXTENDS_TK", "FINALLY_TK", "SUPER_TK",
! "WHILE_TK", "CLASS_TK", "SWITCH_TK", "CONST_TK", "TRY_TK", "FOR_TK",
! "NEW_TK", "CONTINUE_TK", "GOTO_TK", "PACKAGE_TK", "THIS_TK", "ASSERT_TK",
! "BYTE_TK", "SHORT_TK", "INT_TK", "LONG_TK", "CHAR_TK", "INTEGRAL_TK",
! "FLOAT_TK", "DOUBLE_TK", "FP_TK", "ID_TK", "REL_QM_TK", "REL_CL_TK",
! "NOT_TK", "NEG_TK", "ASSIGN_ANY_TK", "ASSIGN_TK", "OP_TK", "CP_TK",
! "OCB_TK", "CCB_TK", "OSB_TK", "CSB_TK", "SC_TK", "C_TK", "DOT_TK",
! "STRING_LIT_TK", "CHAR_LIT_TK", "INT_LIT_TK", "FP_LIT_TK", "TRUE_TK",
! "FALSE_TK", "BOOL_LIT_TK", "NULL_TK", "$accept", "goal", "literal",
! "type", "primitive_type", "reference_type", "class_or_interface_type",
! "class_type", "interface_type", "array_type", "name", "simple_name",
! "qualified_name", "identifier", "compilation_unit",
! "import_declarations", "type_declarations", "package_declaration",
! "import_declaration", "single_type_import_declaration",
! "type_import_on_demand_declaration", "type_declaration", "modifiers",
! "class_declaration", "@1", "@2", "super", "interfaces",
! "interface_type_list", "class_body", "class_body_declarations",
! "class_body_declaration", "class_member_declaration",
! "field_declaration", "variable_declarators", "variable_declarator",
! "variable_declarator_id", "variable_initializer", "method_declaration",
! "@3", "method_header", "method_declarator", "formal_parameter_list",
! "formal_parameter", "throws", "class_type_list", "method_body",
! "static_initializer", "static", "constructor_declaration",
! "constructor_declarator", "constructor_body",
! "explicit_constructor_invocation", "this_or_super",
! "interface_declaration", "@4", "@5", "@6", "@7", "extends_interfaces",
! "interface_body", "interface_member_declarations",
! "interface_member_declaration", "constant_declaration",
! "abstract_method_declaration", "array_initializer",
! "variable_initializers", "block", "block_statements", "block_statement",
! "local_variable_declaration_statement", "local_variable_declaration",
! "statement", "statement_nsi", "statement_without_trailing_substatement",
! "empty_statement", "label_decl", "labeled_statement",
! "labeled_statement_nsi", "expression_statement", "statement_expression",
! "if_then_statement", "if_then_else_statement",
! "if_then_else_statement_nsi", "switch_statement", "switch_block",
! "switch_block_statement_groups", "switch_block_statement_group",
! "switch_labels", "switch_label", "while_expression", "while_statement",
! "while_statement_nsi", "do_statement_begin", "do_statement",
! "for_statement", "for_statement_nsi", "for_header", "for_begin",
! "for_init", "for_update", "statement_expression_list", "break_statement",
! "continue_statement", "return_statement", "throw_statement",
! "assert_statement", "synchronized_statement", "synchronized",
! "try_statement", "catches", "catch_clause", "finally", "primary",
! "primary_no_new_array", "type_literals",
! "class_instance_creation_expression", "anonymous_class_creation", "@8",
! "@9", "something_dot_new", "argument_list", "array_creation_expression",
! "dim_exprs", "dim_expr", "dims", "field_access", "method_invocation",
! "array_access", "postfix_expression", "post_increment_expression",
! "post_decrement_expression", "unary_expression",
! "pre_increment_expression", "pre_decrement_expression",
! "unary_expression_not_plus_minus", "cast_expression",
! "multiplicative_expression", "additive_expression", "shift_expression",
! "relational_expression", "equality_expression", "and_expression",
! "exclusive_or_expression", "inclusive_or_expression",
! "conditional_and_expression", "conditional_or_expression",
! "conditional_expression", "assignment_expression", "assignment",
! "left_hand_side", "assignment_operator", "expression",
"constant_expression", 0
};
#endif
--- 777,852 ----
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "PLUS_TK", "MINUS_TK", "MULT_TK", "DIV_TK",
! "REM_TK", "LS_TK", "SRS_TK", "ZRS_TK", "AND_TK", "XOR_TK", "OR_TK",
! "BOOL_AND_TK", "BOOL_OR_TK", "EQ_TK", "NEQ_TK", "GT_TK", "GTE_TK",
! "LT_TK", "LTE_TK", "PLUS_ASSIGN_TK", "MINUS_ASSIGN_TK",
! "MULT_ASSIGN_TK", "DIV_ASSIGN_TK", "REM_ASSIGN_TK", "LS_ASSIGN_TK",
! "SRS_ASSIGN_TK", "ZRS_ASSIGN_TK", "AND_ASSIGN_TK", "XOR_ASSIGN_TK",
! "OR_ASSIGN_TK", "PUBLIC_TK", "PRIVATE_TK", "PROTECTED_TK", "STATIC_TK",
! "FINAL_TK", "SYNCHRONIZED_TK", "VOLATILE_TK", "TRANSIENT_TK",
! "NATIVE_TK", "PAD_TK", "ABSTRACT_TK", "MODIFIER_TK", "STRICT_TK",
! "DECR_TK", "INCR_TK", "DEFAULT_TK", "IF_TK", "THROW_TK", "BOOLEAN_TK",
! "DO_TK", "IMPLEMENTS_TK", "THROWS_TK", "BREAK_TK", "IMPORT_TK",
! "ELSE_TK", "INSTANCEOF_TK", "RETURN_TK", "VOID_TK", "CATCH_TK",
! "INTERFACE_TK", "CASE_TK", "EXTENDS_TK", "FINALLY_TK", "SUPER_TK",
! "WHILE_TK", "CLASS_TK", "SWITCH_TK", "CONST_TK", "TRY_TK", "FOR_TK",
! "NEW_TK", "CONTINUE_TK", "GOTO_TK", "PACKAGE_TK", "THIS_TK",
! "ASSERT_TK", "BYTE_TK", "SHORT_TK", "INT_TK", "LONG_TK", "CHAR_TK",
! "INTEGRAL_TK", "FLOAT_TK", "DOUBLE_TK", "FP_TK", "ID_TK", "REL_QM_TK",
! "REL_CL_TK", "NOT_TK", "NEG_TK", "ASSIGN_ANY_TK", "ASSIGN_TK", "OP_TK",
! "CP_TK", "OCB_TK", "CCB_TK", "OSB_TK", "CSB_TK", "SC_TK", "C_TK",
! "DOT_TK", "STRING_LIT_TK", "CHAR_LIT_TK", "INT_LIT_TK", "FP_LIT_TK",
! "TRUE_TK", "FALSE_TK", "BOOL_LIT_TK", "NULL_TK", "$accept", "goal",
! "literal", "type", "primitive_type", "reference_type",
! "class_or_interface_type", "class_type", "interface_type", "array_type",
! "name", "simple_name", "qualified_name", "identifier",
! "compilation_unit", "import_declarations", "type_declarations",
! "package_declaration", "import_declaration",
! "single_type_import_declaration", "type_import_on_demand_declaration",
! "type_declaration", "modifiers", "class_declaration", "@1", "@2",
! "super", "interfaces", "interface_type_list", "class_body",
! "class_body_declarations", "class_body_declaration",
! "class_member_declaration", "field_declaration", "variable_declarators",
! "variable_declarator", "variable_declarator_id", "variable_initializer",
! "method_declaration", "@3", "method_header", "method_declarator",
! "formal_parameter_list", "formal_parameter", "throws",
! "class_type_list", "method_body", "static_initializer", "static",
! "constructor_declaration", "constructor_declarator", "constructor_body",
! "explicit_constructor_invocation", "this_or_super",
! "interface_declaration", "@4", "@5", "@6", "@7", "extends_interfaces",
! "interface_body", "interface_member_declarations",
! "interface_member_declaration", "constant_declaration",
! "abstract_method_declaration", "array_initializer",
! "variable_initializers", "block", "block_statements", "block_statement",
! "local_variable_declaration_statement", "local_variable_declaration",
! "statement", "statement_nsi", "statement_without_trailing_substatement",
! "empty_statement", "label_decl", "labeled_statement",
! "labeled_statement_nsi", "expression_statement", "statement_expression",
! "if_then_statement", "if_then_else_statement",
! "if_then_else_statement_nsi", "switch_statement", "switch_block",
! "switch_block_statement_groups", "switch_block_statement_group",
! "switch_labels", "switch_label", "while_expression", "while_statement",
! "while_statement_nsi", "do_statement_begin", "do_statement",
! "for_statement", "for_statement_nsi", "for_header", "for_begin",
! "for_init", "for_update", "statement_expression_list",
! "break_statement", "continue_statement", "return_statement",
! "throw_statement", "assert_statement", "synchronized_statement",
! "synchronized", "try_statement", "catches", "catch_clause", "finally",
! "primary", "primary_no_new_array", "type_literals",
! "class_instance_creation_expression", "anonymous_class_creation", "@8",
! "@9", "something_dot_new", "argument_list", "array_creation_expression",
! "dim_exprs", "dim_expr", "dims", "field_access", "method_invocation",
! "array_access", "postfix_expression", "post_increment_expression",
! "post_decrement_expression", "unary_expression",
! "pre_increment_expression", "pre_decrement_expression",
! "unary_expression_not_plus_minus", "cast_expression",
! "multiplicative_expression", "additive_expression", "shift_expression",
! "relational_expression", "equality_expression", "and_expression",
! "exclusive_or_expression", "inclusive_or_expression",
! "conditional_and_expression", "conditional_or_expression",
! "conditional_expression", "assignment_expression", "assignment",
! "left_hand_side", "assignment_operator", "expression",
"constant_expression", 0
};
#endif
*************** static const char *const yytname[] =
*** 857,863 ****
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short int yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
--- 854,860 ----
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
*************** static const unsigned short int yytoknum
*** 875,881 ****
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short int yyr1[] =
{
0, 112, 113, 114, 114, 114, 114, 114, 114, 115,
115, 116, 116, 116, 117, 117, 118, 119, 120, 121,
--- 872,878 ----
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short yyr1[] =
{
0, 112, 113, 114, 114, 114, 114, 114, 114, 115,
115, 116, 116, 116, 117, 117, 118, 119, 120, 121,
*************** static const unsigned char yyr2[] =
*** 959,965 ****
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
! static const unsigned short int yydefact[] =
{
26, 46, 0, 0, 0, 0, 177, 0, 2, 28,
29, 27, 34, 39, 40, 36, 0, 43, 44, 45,
--- 956,962 ----
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
! static const unsigned short yydefact[] =
{
26, 46, 0, 0, 0, 0, 177, 0, 2, 28,
29, 27, 34, 39, 40, 36, 0, 43, 44, 45,
*************** static const unsigned short int yydefact
*** 1026,1032 ****
};
/* YYDEFGOTO[NTERM-NUM]. */
! static const short int yydefgoto[] =
{
-1, 7, 177, 235, 178, 73, 74, 59, 52, 179,
180, 22, 23, 24, 8, 9, 10, 11, 12, 13,
--- 1023,1029 ----
};
/* YYDEFGOTO[NTERM-NUM]. */
! static const short yydefgoto[] =
{
-1, 7, 177, 235, 178, 73, 74, 59, 52, 179,
180, 22, 23, 24, 8, 9, 10, 11, 12, 13,
*************** static const short int yydefgoto[] =
*** 1049,1055 ****
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -465
! static const short int yypact[] =
{
237, -465, -32, -32, -32, -32, -465, 83, -465, 124,
-8, 124, -465, -465, -465, -465, 183, -465, -465, -465,
--- 1046,1052 ----
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -465
! static const short yypact[] =
{
237, -465, -32, -32, -32, -32, -465, 83, -465, 124,
-8, 124, -465, -465, -465, -465, 183, -465, -465, -465,
*************** static const short int yypact[] =
*** 1116,1122 ****
};
/* YYPGOTO[NTERM-NUM]. */
! static const short int yypgoto[] =
{
-465, -465, -465, -11, -10, 415, -19, -87, 19, 240,
106, 102, -465, -3, -465, 741, 41, -465, 44, -465,
--- 1113,1119 ----
};
/* YYPGOTO[NTERM-NUM]. */
! static const short yypgoto[] =
{
-465, -465, -465, -11, -10, 415, -19, -87, 19, 240,
106, 102, -465, -3, -465, 741, 41, -465, 44, -465,
*************** static const short int yypgoto[] =
*** 1141,1147 ****
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -354
! static const short int yytable[] =
{
25, 26, 243, 126, 366, 148, 311, 375, 389, 295,
296, 297, 298, 550, 287, 146, 16, 304, 305, 483,
--- 1138,1144 ----
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -354
! static const short yytable[] =
{
25, 26, 243, 126, 366, 148, 311, 375, 389, 295,
296, 297, 298, 550, 287, 146, 16, 304, 305, 483,
*************** static const short int yytable[] =
*** 1479,1485 ****
174, 0, 0, 175, 176
};
! static const short int yycheck[] =
{
3, 4, 130, 105, 243, 113, 170, 262, 290, 159,
160, 161, 162, 1, 150, 110, 0, 167, 168, 399,
--- 1476,1482 ----
174, 0, 0, 175, 176
};
! static const short yycheck[] =
{
3, 4, 130, 105, 243, 113, 170, 262, 290, 159,
160, 161, 162, 1, 150, 110, 0, 167, 168, 399,
*************** static const short int yycheck[] =
*** 1819,1825 ****
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
! static const unsigned short int yystos[] =
{
0, 44, 56, 62, 68, 76, 101, 113, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 166, 187,
--- 1816,1822 ----
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
! static const unsigned short yystos[] =
{
0, 44, 56, 62, 68, 76, 101, 113, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 166, 187,
*************** static const unsigned short int yystos[]
*** 1908,1915 ****
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrorlab
!
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
--- 1905,1911 ----
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
*************** do \
*** 1936,1988 ****
} \
while (0)
-
#define YYTERROR 1
#define YYERRCODE 256
- /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
- #define YYRHSLOC(Rhs, K) ((Rhs)[K])
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! do \
! if (N) \
! { \
! (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
! (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
! (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
! (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
! } \
! else \
! { \
! (Current).first_line = (Current).last_line = \
! YYRHSLOC (Rhs, 0).last_line; \
! (Current).first_column = (Current).last_column = \
! YYRHSLOC (Rhs, 0).last_column; \
! } \
! while (0)
! #endif
!
!
! /* YY_LOCATION_PRINT -- Print the location on the stream.
! This macro was not mandated originally: define only if we know
! we won't break user code: when these are the locations we know. */
!
! #ifndef YY_LOCATION_PRINT
! # if YYLTYPE_IS_TRIVIAL
! # define YY_LOCATION_PRINT(File, Loc) \
! fprintf (File, "%d.%d-%d.%d", \
! (Loc).first_line, (Loc).first_column, \
! (Loc).last_line, (Loc).last_column)
! # else
! # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
! # endif
#endif
-
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
--- 1932,1951 ----
} \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
+ /* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run). */
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! Current.first_line = Rhs[1].first_line; \
! Current.first_column = Rhs[1].first_column; \
! Current.last_line = Rhs[N].last_line; \
! Current.last_column = Rhs[N].last_column;
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
*************** do { \
*** 2005,2034 ****
YYFPRINTF Args; \
} while (0)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Type, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (included). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short int *bottom, short int *top)
#else
static void
yy_stack_print (bottom, top)
! short int *bottom;
! short int *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
--- 1968,2003 ----
YYFPRINTF Args; \
} while (0)
! # define YYDSYMPRINT(Args) \
! do { \
! if (yydebug) \
! yysymprint Args; \
! } while (0)
!
! # define YYDSYMPRINTF(Title, Token, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Token, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (cinluded). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short *bottom, short *top)
#else
static void
yy_stack_print (bottom, top)
! short *bottom;
! short *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
*************** yy_reduce_print (yyrule)
*** 2058,2066 ****
#endif
{
int yyi;
! unsigned int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
--- 2027,2035 ----
#endif
{
int yyi;
! unsigned int yylineno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylineno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
*************** do { \
*** 2078,2084 ****
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
--- 2047,2054 ----
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YYDSYMPRINT(Args)
! # define YYDSYMPRINTF(Title, Token, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
*************** int yydebug;
*** 2096,2101 ****
--- 2066,2075 ----
SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
evaluated with infinite-precision integer arithmetic. */
+ #if YYMAXDEPTH == 0
+ # undef YYMAXDEPTH
+ #endif
+
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 2177,2191 ****
(void) yyvaluep;
if (yytype < YYNTOKENS)
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- # ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
- # endif
switch (yytype)
{
default:
--- 2151,2165 ----
(void) yyvaluep;
if (yytype < YYNTOKENS)
! {
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
! # ifdef YYPRINT
! YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
! # endif
! }
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
switch (yytype)
{
default:
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 2201,2211 ****
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yymsg, yytype, yyvaluep)
! const char *yymsg;
int yytype;
YYSTYPE *yyvaluep;
#endif
--- 2175,2184 ----
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yytype, yyvaluep)
int yytype;
YYSTYPE *yyvaluep;
#endif
*************** yydestruct (yymsg, yytype, yyvaluep)
*** 2213,2222 ****
/* Pacify ``unused variable'' warnings. */
(void) yyvaluep;
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
switch (yytype)
{
--- 2186,2191 ----
*************** yyparse ()
*** 2269,2278 ****
#endif
#endif
{
! /* The look-ahead symbol. */
int yychar;
! /* The semantic value of the look-ahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
--- 2238,2247 ----
#endif
#endif
{
! /* The lookahead symbol. */
int yychar;
! /* The semantic value of the lookahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
*************** int yynerrs;
*** 2283,2289 ****
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Look-ahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
--- 2252,2258 ----
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Lookahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
*************** int yynerrs;
*** 2295,2303 ****
to reallocate them elsewhere. */
/* The state stack. */
! short int yyssa[YYINITDEPTH];
! short int *yyss = yyssa;
! register short int *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
--- 2264,2272 ----
to reallocate them elsewhere. */
/* The state stack. */
! short yyssa[YYINITDEPTH];
! short *yyss = yyssa;
! register short *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
*************** int yynerrs;
*** 2334,2342 ****
yyssp = yyss;
yyvsp = yyvs;
-
- yyvsp[0] = yylval;
-
goto yysetstate;
/*------------------------------------------------------------.
--- 2303,2308 ----
*************** int yynerrs;
*** 2362,2368 ****
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short int *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
--- 2328,2334 ----
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
*************** int yynerrs;
*** 2390,2396 ****
yystacksize = YYMAXDEPTH;
{
! short int *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
--- 2356,2362 ----
yystacksize = YYMAXDEPTH;
{
! short *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
*************** int yynerrs;
*** 2426,2443 ****
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a look-ahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to look-ahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a look-ahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
--- 2392,2409 ----
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a lookahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a lookahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
*************** yybackup:
*** 2452,2458 ****
else
{
yytoken = YYTRANSLATE (yychar);
! YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
--- 2418,2424 ----
else
{
yytoken = YYTRANSLATE (yychar);
! YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
*************** yybackup:
*** 2472,2479 ****
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the look-ahead token. */
! YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
--- 2438,2445 ----
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the lookahead token. */
! YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
*************** yyreduce:
*** 2523,3017 ****
switch (yyn)
{
case 11:
! #line 229 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
/* use preset global here. FIXME */
! (yyval.node) = xstrdup ("int");
;}
break;
case 12:
! #line 234 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
/* use preset global here. FIXME */
! (yyval.node) = xstrdup ("double");
;}
break;
case 13:
! #line 239 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
/* use preset global here. FIXME */
! (yyval.node) = xstrdup ("boolean");
;}
break;
case 19:
! #line 264 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
while (bracket_count-- > 0)
! (yyval.node) = concat ("[", (yyvsp[-1].node), NULL);
;}
break;
case 20:
! #line 269 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
while (bracket_count-- > 0)
! (yyval.node) = concat ("[", (yyvsp[-1].node), NULL);
;}
break;
case 24:
! #line 287 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
! (yyval.node) = concat ((yyvsp[-2].node), ".", (yyvsp[0].node), NULL);
;}
break;
case 38:
! #line 319 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
! { package_name = (yyvsp[-1].node); ;}
break;
case 46:
! #line 346 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
! if ((yyvsp[0].value) == PUBLIC_TK)
modifier_value++;
! if ((yyvsp[0].value) == STATIC_TK)
modifier_value++;
USE_ABSORBER;
;}
break;
case 47:
! #line 354 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
! if ((yyvsp[0].value) == PUBLIC_TK)
modifier_value++;
! if ((yyvsp[0].value) == STATIC_TK)
modifier_value++;
USE_ABSORBER;
;}
break;
case 48:
! #line 366 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
! report_class_declaration((yyvsp[-2].node));
modifier_value = 0;
;}
break;
case 50:
! #line 372 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
! { report_class_declaration((yyvsp[-2].node)); ;}
break;
case 56:
! #line 386 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 57:
! #line 388 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 58:
! #line 393 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ pop_class_context (); ;}
break;
case 59:
! #line 395 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ pop_class_context (); ;}
break;
case 71:
! #line 421 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 72:
! #line 423 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 77:
! #line 439 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ bracket_count = 0; USE_ABSORBER; ;}
break;
case 78:
! #line 441 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++bracket_count; ;}
break;
case 81:
! #line 452 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++method_depth; ;}
break;
case 82:
! #line 454 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ --method_depth; ;}
break;
case 83:
! #line 459 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 85:
! #line 462 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 86:
! #line 464 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
! report_main_declaration ((yyvsp[-1].declarator));
modifier_value = 0;
;}
break;
case 87:
! #line 472 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
struct method_declarator *d;
! NEW_METHOD_DECLARATOR (d, (yyvsp[-2].node), NULL);
! (yyval.declarator) = d;
;}
break;
case 88:
! #line 478 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
struct method_declarator *d;
! NEW_METHOD_DECLARATOR (d, (yyvsp[-3].node), (yyvsp[-1].node));
! (yyval.declarator) = d;
;}
break;
case 91:
! #line 489 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
! (yyval.node) = concat ((yyvsp[-2].node), ",", (yyvsp[0].node), NULL);
;}
break;
case 92:
! #line 496 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
USE_ABSORBER;
if (bracket_count)
{
int i;
! char *n = xmalloc (bracket_count + 1 + strlen ((yyval.node)));
for (i = 0; i < bracket_count; ++i)
n[i] = '[';
! strcpy (n + bracket_count, (yyval.node));
! (yyval.node) = n;
}
else
! (yyval.node) = (yyvsp[-1].node);
;}
break;
case 93:
! #line 511 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{
if (bracket_count)
{
int i;
! char *n = xmalloc (bracket_count + 1 + strlen ((yyvsp[-1].node)));
for (i = 0; i < bracket_count; ++i)
n[i] = '[';
! strcpy (n + bracket_count, (yyvsp[-1].node));
! (yyval.node) = n;
}
else
! (yyval.node) = (yyvsp[-1].node);
;}
break;
case 96:
! #line 532 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 97:
! #line 534 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 101:
! #line 549 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 103:
! #line 560 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 105:
! #line 565 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 106:
! #line 572 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 107:
! #line 574 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 114:
! #line 591 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 115:
! #line 593 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 118:
! #line 605 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
! { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;}
break;
case 120:
! #line 608 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
! { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;}
break;
case 122:
! #line 611 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
! { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;}
break;
case 124:
! #line 614 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
! { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;}
break;
case 128:
! #line 625 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ pop_class_context (); ;}
break;
case 129:
! #line 627 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ pop_class_context (); ;}
break;
case 152:
! #line 686 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 153:
! #line 688 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 178:
! #line 729 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 189:
! #line 757 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 190:
! #line 762 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 191:
! #line 767 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 199:
! #line 787 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 204:
! #line 802 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 208:
! #line 819 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 214:
! #line 837 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 225:
! #line 862 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 228:
! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 231:
! #line 878 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 232:
! #line 880 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 235:
! #line 889 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 241:
! #line 904 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 242:
! #line 908 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 253:
! #line 930 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 254:
! #line 935 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 255:
! #line 937 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 256:
! #line 939 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 257:
! #line 941 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 265:
! #line 956 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ report_class_declaration (anonymous_context); ;}
break;
case 267:
! #line 959 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ report_class_declaration (anonymous_context); ;}
break;
case 269:
! #line 965 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 283:
! #line 997 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ bracket_count = 1; ;}
break;
case 284:
! #line 999 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ bracket_count++; ;}
break;
case 287:
! #line 1012 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ++complexity; ;}
break;
case 288:
! #line 1014 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ++complexity; ;}
break;
case 289:
! #line 1015 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 290:
! #line 1016 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 291:
! #line 1017 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 292:
! #line 1018 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 293:
! #line 1023 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 296:
! #line 1030 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 343:
! #line 1126 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 345:
! #line 1132 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 347:
! #line 1138 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 351:
! #line 1152 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
}
! /* Line 1037 of yacc.c. */
! #line 3015 "java/parse-scan.c"
yyvsp -= yylen;
yyssp -= yylen;
--- 2489,2983 ----
switch (yyn)
{
case 11:
! #line 229 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
/* use preset global here. FIXME */
! yyval.node = xstrdup ("int");
;}
break;
case 12:
! #line 234 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
/* use preset global here. FIXME */
! yyval.node = xstrdup ("double");
;}
break;
case 13:
! #line 239 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
/* use preset global here. FIXME */
! yyval.node = xstrdup ("boolean");
;}
break;
case 19:
! #line 264 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
while (bracket_count-- > 0)
! yyval.node = concat ("[", yyvsp[-1].node, NULL);
;}
break;
case 20:
! #line 269 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
while (bracket_count-- > 0)
! yyval.node = concat ("[", yyvsp[-1].node, NULL);
;}
break;
case 24:
! #line 287 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
! yyval.node = concat (yyvsp[-2].node, ".", yyvsp[0].node, NULL);
;}
break;
case 38:
! #line 319 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
! { package_name = yyvsp[-1].node; ;}
break;
case 46:
! #line 346 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
! if (yyvsp[0].value == PUBLIC_TK)
modifier_value++;
! if (yyvsp[0].value == STATIC_TK)
modifier_value++;
USE_ABSORBER;
;}
break;
case 47:
! #line 354 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
! if (yyvsp[0].value == PUBLIC_TK)
modifier_value++;
! if (yyvsp[0].value == STATIC_TK)
modifier_value++;
USE_ABSORBER;
;}
break;
case 48:
! #line 366 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
! report_class_declaration(yyvsp[-2].node);
modifier_value = 0;
;}
break;
case 50:
! #line 372 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
! { report_class_declaration(yyvsp[-2].node); ;}
break;
case 56:
! #line 386 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 57:
! #line 388 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 58:
! #line 393 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ pop_class_context (); ;}
break;
case 59:
! #line 395 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ pop_class_context (); ;}
break;
case 71:
! #line 421 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 72:
! #line 423 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 77:
! #line 439 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ bracket_count = 0; USE_ABSORBER; ;}
break;
case 78:
! #line 441 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++bracket_count; ;}
break;
case 81:
! #line 452 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++method_depth; ;}
break;
case 82:
! #line 454 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ --method_depth; ;}
break;
case 83:
! #line 459 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 85:
! #line 462 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 86:
! #line 464 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
! report_main_declaration (yyvsp[-1].declarator);
modifier_value = 0;
;}
break;
case 87:
! #line 472 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
struct method_declarator *d;
! NEW_METHOD_DECLARATOR (d, yyvsp[-2].node, NULL);
! yyval.declarator = d;
;}
break;
case 88:
! #line 478 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
struct method_declarator *d;
! NEW_METHOD_DECLARATOR (d, yyvsp[-3].node, yyvsp[-1].node);
! yyval.declarator = d;
;}
break;
case 91:
! #line 489 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
! yyval.node = concat (yyvsp[-2].node, ",", yyvsp[0].node, NULL);
;}
break;
case 92:
! #line 496 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
USE_ABSORBER;
if (bracket_count)
{
int i;
! char *n = xmalloc (bracket_count + 1 + strlen (yyval.node));
for (i = 0; i < bracket_count; ++i)
n[i] = '[';
! strcpy (n + bracket_count, yyval.node);
! yyval.node = n;
}
else
! yyval.node = yyvsp[-1].node;
;}
break;
case 93:
! #line 511 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{
if (bracket_count)
{
int i;
! char *n = xmalloc (bracket_count + 1 + strlen (yyvsp[-1].node));
for (i = 0; i < bracket_count; ++i)
n[i] = '[';
! strcpy (n + bracket_count, yyvsp[-1].node);
! yyval.node = n;
}
else
! yyval.node = yyvsp[-1].node;
;}
break;
case 96:
! #line 532 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 97:
! #line 534 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 101:
! #line 549 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 103:
! #line 560 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 105:
! #line 565 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 106:
! #line 572 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 107:
! #line 574 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 114:
! #line 591 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 115:
! #line 593 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 118:
! #line 605 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
! { report_class_declaration (yyvsp[0].node); modifier_value = 0; ;}
break;
case 120:
! #line 608 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
! { report_class_declaration (yyvsp[0].node); modifier_value = 0; ;}
break;
case 122:
! #line 611 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
! { report_class_declaration (yyvsp[-1].node); modifier_value = 0; ;}
break;
case 124:
! #line 614 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
! { report_class_declaration (yyvsp[-1].node); modifier_value = 0; ;}
break;
case 128:
! #line 625 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ pop_class_context (); ;}
break;
case 129:
! #line 627 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ pop_class_context (); ;}
break;
case 152:
! #line 686 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 153:
! #line 688 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ modifier_value = 0; ;}
break;
case 178:
! #line 729 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 189:
! #line 757 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 190:
! #line 762 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 191:
! #line 767 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 199:
! #line 787 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 204:
! #line 802 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 208:
! #line 819 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 214:
! #line 837 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 225:
! #line 862 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 228:
! #line 871 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 231:
! #line 878 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{yyerror ("Missing term"); RECOVER;;}
break;
case 232:
! #line 880 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{yyerror ("';' expected"); RECOVER;;}
break;
case 235:
! #line 889 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 241:
! #line 904 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 242:
! #line 908 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 253:
! #line 930 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 254:
! #line 935 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 255:
! #line 937 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 256:
! #line 939 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 257:
! #line 941 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 265:
! #line 956 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ report_class_declaration (anonymous_context); ;}
break;
case 267:
! #line 959 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ report_class_declaration (anonymous_context); ;}
break;
case 269:
! #line 965 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 283:
! #line 997 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ bracket_count = 1; ;}
break;
case 284:
! #line 999 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ bracket_count++; ;}
break;
case 287:
! #line 1012 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ++complexity; ;}
break;
case 288:
! #line 1014 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ++complexity; ;}
break;
case 289:
! #line 1015 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 290:
! #line 1016 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 291:
! #line 1017 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 292:
! #line 1018 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 293:
! #line 1023 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 296:
! #line 1030 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
case 343:
! #line 1126 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 345:
! #line 1132 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 347:
! #line 1138 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ ++complexity; ;}
break;
case 351:
! #line 1152 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
{ USE_ABSORBER; ;}
break;
}
! /* Line 991 of yacc.c. */
! #line 2980 "java/parse-scan.c"
yyvsp -= yylen;
yyssp -= yylen;
*************** yyerrlab:
*** 3052,3084 ****
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
- const char* yyprefix;
char *yymsg;
! int yyx;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! int yyxbegin = yyn < 0 ? -yyn : 0;
!
! /* Stay within bounds of both yycheck and yytname. */
! int yychecklim = YYLAST - yyn;
! int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
! int yycount = 0;
!
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! {
! yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
! yycount += 1;
! if (yycount == 5)
! {
! yysize = 0;
! break;
! }
! }
! yysize += (sizeof ("syntax error, unexpected ")
! + yystrlen (yytname[yytype]));
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
--- 3018,3035 ----
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
char *yymsg;
! int yyx, yycount;
+ yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! yysize += yystrlen (yytname[yyx]) + 15, yycount++;
! yysize += yystrlen ("syntax error, unexpected ") + 1;
! yysize += yystrlen (yytname[yytype]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
*************** yyerrlab:
*** 3087,3099 ****
if (yycount < 5)
{
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! yyp = yystpcpy (yyp, yyprefix);
yyp = yystpcpy (yyp, yytname[yyx]);
! yyprefix = " or ";
}
}
yyerror (yymsg);
--- 3038,3053 ----
if (yycount < 5)
{
! yycount = 0;
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *));
! yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! const char *yyq = ! yycount ? ", expecting " : " or ";
! yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
! yycount++;
}
}
yyerror (yymsg);
*************** yyerrlab:
*** 3111,3168 ****
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse look-ahead token after an
error, discard it. */
! if (yychar <= YYEOF)
{
! /* If at end of input, pop the error token,
! then the rest of the stack, then return failure. */
! if (yychar == YYEOF)
! for (;;)
! {
!
! YYPOPSTACK;
! if (yyssp == yyss)
! YYABORT;
! yydestruct ("Error: popping",
! yystos[*yyssp], yyvsp);
! }
}
! else
! {
! yydestruct ("Error: discarding", yytoken, &yylval);
! yychar = YYEMPTY;
! }
}
! /* Else will try to reuse look-ahead token after shifting the error
token. */
! goto yyerrlab1;
! /*---------------------------------------------------.
! | yyerrorlab -- error raised explicitly by YYERROR. |
! `---------------------------------------------------*/
! yyerrorlab:
! #ifdef __GNUC__
! /* Pacify GCC when the user code never invokes YYERROR and the label
! yyerrorlab therefore never appears in user code. */
! if (0)
! goto yyerrorlab;
#endif
- yyvsp -= yylen;
- yyssp -= yylen;
- yystate = *yyssp;
- goto yyerrlab1;
! /*-------------------------------------------------------------.
! | yyerrlab1 -- common code for both syntax error and YYERROR. |
! `-------------------------------------------------------------*/
! yyerrlab1:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
--- 3065,3119 ----
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse lookahead token after an
error, discard it. */
! /* Return failure if at end of input. */
! if (yychar == YYEOF)
{
! /* Pop the error token. */
! YYPOPSTACK;
! /* Pop the rest of the stack. */
! while (yyss < yyssp)
! {
! YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
! yydestruct (yystos[*yyssp], yyvsp);
! YYPOPSTACK;
! }
! YYABORT;
}
!
! YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
! yydestruct (yytoken, &yylval);
! yychar = YYEMPTY;
!
}
! /* Else will try to reuse lookahead token after shifting the error
token. */
! goto yyerrlab2;
! /*----------------------------------------------------.
! | yyerrlab1 -- error raised explicitly by an action. |
! `----------------------------------------------------*/
! yyerrlab1:
! /* Suppress GCC warning that yyerrlab1 is unused when no action
! invokes YYERROR. */
! #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) \
! && !defined __cplusplus
! __attribute__ ((__unused__))
#endif
+ goto yyerrlab2;
!
! /*---------------------------------------------------------------.
! | yyerrlab2 -- pop states until the error token can be shifted. |
! `---------------------------------------------------------------*/
! yyerrlab2:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
*************** yyerrlab1:
*** 3183,3203 ****
if (yyssp == yyss)
YYABORT;
- yydestruct ("Error: popping", yystos[yystate], yyvsp);
- YYPOPSTACK;
- yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
! *++yyvsp = yylval;
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
yystate = yyn;
goto yynewstate;
--- 3134,3154 ----
if (yyssp == yyss)
YYABORT;
+ YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+ yydestruct (yystos[yystate], yyvsp);
+ yyvsp--;
+ yystate = *--yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
! YYDPRINTF ((stderr, "Shifting error token, "));
+ *++yyvsp = yylval;
yystate = yyn;
goto yynewstate;
*************** yyacceptlab:
*** 3214,3222 ****
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
yyabortlab:
- yydestruct ("Error: discarding lookahead",
- yytoken, &yylval);
- yychar = YYEMPTY;
yyresult = 1;
goto yyreturn;
--- 3165,3170 ----
*************** yyreturn:
*** 3239,3245 ****
}
! #line 1170 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y"
/* Create a new parser context */
--- 3187,3193 ----
}
! #line 1170 "/home/gdr/build/gcc-release/gcc-4.0.4/gcc-4.0.4/gcc/java/parse-scan.y"
/* Create a new parser context */
diff -Nrcpad gcc-4.0.3/gcc/loop-unroll.c gcc-4.0.4/gcc/loop-unroll.c
*** gcc-4.0.3/gcc/loop-unroll.c 2005-08-17 12:45:01.000000000 +0000
--- gcc-4.0.4/gcc/loop-unroll.c 2006-05-13 22:10:56.000000000 +0000
*************** loop_exit_at_end_p (struct loop *loop)
*** 234,255 ****
static void
peel_loops_completely (struct loops *loops, int flags)
{
! struct loop *loop, *next;
!
! loop = loops->tree_root;
! while (loop->inner)
! loop = loop->inner;
! while (loop != loops->tree_root)
{
! if (loop->next)
! {
! next = loop->next;
! while (next->inner)
! next = next->inner;
! }
! else
! next = loop->outer;
loop->lpt_decision.decision = LPT_NONE;
--- 234,248 ----
static void
peel_loops_completely (struct loops *loops, int flags)
{
! struct loop *loop;
! unsigned i;
! /* Scan the loops, the inner ones first. */
! for (i = loops->num - 1; i > 0; i--)
{
! loop = loops->parray[i];
! if (!loop)
! continue;
loop->lpt_decision.decision = LPT_NONE;
*************** peel_loops_completely (struct loops *loo
*** 272,278 ****
verify_loop_structure (loops);
#endif
}
- loop = next;
}
}
--- 265,270 ----
diff -Nrcpad gcc-4.0.3/gcc/Makefile.in gcc-4.0.4/gcc/Makefile.in
*** gcc-4.0.3/gcc/Makefile.in 2005-09-09 21:05:53.000000000 +0000
--- gcc-4.0.4/gcc/Makefile.in 2006-09-06 10:30:49.000000000 +0000
*************** install-gcc-tooldir:
*** 2819,2826 ****
macro_list: s-macro_list; @true
s-macro_list : $(GCC_PASSES)
echo | $(GCC_FOR_TARGET) -E -dM - | \
! sed -n 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p ; \
! s/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
sort -u > tmp-macro_list
$(SHELL) $(srcdir)/../move-if-change tmp-macro_list macro_list
$(STAMP) s-macro_list
--- 2819,2826 ----
macro_list: s-macro_list; @true
s-macro_list : $(GCC_PASSES)
echo | $(GCC_FOR_TARGET) -E -dM - | \
! sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \
! -e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
sort -u > tmp-macro_list
$(SHELL) $(srcdir)/../move-if-change tmp-macro_list macro_list
$(STAMP) s-macro_list
*************** $(TESTSUITEDIR)/site.exp: site.exp
*** 3558,3570 ****
-rm -f $@
sed '/set tmpdir/ s|testsuite|$(TESTSUITEDIR)|' < site.exp > $@
! $(lang_checks): check-% : $(TESTSUITEDIR)/site.exp
-(rootme=`${PWD_COMMAND}`; export rootme; \
srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
! cd $(TESTSUITEDIR); \
EXPECT=${EXPECT} ; export EXPECT ; \
if [ -f $${rootme}/../expect/expect ] ; then \
! TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
export TCL_LIBRARY ; fi ; \
$(RUNTEST) --tool $* $(RUNTESTFLAGS))
--- 3558,3576 ----
-rm -f $@
sed '/set tmpdir/ s|testsuite|$(TESTSUITEDIR)|' < site.exp > $@
! $(lang_checks): check-% : site.exp
! -test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR)
! test -d $(TESTSUITEDIR)/$* || mkdir $(TESTSUITEDIR)/$*
-(rootme=`${PWD_COMMAND}`; export rootme; \
srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
! cd $(TESTSUITEDIR)/$*; \
! rm -f tmp-site.exp; \
! sed '/set tmpdir/ s|testsuite|$(TESTSUITEDIR)/$*|' \
! < ../../site.exp > tmp-site.exp; \
! $(SHELL) $${srcdir}/../move-if-change tmp-site.exp site.exp; \
EXPECT=${EXPECT} ; export EXPECT ; \
if [ -f $${rootme}/../expect/expect ] ; then \
! TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
export TCL_LIBRARY ; fi ; \
$(RUNTEST) --tool $* $(RUNTESTFLAGS))
diff -Nrcpad gcc-4.0.3/gcc/mklibgcc.in gcc-4.0.4/gcc/mklibgcc.in
*** gcc-4.0.3/gcc/mklibgcc.in 2005-11-15 16:41:15.000000000 +0000
--- gcc-4.0.4/gcc/mklibgcc.in 2006-07-04 20:28:07.000000000 +0000
*************** for ml in $MULTILIBS; do
*** 795,806 ****
--- 795,809 ----
ldir='$(DESTDIR)$(libsubdir)'
fi
echo ' $(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
+ echo ' chmod 644' ${ldir}/libgcc.a
echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
echo ' $(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/
+ echo ' chmod 644' ${ldir}/libgcov.a
echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a
if [ "$SHLIB_LINK" ]; then
echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
+ echo ' chmod 644' ${ldir}/libgcc_eh.a
echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a
shlib_slibdir_qual=
*************** for ml in $MULTILIBS; do
*** 819,824 ****
--- 822,828 ----
-e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
libunwinddir='$(DESTDIR)$(slibdir)$(shlib_slibdir_qual)/$(shlib_dir)'
echo ' $(INSTALL_DATA)' ${dir}/libunwind.a ${libunwinddir}/
+ echo ' chmod 644' ${dir}/libunwind.a
echo ' $(RANLIB_FOR_TARGET)' ${libunwinddir}/libunwind.a
fi
fi
diff -Nrcpad gcc-4.0.3/gcc/objc/ChangeLog gcc-4.0.4/gcc/objc/ChangeLog
*** gcc-4.0.3/gcc/objc/ChangeLog 2006-03-09 20:44:16.000000000 +0000
--- gcc-4.0.4/gcc/objc/ChangeLog 2007-01-31 10:21:53.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/gcc/objc/objc-parse.c gcc-4.0.4/gcc/objc/objc-parse.c
*** gcc-4.0.3/gcc/objc/objc-parse.c 2006-03-09 20:51:49.000000000 +0000
--- gcc-4.0.4/gcc/objc/objc-parse.c 2007-01-31 10:49:32.000000000 +0000
***************
*** 1,7 ****
! /* A Bison parser, made by GNU Bison 2.0. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
--- 1,7 ----
! /* A Bison parser, made by GNU Bison 1.875. */
/* Skeleton parser for Yacc-like parsing with Bison,
! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*************** typedef union YYSTYPE {long itype; tree
*** 285,292 ****
struct c_type_name *typenametype; struct c_parm *parmtype;
struct c_declspecs *dsptype; struct c_typespec tstype;
enum tree_code code; location_t location; } YYSTYPE;
! /* Line 190 of yacc.c. */
! #line 290 "objc/objc-parse.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
--- 285,292 ----
struct c_type_name *typenametype; struct c_parm *parmtype;
struct c_declspecs *dsptype; struct c_typespec tstype;
enum tree_code code; location_t location; } YYSTYPE;
! /* Line 191 of yacc.c. */
! #line 289 "objc/objc-parse.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
*************** c_parse_init (void)
*** 394,419 ****
! /* Line 213 of yacc.c. */
! #line 399 "objc/objc-parse.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
- # ifndef YYFREE
- # define YYFREE free
- # endif
- # ifndef YYMALLOC
- # define YYMALLOC malloc
- # endif
-
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # ifdef YYSTACK_USE_ALLOCA
! # if YYSTACK_USE_ALLOCA
! # ifdef __GNUC__
! # define YYSTACK_ALLOC __builtin_alloca
! # else
# define YYSTACK_ALLOC alloca
# endif
# endif
# endif
--- 394,416 ----
! /* Line 214 of yacc.c. */
! #line 398 "objc/objc-parse.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
! # if YYSTACK_USE_ALLOCA
! # define YYSTACK_ALLOC alloca
! # else
! # ifndef YYSTACK_USE_ALLOCA
! # if defined (alloca) || defined (_ALLOCA_H)
# define YYSTACK_ALLOC alloca
+ # else
+ # ifdef __GNUC__
+ # define YYSTACK_ALLOC __builtin_alloca
+ # endif
# endif
# endif
# endif
*************** c_parse_init (void)
*** 426,445 ****
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC YYMALLOC
! # define YYSTACK_FREE YYFREE
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short int yyss;
YYSTYPE yyvs;
};
--- 423,442 ----
# include /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# endif
! # define YYSTACK_ALLOC malloc
! # define YYSTACK_FREE free
# endif
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
#if (! defined (yyoverflow) \
&& (! defined (__cplusplus) \
! || (YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
{
! short yyss;
YYSTYPE yyvs;
};
*************** union yyalloc
*** 449,461 ****
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if defined (__GNUC__) && 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
--- 446,458 ----
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
! ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
# ifndef YYCOPY
! # if 1 < __GNUC__
# define YYCOPY(To, From, Count) \
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
# else
*************** union yyalloc
*** 491,497 ****
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short int yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
--- 488,494 ----
#if defined (__STDC__) || defined (__cplusplus)
typedef signed char yysigned_char;
#else
! typedef short yysigned_char;
#endif
/* YYFINAL -- State number of the termination state. */
*************** static const unsigned char yytranslate[]
*** 556,562 ****
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
! static const unsigned short int yyprhs[] =
{
0, 0, 3, 4, 6, 7, 11, 12, 17, 19,
21, 23, 26, 28, 29, 33, 38, 43, 46, 49,
--- 553,559 ----
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
! static const unsigned short yyprhs[] =
{
0, 0, 3, 4, 6, 7, 11, 12, 17, 19,
21, 23, 26, 28, 29, 33, 38, 43, 46, 49,
*************** static const unsigned short int yyprhs[]
*** 634,640 ****
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
! static const short int yyrhs[] =
{
96, 0, -1, -1, 97, -1, -1, 101, 98, 100,
-1, -1, 97, 101, 99, 100, -1, 103, -1, 102,
--- 631,637 ----
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
! static const short yyrhs[] =
{
96, 0, -1, -1, 97, -1, -1, 101, 98, 100,
-1, -1, 97, 101, 99, 100, -1, 103, -1, 102,
*************** static const short int yyrhs[] =
*** 858,864 ****
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short int yyrline[] =
{
0, 364, 364, 367, 375, 375, 378, 377, 383, 384,
385, 386, 388, 394, 398, 401, 403, 405, 407, 408,
--- 855,861 ----
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! static const unsigned short yyrline[] =
{
0, 364, 364, 367, 375, 375, 378, 377, 383, 384,
385, 386, 388, 394, 398, 401, 403, 405, 407, 408,
*************** static const unsigned short int yyrline[
*** 941,1038 ****
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "IDENTIFIER", "TYPENAME", "SCSPEC",
! "STATIC", "TYPESPEC", "TYPE_QUAL", "OBJC_TYPE_QUAL", "CONSTANT",
! "STRING", "ELLIPSIS", "SIZEOF", "ENUM", "STRUCT", "UNION", "IF", "ELSE",
! "WHILE", "DO", "FOR", "SWITCH", "CASE", "DEFAULT", "BREAK", "CONTINUE",
! "RETURN", "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE",
! "EXTENSION", "LABEL", "REALPART", "IMAGPART", "VA_ARG", "CHOOSE_EXPR",
! "TYPES_COMPATIBLE_P", "FUNC_NAME", "OFFSETOF", "'='", "ASSIGN", "'?'",
! "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE",
! "ARITHCOMPARE", "RSHIFT", "LSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'",
! "MINUSMINUS", "PLUSPLUS", "UNARY", "HYPERUNARY", "'.'", "'('", "'['",
! "POINTSAT", "AT_INTERFACE", "AT_IMPLEMENTATION", "AT_END", "AT_SELECTOR",
! "AT_DEFS", "AT_ENCODE", "CLASSNAME", "AT_PUBLIC", "AT_PRIVATE",
! "AT_PROTECTED", "AT_PROTOCOL", "AT_CLASS", "AT_ALIAS", "AT_THROW",
! "AT_TRY", "AT_CATCH", "AT_FINALLY", "AT_SYNCHRONIZED", "OBJC_STRING",
! "';'", "'}'", "'~'", "'!'", "','", "')'", "'{'", "']'", "$accept",
! "program", "extdefs", "@1", "@2", "extdef", "save_obstack_position",
! "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8", "identifier",
! "unop", "expr", "exprlist", "nonnull_exprlist", "unary_expr", "sizeof",
! "alignof", "typeof", "cast_expr", "expr_no_commas", "@9", "@10", "@11",
! "@12", "@13", "primary", "@14", "@15", "offsetof_member_designator",
! "old_style_parm_decls", "lineno_datadecl", "datadecls", "datadecl",
! "lineno_decl", "setspecs", "maybe_resetattrs", "decl",
! "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea",
! "declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea",
! "declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea",
! "declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea",
! "declspecs_sc_nots_nosa_noea", "declspecs_sc_nots_nosa_ea",
! "declspecs_sc_nots_sa_noea", "declspecs_sc_nots_sa_ea",
! "declspecs_sc_ts_nosa_noea", "declspecs_sc_ts_nosa_ea",
! "declspecs_sc_ts_sa_noea", "declspecs_sc_ts_sa_ea", "declspecs_ts",
! "declspecs_nots", "declspecs_ts_nosa", "declspecs_nots_nosa",
! "declspecs_nosc_ts", "declspecs_nosc_nots", "declspecs_nosc",
! "declspecs", "maybe_type_quals_attrs", "typespec_nonattr",
! "typespec_attr", "typespec_reserved_nonattr", "typespec_reserved_attr",
! "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls",
! "initdcl", "@16", "notype_initdcl", "@17", "maybe_attribute",
! "attributes", "attribute", "attribute_list", "attrib", "any_word",
! "scspec", "init", "@18", "initlist_maybe_comma", "initlist1", "initelt",
! "@19", "initval", "@20", "designator_list", "designator",
! "array_designator", "nested_function", "@21", "@22",
! "notype_nested_function", "@23", "@24", "declarator",
! "after_type_declarator", "parm_declarator",
! "parm_declarator_starttypename", "parm_declarator_nostarttypename",
! "notype_declarator", "struct_head", "union_head", "enum_head",
! "structsp_attr", "@25", "@26", "@27", "@28", "structsp_nonattr",
! "maybecomma", "maybecomma_warn", "component_decl_list",
! "component_decl_list2", "component_decl", "components",
! "components_notype", "component_declarator",
! "component_notype_declarator", "enumlist", "enumerator", "typename",
! "@29", "absdcl", "absdcl_maybe_attribute", "absdcl1", "absdcl1_noea",
! "absdcl1_ea", "direct_absdcl1", "array_declarator", "stmts_and_decls",
! "lineno_stmt_decl_or_labels_ending_stmt",
! "lineno_stmt_decl_or_labels_ending_decl",
! "lineno_stmt_decl_or_labels_ending_label",
! "lineno_stmt_decl_or_labels_ending_error", "lineno_stmt_decl_or_labels",
! "errstmt", "c99_block_start", "maybe_label_decls", "label_decls",
! "label_decl", "compstmt_or_error", "compstmt_start", "compstmt_nostart",
! "compstmt_contents_nonempty", "compstmt_primary_start", "compstmt",
! "save_location", "lineno_labels", "c99_block_lineno_labeled_stmt",
! "lineno_stmt", "lineno_label", "condition", "if_statement_1",
! "if_statement_2", "if_statement", "start_break", "start_continue",
! "while_statement", "do_statement", "@30", "@31", "xexpr",
! "for_init_stmt", "for_cond_expr", "for_incr_expr", "for_statement",
! "switch_statement", "@32", "stmt_nocomp", "objc_catch_prefix",
! "objc_catch_clause", "objc_opt_catch_list", "objc_try_catch_clause",
! "@33", "objc_finally_clause", "objc_try_catch_stmt", "stmt", "label",
! "simple_asm_expr", "maybeasm", "asmdef", "asm_stmt", "asm_argument",
! "maybe_volatile", "asm_operands", "nonnull_asm_operands", "asm_operand",
! "asm_clobbers", "asm_string", "stop_string_translation",
! "start_string_translation", "parmlist", "@34", "parmlist_1", "@35",
! "@36", "parmlist_2", "parms", "parm", "firstparm", "setspecs_fp",
! "parmlist_or_identifiers", "@37", "parmlist_or_identifiers_1",
! "identifiers", "identifiers_or_typenames", "extension", "objcdef",
! "identifier_list", "classdecl", "aliasdecl", "superclass", "class_ivars",
! "classdef", "@38", "@39", "@40", "@41", "protocoldef", "@42",
! "protocolrefs", "non_empty_protocolrefs", "ivar_decl_list",
! "visibility_spec", "ivar_decls", "ivar_decl", "opt_semi", "methodtype",
! "methoddef", "@43", "@44", "methodprotolist", "@45", "semi_or_error",
! "methodproto", "@46", "@47", "methoddecl", "optparmlist", "optparms",
! "optellipsis", "unaryselector", "keywordselector", "selector",
! "reservedwords", "objc_qual", "objc_quals", "objc_typename",
! "keyworddecl", "messageargs", "keywordarglist", "keywordexpr",
! "keywordarg", "receiver", "objcmessageexpr", "selectorarg",
! "keywordnamelist", "keywordname", "objcselectorexpr", "objcprotocolexpr",
! "objcencodeexpr", 0
};
#endif
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short int yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
--- 938,1036 ----
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
! "$end", "error", "$undefined", "IDENTIFIER", "TYPENAME", "SCSPEC",
! "STATIC", "TYPESPEC", "TYPE_QUAL", "OBJC_TYPE_QUAL", "CONSTANT",
! "STRING", "ELLIPSIS", "SIZEOF", "ENUM", "STRUCT", "UNION", "IF", "ELSE",
! "WHILE", "DO", "FOR", "SWITCH", "CASE", "DEFAULT", "BREAK", "CONTINUE",
! "RETURN", "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE",
! "EXTENSION", "LABEL", "REALPART", "IMAGPART", "VA_ARG", "CHOOSE_EXPR",
! "TYPES_COMPATIBLE_P", "FUNC_NAME", "OFFSETOF", "'='", "ASSIGN", "'?'",
! "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE",
! "ARITHCOMPARE", "RSHIFT", "LSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'",
! "MINUSMINUS", "PLUSPLUS", "UNARY", "HYPERUNARY", "'.'", "'('", "'['",
! "POINTSAT", "AT_INTERFACE", "AT_IMPLEMENTATION", "AT_END",
! "AT_SELECTOR", "AT_DEFS", "AT_ENCODE", "CLASSNAME", "AT_PUBLIC",
! "AT_PRIVATE", "AT_PROTECTED", "AT_PROTOCOL", "AT_CLASS", "AT_ALIAS",
! "AT_THROW", "AT_TRY", "AT_CATCH", "AT_FINALLY", "AT_SYNCHRONIZED",
! "OBJC_STRING", "';'", "'}'", "'~'", "'!'", "','", "')'", "'{'", "']'",
! "$accept", "program", "extdefs", "@1", "@2", "extdef",
! "save_obstack_position", "datadef", "fndef", "@3", "@4", "@5", "@6",
! "@7", "@8", "identifier", "unop", "expr", "exprlist",
! "nonnull_exprlist", "unary_expr", "sizeof", "alignof", "typeof",
! "cast_expr", "expr_no_commas", "@9", "@10", "@11", "@12", "@13",
! "primary", "@14", "@15", "offsetof_member_designator",
! "old_style_parm_decls", "lineno_datadecl", "datadecls", "datadecl",
! "lineno_decl", "setspecs", "maybe_resetattrs", "decl",
! "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea",
! "declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea",
! "declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea",
! "declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea",
! "declspecs_sc_nots_nosa_noea", "declspecs_sc_nots_nosa_ea",
! "declspecs_sc_nots_sa_noea", "declspecs_sc_nots_sa_ea",
! "declspecs_sc_ts_nosa_noea", "declspecs_sc_ts_nosa_ea",
! "declspecs_sc_ts_sa_noea", "declspecs_sc_ts_sa_ea", "declspecs_ts",
! "declspecs_nots", "declspecs_ts_nosa", "declspecs_nots_nosa",
! "declspecs_nosc_ts", "declspecs_nosc_nots", "declspecs_nosc",
! "declspecs", "maybe_type_quals_attrs", "typespec_nonattr",
! "typespec_attr", "typespec_reserved_nonattr", "typespec_reserved_attr",
! "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls",
! "initdcl", "@16", "notype_initdcl", "@17", "maybe_attribute",
! "attributes", "attribute", "attribute_list", "attrib", "any_word",
! "scspec", "init", "@18", "initlist_maybe_comma", "initlist1", "initelt",
! "@19", "initval", "@20", "designator_list", "designator",
! "array_designator", "nested_function", "@21", "@22",
! "notype_nested_function", "@23", "@24", "declarator",
! "after_type_declarator", "parm_declarator",
! "parm_declarator_starttypename", "parm_declarator_nostarttypename",
! "notype_declarator", "struct_head", "union_head", "enum_head",
! "structsp_attr", "@25", "@26", "@27", "@28", "structsp_nonattr",
! "maybecomma", "maybecomma_warn", "component_decl_list",
! "component_decl_list2", "component_decl", "components",
! "components_notype", "component_declarator",
! "component_notype_declarator", "enumlist", "enumerator", "typename",
! "@29", "absdcl", "absdcl_maybe_attribute", "absdcl1", "absdcl1_noea",
! "absdcl1_ea", "direct_absdcl1", "array_declarator", "stmts_and_decls",
! "lineno_stmt_decl_or_labels_ending_stmt",
! "lineno_stmt_decl_or_labels_ending_decl",
! "lineno_stmt_decl_or_labels_ending_label",
! "lineno_stmt_decl_or_labels_ending_error", "lineno_stmt_decl_or_labels",
! "errstmt", "c99_block_start", "maybe_label_decls", "label_decls",
! "label_decl", "compstmt_or_error", "compstmt_start", "compstmt_nostart",
! "compstmt_contents_nonempty", "compstmt_primary_start", "compstmt",
! "save_location", "lineno_labels", "c99_block_lineno_labeled_stmt",
! "lineno_stmt", "lineno_label", "condition", "if_statement_1",
! "if_statement_2", "if_statement", "start_break", "start_continue",
! "while_statement", "do_statement", "@30", "@31", "xexpr",
! "for_init_stmt", "for_cond_expr", "for_incr_expr", "for_statement",
! "switch_statement", "@32", "stmt_nocomp", "objc_catch_prefix",
! "objc_catch_clause", "objc_opt_catch_list", "objc_try_catch_clause",
! "@33", "objc_finally_clause", "objc_try_catch_stmt", "stmt", "label",
! "simple_asm_expr", "maybeasm", "asmdef", "asm_stmt", "asm_argument",
! "maybe_volatile", "asm_operands", "nonnull_asm_operands", "asm_operand",
! "asm_clobbers", "asm_string", "stop_string_translation",
! "start_string_translation", "parmlist", "@34", "parmlist_1", "@35",
! "@36", "parmlist_2", "parms", "parm", "firstparm", "setspecs_fp",
! "parmlist_or_identifiers", "@37", "parmlist_or_identifiers_1",
! "identifiers", "identifiers_or_typenames", "extension", "objcdef",
! "identifier_list", "classdecl", "aliasdecl", "superclass",
! "class_ivars", "classdef", "@38", "@39", "@40", "@41", "protocoldef",
! "@42", "protocolrefs", "non_empty_protocolrefs", "ivar_decl_list",
! "visibility_spec", "ivar_decls", "ivar_decl", "opt_semi", "methodtype",
! "methoddef", "@43", "@44", "methodprotolist", "@45", "semi_or_error",
! "methodproto", "@46", "@47", "methoddecl", "optparmlist", "optparms",
! "optellipsis", "unaryselector", "keywordselector", "selector",
! "reservedwords", "objc_qual", "objc_quals", "objc_typename",
! "keyworddecl", "messageargs", "keywordarglist", "keywordexpr",
! "keywordarg", "receiver", "objcmessageexpr", "selectorarg",
! "keywordnamelist", "keywordname", "objcselectorexpr",
! "objcprotocolexpr", "objcencodeexpr", 0
};
#endif
# ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */
! static const unsigned short yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
*************** static const unsigned short int yytoknum
*** 1048,1054 ****
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short int yyr1[] =
{
0, 95, 96, 96, 98, 97, 99, 97, 100, 100,
100, 100, 100, 101, 102, 102, 102, 102, 102, 102,
--- 1046,1052 ----
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! static const unsigned short yyr1[] =
{
0, 95, 96, 96, 98, 97, 99, 97, 100, 100,
100, 100, 100, 101, 102, 102, 102, 102, 102, 102,
*************** static const unsigned char yyr2[] =
*** 1206,1212 ****
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
! static const unsigned short int yydefact[] =
{
13, 0, 13, 4, 1, 6, 0, 0, 0, 282,
316, 315, 279, 141, 372, 368, 370, 0, 62, 0,
--- 1204,1210 ----
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
! static const unsigned short yydefact[] =
{
13, 0, 13, 4, 1, 6, 0, 0, 0, 282,
316, 315, 279, 141, 372, 368, 370, 0, 62, 0,
*************** static const unsigned short int yydefact
*** 1328,1334 ****
};
/* YYDEFGOTO[NTERM-NUM]. */
! static const short int yydefgoto[] =
{
-1, 1, 2, 6, 7, 32, 3, 33, 34, 423,
858, 429, 860, 276, 726, 898, 238, 353, 523, 524,
--- 1326,1332 ----
};
/* YYDEFGOTO[NTERM-NUM]. */
! static const short yydefgoto[] =
{
-1, 1, 2, 6, 7, 32, 3, 33, 34, 423,
858, 429, 860, 276, 726, 898, 238, 353, 523, 524,
*************** static const short int yydefgoto[] =
*** 1362,1368 ****
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -970
! static const short int yypact[] =
{
135, 149, 154, -970, -970, -970, 3846, 3846, 514, 111,
-970, -970, -970, -970, 153, 153, 153, 117, -970, 128,
--- 1360,1366 ----
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -970
! static const short yypact[] =
{
135, 149, 154, -970, -970, -970, 3846, 3846, 514, 111,
-970, -970, -970, -970, 153, 153, 153, 117, -970, 128,
*************** static const short int yypact[] =
*** 1484,1490 ****
};
/* YYPGOTO[NTERM-NUM]. */
! static const short int yypgoto[] =
{
-970, -970, -970, -970, -970, 177, 1118, 501, -970, -970,
-970, -970, -970, -970, -970, 146, -970, -27, 509, -425,
--- 1482,1488 ----
};
/* YYPGOTO[NTERM-NUM]. */
! static const short yypgoto[] =
{
-970, -970, -970, -970, -970, 177, 1118, 501, -970, -970,
-970, -970, -970, -970, -970, 146, -970, -27, 509, -425,
*************** static const short int yypgoto[] =
*** 1520,1526 ****
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -630
! static const short int yytable[] =
{
90, 61, 61, 770, 37, 37, 38, 38, 198, 84,
85, 86, 424, 285, 584, 288, 409, 333, 531, 71,
--- 1518,1524 ----
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -630
! static const short yytable[] =
{
90, 61, 61, 770, 37, 37, 38, 38, 198, 84,
85, 86, 424, 285, 584, 288, 409, 333, 531, 71,
*************** static const short int yytable[] =
*** 2013,2019 ****
385
};
! static const short int yycheck[] =
{
19, 6, 7, 605, 6, 7, 6, 7, 89, 14,
15, 16, 285, 183, 425, 184, 275, 197, 392, 6,
--- 2011,2017 ----
385
};
! static const short yycheck[] =
{
19, 6, 7, 605, 6, 7, 6, 7, 89, 14,
15, 16, 285, 183, 425, 184, 275, 197, 392, 6,
*************** static const short int yycheck[] =
*** 2508,2514 ****
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
! static const unsigned short int yystos[] =
{
0, 96, 97, 101, 0, 101, 98, 99, 1, 4,
5, 6, 7, 8, 14, 15, 16, 29, 30, 32,
--- 2506,2512 ----
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
! static const unsigned short yystos[] =
{
0, 96, 97, 101, 0, 101, 98, 99, 1, 4,
5, 6, 7, 8, 14, 15, 16, 29, 30, 32,
*************** static const unsigned short int yystos[]
*** 2652,2659 ****
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrorlab
!
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
--- 2650,2656 ----
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
! #define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
*************** do \
*** 2680,2732 ****
} \
while (0)
-
#define YYTERROR 1
#define YYERRCODE 256
- /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
- #define YYRHSLOC(Rhs, K) ((Rhs)[K])
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! do \
! if (N) \
! { \
! (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
! (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
! (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
! (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
! } \
! else \
! { \
! (Current).first_line = (Current).last_line = \
! YYRHSLOC (Rhs, 0).last_line; \
! (Current).first_column = (Current).last_column = \
! YYRHSLOC (Rhs, 0).last_column; \
! } \
! while (0)
! #endif
!
!
! /* YY_LOCATION_PRINT -- Print the location on the stream.
! This macro was not mandated originally: define only if we know
! we won't break user code: when these are the locations we know. */
!
! #ifndef YY_LOCATION_PRINT
! # if YYLTYPE_IS_TRIVIAL
! # define YY_LOCATION_PRINT(File, Loc) \
! fprintf (File, "%d.%d-%d.%d", \
! (Loc).first_line, (Loc).first_column, \
! (Loc).last_line, (Loc).last_column)
! # else
! # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
! # endif
#endif
-
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
--- 2677,2696 ----
} \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
+ /* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run). */
#ifndef YYLLOC_DEFAULT
! # define YYLLOC_DEFAULT(Current, Rhs, N) \
! Current.first_line = Rhs[1].first_line; \
! Current.first_column = Rhs[1].first_column; \
! Current.last_line = Rhs[N].last_line; \
! Current.last_column = Rhs[N].last_column;
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
#ifdef YYLEX_PARAM
*************** do { \
*** 2749,2778 ****
YYFPRINTF Args; \
} while (0)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Type, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (included). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short int *bottom, short int *top)
#else
static void
yy_stack_print (bottom, top)
! short int *bottom;
! short int *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
--- 2713,2748 ----
YYFPRINTF Args; \
} while (0)
! # define YYDSYMPRINT(Args) \
! do { \
! if (yydebug) \
! yysymprint Args; \
! } while (0)
!
! # define YYDSYMPRINTF(Title, Token, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yysymprint (stderr, \
! Token, Value); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
! | TOP (cinluded). |
`------------------------------------------------------------------*/
#if defined (__STDC__) || defined (__cplusplus)
static void
! yy_stack_print (short *bottom, short *top)
#else
static void
yy_stack_print (bottom, top)
! short *bottom;
! short *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
*************** yy_reduce_print (yyrule)
*** 2802,2810 ****
#endif
{
int yyi;
! unsigned int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
--- 2772,2780 ----
#endif
{
int yyi;
! unsigned int yylineno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
! yyrule - 1, yylineno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
*************** do { \
*** 2822,2828 ****
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
--- 2792,2799 ----
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
! # define YYDSYMPRINT(Args)
! # define YYDSYMPRINTF(Title, Token, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */
*************** int yydebug;
*** 2840,2845 ****
--- 2811,2820 ----
SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
evaluated with infinite-precision integer arithmetic. */
+ #if YYMAXDEPTH == 0
+ # undef YYMAXDEPTH
+ #endif
+
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 2921,2935 ****
(void) yyvaluep;
if (yytype < YYNTOKENS)
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- # ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
- # endif
switch (yytype)
{
default:
--- 2896,2910 ----
(void) yyvaluep;
if (yytype < YYNTOKENS)
! {
! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
! # ifdef YYPRINT
! YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
! # endif
! }
else
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
switch (yytype)
{
default:
*************** yysymprint (yyoutput, yytype, yyvaluep)
*** 2945,2955 ****
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yymsg, yytype, yyvaluep)
! const char *yymsg;
int yytype;
YYSTYPE *yyvaluep;
#endif
--- 2920,2929 ----
#if defined (__STDC__) || defined (__cplusplus)
static void
! yydestruct (int yytype, YYSTYPE *yyvaluep)
#else
static void
! yydestruct (yytype, yyvaluep)
int yytype;
YYSTYPE *yyvaluep;
#endif
*************** yydestruct (yymsg, yytype, yyvaluep)
*** 2957,2966 ****
/* Pacify ``unused variable'' warnings. */
(void) yyvaluep;
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
switch (yytype)
{
--- 2931,2936 ----
*************** int yyparse ();
*** 2988,2997 ****
! /* The look-ahead symbol. */
int yychar;
! /* The semantic value of the look-ahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
--- 2958,2967 ----
! /* The lookahead symbol. */
int yychar;
! /* The semantic value of the lookahead symbol. */
YYSTYPE yylval;
/* Number of syntax errors so far. */
*************** yyparse ()
*** 3027,3033 ****
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Look-ahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
--- 2997,3003 ----
int yyresult;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
! /* Lookahead token as an internal (translated) token number. */
int yytoken = 0;
/* Three stacks and their tools:
*************** yyparse ()
*** 3039,3047 ****
to reallocate them elsewhere. */
/* The state stack. */
! short int yyssa[YYINITDEPTH];
! short int *yyss = yyssa;
! register short int *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
--- 3009,3017 ----
to reallocate them elsewhere. */
/* The state stack. */
! short yyssa[YYINITDEPTH];
! short *yyss = yyssa;
! register short *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
*************** yyparse ()
*** 3078,3086 ****
yyssp = yyss;
yyvsp = yyvs;
-
- yyvsp[0] = yylval;
-
goto yysetstate;
/*------------------------------------------------------------.
--- 3048,3053 ----
*************** yyparse ()
*** 3106,3112 ****
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short int *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
--- 3073,3079 ----
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
! short *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
*************** yyparse ()
*** 3134,3140 ****
yystacksize = YYMAXDEPTH;
{
! short int *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
--- 3101,3107 ----
yystacksize = YYMAXDEPTH;
{
! short *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
*************** yyparse ()
*** 3170,3187 ****
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a look-ahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to look-ahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a look-ahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
--- 3137,3154 ----
yybackup:
/* Do appropriate processing given the current state. */
! /* Read a lookahead token if we need one and don't already have one. */
/* yyresume: */
! /* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
if (yyn == YYPACT_NINF)
goto yydefault;
! /* Not known => get a lookahead token if don't already have one. */
! /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
*************** yybackup:
*** 3196,3202 ****
else
{
yytoken = YYTRANSLATE (yychar);
! YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
--- 3163,3169 ----
else
{
yytoken = YYTRANSLATE (yychar);
! YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
*************** yybackup:
*** 3216,3223 ****
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the look-ahead token. */
! YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
--- 3183,3190 ----
if (yyn == YYFINAL)
YYACCEPT;
! /* Shift the lookahead token. */
! YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
*************** yyreduce:
*** 3275,3306 ****
case 4:
#line 375 "objc/objc-parse.y"
! { (yyval.dsptype) = NULL; ;}
break;
case 5:
#line 376 "objc/objc-parse.y"
! { obstack_free (&parser_obstack, (yyvsp[-2].otype)); ;}
break;
case 6:
#line 378 "objc/objc-parse.y"
! { (yyval.dsptype) = NULL; ggc_collect (); ;}
break;
case 7:
#line 379 "objc/objc-parse.y"
! { obstack_free (&parser_obstack, (yyvsp[-2].otype)); ;}
break;
case 11:
#line 387 "objc/objc-parse.y"
! { RESTORE_EXT_FLAGS ((yyvsp[-1].itype)); ;}
break;
case 13:
#line 394 "objc/objc-parse.y"
! { (yyval.otype) = obstack_alloc (&parser_obstack, 0); ;}
break;
case 14:
--- 3242,3273 ----
case 4:
#line 375 "objc/objc-parse.y"
! { yyval.dsptype = NULL; ;}
break;
case 5:
#line 376 "objc/objc-parse.y"
! { obstack_free (&parser_obstack, yyvsp[-2].otype); ;}
break;
case 6:
#line 378 "objc/objc-parse.y"
! { yyval.dsptype = NULL; ggc_collect (); ;}
break;
case 7:
#line 379 "objc/objc-parse.y"
! { obstack_free (&parser_obstack, yyvsp[-2].otype); ;}
break;
case 11:
#line 387 "objc/objc-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;}
break;
case 13:
#line 394 "objc/objc-parse.y"
! { yyval.otype = obstack_alloc (&parser_obstack, 0); ;}
break;
case 14:
*************** yyreduce:
*** 3321,3327 ****
case 17:
#line 406 "objc/objc-parse.y"
! { shadow_tag (finish_declspecs ((yyvsp[-1].dsptype))); ;}
break;
case 20:
--- 3288,3294 ----
case 17:
#line 406 "objc/objc-parse.y"
! { shadow_tag (finish_declspecs (yyvsp[-1].dsptype)); ;}
break;
case 20:
*************** yyreduce:
*** 3332,3338 ****
case 21:
#line 416 "objc/objc-parse.y"
! { if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
YYERROR1;
;}
--- 3299,3305 ----
case 21:
#line 416 "objc/objc-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
YYERROR1;
;}
*************** yyreduce:
*** 3340,3346 ****
case 22:
#line 421 "objc/objc-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
--- 3307,3313 ----
case 22:
#line 421 "objc/objc-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
*************** yyreduce:
*** 3357,3363 ****
case 25:
#line 429 "objc/objc-parse.y"
! { if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
YYERROR1;
;}
--- 3324,3330 ----
case 25:
#line 429 "objc/objc-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
YYERROR1;
;}
*************** yyreduce:
*** 3365,3371 ****
case 26:
#line 434 "objc/objc-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
--- 3332,3338 ----
case 26:
#line 434 "objc/objc-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
*************** yyreduce:
*** 3382,3388 ****
case 29:
#line 442 "objc/objc-parse.y"
! { if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
YYERROR1;
;}
--- 3349,3355 ----
case 29:
#line 442 "objc/objc-parse.y"
! { if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
YYERROR1;
;}
*************** yyreduce:
*** 3390,3396 ****
case 30:
#line 447 "objc/objc-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
--- 3357,3363 ----
case 30:
#line 447 "objc/objc-parse.y"
! { DECL_SOURCE_LOCATION (current_function_decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
*************** yyreduce:
*** 3407,3535 ****
case 36:
#line 463 "objc/objc-parse.y"
! { (yyval.code) = ADDR_EXPR; ;}
break;
case 37:
#line 465 "objc/objc-parse.y"
! { (yyval.code) = NEGATE_EXPR; ;}
break;
case 38:
#line 467 "objc/objc-parse.y"
! { (yyval.code) = CONVERT_EXPR;
;}
break;
case 39:
#line 470 "objc/objc-parse.y"
! { (yyval.code) = PREINCREMENT_EXPR; ;}
break;
case 40:
#line 472 "objc/objc-parse.y"
! { (yyval.code) = PREDECREMENT_EXPR; ;}
break;
case 41:
#line 474 "objc/objc-parse.y"
! { (yyval.code) = BIT_NOT_EXPR; ;}
break;
case 42:
#line 476 "objc/objc-parse.y"
! { (yyval.code) = TRUTH_NOT_EXPR; ;}
break;
case 44:
#line 481 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_compound_expr ((yyvsp[-2].exprtype).value, (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = COMPOUND_EXPR; ;}
break;
case 45:
#line 487 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 47:
#line 493 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list (NULL_TREE, (yyvsp[0].exprtype).value); ;}
break;
case 48:
#line 495 "objc/objc-parse.y"
! { chainon ((yyvsp[-2].ttype), build_tree_list (NULL_TREE, (yyvsp[0].exprtype).value)); ;}
break;
case 50:
#line 501 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_indirect_ref ((yyvsp[0].exprtype).value, "unary *");
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 51:
#line 505 "objc/objc-parse.y"
! { (yyval.exprtype) = (yyvsp[0].exprtype);
! RESTORE_EXT_FLAGS ((yyvsp[-1].itype)); ;}
break;
case 52:
#line 508 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_unary_op ((yyvsp[-1].code), (yyvsp[0].exprtype).value, 0);
! overflow_warning ((yyval.exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 53:
#line 513 "objc/objc-parse.y"
! { (yyval.exprtype).value = finish_label_address_expr ((yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 54:
#line 516 "objc/objc-parse.y"
{ skip_evaluation--;
in_sizeof--;
! if (TREE_CODE ((yyvsp[0].exprtype).value) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND ((yyvsp[0].exprtype).value, 1)))
error ("% applied to a bit-field");
! (yyval.exprtype) = c_expr_sizeof_expr ((yyvsp[0].exprtype)); ;}
break;
case 55:
#line 523 "objc/objc-parse.y"
{ skip_evaluation--;
in_sizeof--;
! (yyval.exprtype) = c_expr_sizeof_type ((yyvsp[-1].typenametype)); ;}
break;
case 56:
#line 527 "objc/objc-parse.y"
{ skip_evaluation--;
in_alignof--;
! (yyval.exprtype).value = c_alignof_expr ((yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 57:
#line 532 "objc/objc-parse.y"
{ skip_evaluation--;
in_alignof--;
! (yyval.exprtype).value = c_alignof (groktypename ((yyvsp[-1].typenametype)));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 58:
#line 537 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_unary_op (REALPART_EXPR, (yyvsp[0].exprtype).value, 0);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 59:
#line 540 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_unary_op (IMAGPART_EXPR, (yyvsp[0].exprtype).value, 0);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 60:
--- 3374,3502 ----
case 36:
#line 463 "objc/objc-parse.y"
! { yyval.code = ADDR_EXPR; ;}
break;
case 37:
#line 465 "objc/objc-parse.y"
! { yyval.code = NEGATE_EXPR; ;}
break;
case 38:
#line 467 "objc/objc-parse.y"
! { yyval.code = CONVERT_EXPR;
;}
break;
case 39:
#line 470 "objc/objc-parse.y"
! { yyval.code = PREINCREMENT_EXPR; ;}
break;
case 40:
#line 472 "objc/objc-parse.y"
! { yyval.code = PREDECREMENT_EXPR; ;}
break;
case 41:
#line 474 "objc/objc-parse.y"
! { yyval.code = BIT_NOT_EXPR; ;}
break;
case 42:
#line 476 "objc/objc-parse.y"
! { yyval.code = TRUTH_NOT_EXPR; ;}
break;
case 44:
#line 481 "objc/objc-parse.y"
! { yyval.exprtype.value = build_compound_expr (yyvsp[-2].exprtype.value, yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = COMPOUND_EXPR; ;}
break;
case 45:
#line 487 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 47:
#line 493 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].exprtype.value); ;}
break;
case 48:
#line 495 "objc/objc-parse.y"
! { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].exprtype.value)); ;}
break;
case 50:
#line 501 "objc/objc-parse.y"
! { yyval.exprtype.value = build_indirect_ref (yyvsp[0].exprtype.value, "unary *");
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 51:
#line 505 "objc/objc-parse.y"
! { yyval.exprtype = yyvsp[0].exprtype;
! RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;}
break;
case 52:
#line 508 "objc/objc-parse.y"
! { yyval.exprtype.value = build_unary_op (yyvsp[-1].code, yyvsp[0].exprtype.value, 0);
! overflow_warning (yyval.exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 53:
#line 513 "objc/objc-parse.y"
! { yyval.exprtype.value = finish_label_address_expr (yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 54:
#line 516 "objc/objc-parse.y"
{ skip_evaluation--;
in_sizeof--;
! if (TREE_CODE (yyvsp[0].exprtype.value) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].exprtype.value, 1)))
error ("% applied to a bit-field");
! yyval.exprtype = c_expr_sizeof_expr (yyvsp[0].exprtype); ;}
break;
case 55:
#line 523 "objc/objc-parse.y"
{ skip_evaluation--;
in_sizeof--;
! yyval.exprtype = c_expr_sizeof_type (yyvsp[-1].typenametype); ;}
break;
case 56:
#line 527 "objc/objc-parse.y"
{ skip_evaluation--;
in_alignof--;
! yyval.exprtype.value = c_alignof_expr (yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 57:
#line 532 "objc/objc-parse.y"
{ skip_evaluation--;
in_alignof--;
! yyval.exprtype.value = c_alignof (groktypename (yyvsp[-1].typenametype));
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 58:
#line 537 "objc/objc-parse.y"
! { yyval.exprtype.value = build_unary_op (REALPART_EXPR, yyvsp[0].exprtype.value, 0);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 59:
#line 540 "objc/objc-parse.y"
! { yyval.exprtype.value = build_unary_op (IMAGPART_EXPR, yyvsp[0].exprtype.value, 0);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 60:
*************** yyreduce:
*** 3549,3663 ****
case 64:
#line 559 "objc/objc-parse.y"
! { (yyval.exprtype).value = c_cast_expr ((yyvsp[-2].typenametype), (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 66:
#line 566 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 67:
#line 568 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 68:
#line 570 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 69:
#line 572 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 70:
#line 574 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 71:
#line 576 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 72:
#line 578 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 73:
#line 580 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 74:
#line 582 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 75:
#line 584 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 76:
#line 586 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 77:
#line 588 "objc/objc-parse.y"
! { (yyval.exprtype) = parser_build_binary_op ((yyvsp[-1].code), (yyvsp[-2].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 78:
#line 590 "objc/objc-parse.y"
! { (yyvsp[-1].exprtype).value = lang_hooks.truthvalue_conversion
! (default_conversion ((yyvsp[-1].exprtype).value));
! skip_evaluation += (yyvsp[-1].exprtype).value == truthvalue_false_node; ;}
break;
case 79:
#line 594 "objc/objc-parse.y"
! { skip_evaluation -= (yyvsp[-3].exprtype).value == truthvalue_false_node;
! (yyval.exprtype) = parser_build_binary_op (TRUTH_ANDIF_EXPR, (yyvsp[-3].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 80:
#line 597 "objc/objc-parse.y"
! { (yyvsp[-1].exprtype).value = lang_hooks.truthvalue_conversion
! (default_conversion ((yyvsp[-1].exprtype).value));
! skip_evaluation += (yyvsp[-1].exprtype).value == truthvalue_true_node; ;}
break;
case 81:
#line 601 "objc/objc-parse.y"
! { skip_evaluation -= (yyvsp[-3].exprtype).value == truthvalue_true_node;
! (yyval.exprtype) = parser_build_binary_op (TRUTH_ORIF_EXPR, (yyvsp[-3].exprtype), (yyvsp[0].exprtype)); ;}
break;
case 82:
#line 604 "objc/objc-parse.y"
! { (yyvsp[-1].exprtype).value = lang_hooks.truthvalue_conversion
! (default_conversion ((yyvsp[-1].exprtype).value));
! skip_evaluation += (yyvsp[-1].exprtype).value == truthvalue_false_node; ;}
break;
case 83:
#line 608 "objc/objc-parse.y"
! { skip_evaluation += (((yyvsp[-4].exprtype).value == truthvalue_true_node)
! - ((yyvsp[-4].exprtype).value == truthvalue_false_node)); ;}
break;
case 84:
#line 611 "objc/objc-parse.y"
! { skip_evaluation -= (yyvsp[-6].exprtype).value == truthvalue_true_node;
! (yyval.exprtype).value = build_conditional_expr ((yyvsp[-6].exprtype).value, (yyvsp[-3].exprtype).value,
! (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 85:
--- 3516,3630 ----
case 64:
#line 559 "objc/objc-parse.y"
! { yyval.exprtype.value = c_cast_expr (yyvsp[-2].typenametype, yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 66:
#line 566 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 67:
#line 568 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 68:
#line 570 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 69:
#line 572 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 70:
#line 574 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 71:
#line 576 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 72:
#line 578 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 73:
#line 580 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 74:
#line 582 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 75:
#line 584 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 76:
#line 586 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 77:
#line 588 "objc/objc-parse.y"
! { yyval.exprtype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].exprtype, yyvsp[0].exprtype); ;}
break;
case 78:
#line 590 "objc/objc-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! (default_conversion (yyvsp[-1].exprtype.value));
! skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_false_node; ;}
break;
case 79:
#line 594 "objc/objc-parse.y"
! { skip_evaluation -= yyvsp[-3].exprtype.value == truthvalue_false_node;
! yyval.exprtype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].exprtype, yyvsp[0].exprtype); ;}
break;
case 80:
#line 597 "objc/objc-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! (default_conversion (yyvsp[-1].exprtype.value));
! skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_true_node; ;}
break;
case 81:
#line 601 "objc/objc-parse.y"
! { skip_evaluation -= yyvsp[-3].exprtype.value == truthvalue_true_node;
! yyval.exprtype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].exprtype, yyvsp[0].exprtype); ;}
break;
case 82:
#line 604 "objc/objc-parse.y"
! { yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion
! (default_conversion (yyvsp[-1].exprtype.value));
! skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_false_node; ;}
break;
case 83:
#line 608 "objc/objc-parse.y"
! { skip_evaluation += ((yyvsp[-4].exprtype.value == truthvalue_true_node)
! - (yyvsp[-4].exprtype.value == truthvalue_false_node)); ;}
break;
case 84:
#line 611 "objc/objc-parse.y"
! { skip_evaluation -= yyvsp[-6].exprtype.value == truthvalue_true_node;
! yyval.exprtype.value = build_conditional_expr (yyvsp[-6].exprtype.value, yyvsp[-3].exprtype.value,
! yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 85:
*************** yyreduce:
*** 3665,3695 ****
{ if (pedantic)
pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
/* Make sure first operand is calculated only once. */
! (yyvsp[0].ttype) = save_expr (default_conversion ((yyvsp[-1].exprtype).value));
! (yyvsp[-1].exprtype).value = lang_hooks.truthvalue_conversion ((yyvsp[0].ttype));
! skip_evaluation += (yyvsp[-1].exprtype).value == truthvalue_true_node; ;}
break;
case 86:
#line 623 "objc/objc-parse.y"
! { skip_evaluation -= (yyvsp[-4].exprtype).value == truthvalue_true_node;
! (yyval.exprtype).value = build_conditional_expr ((yyvsp[-4].exprtype).value, (yyvsp[-3].ttype),
! (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 87:
#line 628 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_modify_expr ((yyvsp[-2].exprtype).value, NOP_EXPR, (yyvsp[0].exprtype).value);
! (yyval.exprtype).original_code = MODIFY_EXPR;
;}
break;
case 88:
#line 632 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_modify_expr ((yyvsp[-2].exprtype).value, (yyvsp[-1].code), (yyvsp[0].exprtype).value);
! TREE_NO_WARNING ((yyval.exprtype).value) = 1;
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
--- 3632,3662 ----
{ if (pedantic)
pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
/* Make sure first operand is calculated only once. */
! yyvsp[0].ttype = save_expr (default_conversion (yyvsp[-1].exprtype.value));
! yyvsp[-1].exprtype.value = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
! skip_evaluation += yyvsp[-1].exprtype.value == truthvalue_true_node; ;}
break;
case 86:
#line 623 "objc/objc-parse.y"
! { skip_evaluation -= yyvsp[-4].exprtype.value == truthvalue_true_node;
! yyval.exprtype.value = build_conditional_expr (yyvsp[-4].exprtype.value, yyvsp[-3].ttype,
! yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 87:
#line 628 "objc/objc-parse.y"
! { yyval.exprtype.value = build_modify_expr (yyvsp[-2].exprtype.value, NOP_EXPR, yyvsp[0].exprtype.value);
! yyval.exprtype.original_code = MODIFY_EXPR;
;}
break;
case 88:
#line 632 "objc/objc-parse.y"
! { yyval.exprtype.value = build_modify_expr (yyvsp[-2].exprtype.value, yyvsp[-1].code, yyvsp[0].exprtype.value);
! TREE_NO_WARNING (yyval.exprtype.value) = 1;
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
*************** yyreduce:
*** 3698,3796 ****
{
if (yychar == YYEMPTY)
yychar = YYLEX;
! (yyval.exprtype).value = build_external_ref ((yyvsp[0].ttype), yychar == '(');
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 90:
#line 647 "objc/objc-parse.y"
! { (yyval.exprtype).value = (yyvsp[0].ttype); (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 91:
#line 649 "objc/objc-parse.y"
! { (yyval.exprtype).value = (yyvsp[0].ttype); (yyval.exprtype).original_code = STRING_CST; ;}
break;
case 92:
#line 651 "objc/objc-parse.y"
! { (yyval.exprtype).value = fname_decl (C_RID_CODE ((yyvsp[0].ttype)), (yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 93:
#line 654 "objc/objc-parse.y"
{ start_init (NULL_TREE, NULL, 0);
! (yyval.ttype) = groktypename ((yyvsp[-2].typenametype));
! if (C_TYPE_VARIABLE_SIZE ((yyval.ttype)))
{
error ("compound literal has variable size");
! (yyval.ttype) = error_mark_node;
}
! really_start_incremental_init ((yyval.ttype)); ;}
break;
case 94:
#line 663 "objc/objc-parse.y"
{ struct c_expr init = pop_init_level (0);
tree constructor = init.value;
! tree type = (yyvsp[-2].ttype);
finish_init ();
maybe_warn_string_init (type, init);
if (pedantic && !flag_isoc99)
pedwarn ("ISO C90 forbids compound literals");
! (yyval.exprtype).value = build_compound_literal (type, constructor);
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 95:
#line 675 "objc/objc-parse.y"
! { (yyval.exprtype).value = (yyvsp[-1].exprtype).value;
! if (TREE_CODE ((yyval.exprtype).value) == MODIFY_EXPR)
! TREE_NO_WARNING ((yyval.exprtype).value) = 1;
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 96:
#line 680 "objc/objc-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 97:
#line 682 "objc/objc-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids braced-groups within expressions");
! (yyval.exprtype).value = c_finish_stmt_expr ((yyvsp[-2].ttype));
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 98:
#line 688 "objc/objc-parse.y"
! { c_finish_stmt_expr ((yyvsp[-2].ttype));
! (yyval.exprtype).value = error_mark_node;
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 99:
#line 693 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_function_call ((yyvsp[-3].exprtype).value, (yyvsp[-1].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 100:
#line 696 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_va_arg ((yyvsp[-3].exprtype).value, groktypename ((yyvsp[-1].typenametype)));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 101:
#line 700 "objc/objc-parse.y"
! { tree type = groktypename ((yyvsp[-1].typenametype));
if (type == error_mark_node)
offsetof_base = error_mark_node;
else
--- 3665,3763 ----
{
if (yychar == YYEMPTY)
yychar = YYLEX;
! yyval.exprtype.value = build_external_ref (yyvsp[0].ttype, yychar == '(');
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 90:
#line 647 "objc/objc-parse.y"
! { yyval.exprtype.value = yyvsp[0].ttype; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 91:
#line 649 "objc/objc-parse.y"
! { yyval.exprtype.value = yyvsp[0].ttype; yyval.exprtype.original_code = STRING_CST; ;}
break;
case 92:
#line 651 "objc/objc-parse.y"
! { yyval.exprtype.value = fname_decl (C_RID_CODE (yyvsp[0].ttype), yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 93:
#line 654 "objc/objc-parse.y"
{ start_init (NULL_TREE, NULL, 0);
! yyval.ttype = groktypename (yyvsp[-2].typenametype);
! if (C_TYPE_VARIABLE_SIZE (yyval.ttype))
{
error ("compound literal has variable size");
! yyval.ttype = error_mark_node;
}
! really_start_incremental_init (yyval.ttype); ;}
break;
case 94:
#line 663 "objc/objc-parse.y"
{ struct c_expr init = pop_init_level (0);
tree constructor = init.value;
! tree type = yyvsp[-2].ttype;
finish_init ();
maybe_warn_string_init (type, init);
if (pedantic && !flag_isoc99)
pedwarn ("ISO C90 forbids compound literals");
! yyval.exprtype.value = build_compound_literal (type, constructor);
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 95:
#line 675 "objc/objc-parse.y"
! { yyval.exprtype.value = yyvsp[-1].exprtype.value;
! if (TREE_CODE (yyval.exprtype.value) == MODIFY_EXPR)
! TREE_NO_WARNING (yyval.exprtype.value) = 1;
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 96:
#line 680 "objc/objc-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 97:
#line 682 "objc/objc-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids braced-groups within expressions");
! yyval.exprtype.value = c_finish_stmt_expr (yyvsp[-2].ttype);
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 98:
#line 688 "objc/objc-parse.y"
! { c_finish_stmt_expr (yyvsp[-2].ttype);
! yyval.exprtype.value = error_mark_node;
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 99:
#line 693 "objc/objc-parse.y"
! { yyval.exprtype.value = build_function_call (yyvsp[-3].exprtype.value, yyvsp[-1].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 100:
#line 696 "objc/objc-parse.y"
! { yyval.exprtype.value = build_va_arg (yyvsp[-3].exprtype.value, groktypename (yyvsp[-1].typenametype));
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 101:
#line 700 "objc/objc-parse.y"
! { tree type = groktypename (yyvsp[-1].typenametype);
if (type == error_mark_node)
offsetof_base = error_mark_node;
else
*************** yyreduce:
*** 3800,3812 ****
case 102:
#line 707 "objc/objc-parse.y"
! { (yyval.exprtype).value = fold_offsetof ((yyvsp[-1].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 103:
#line 710 "objc/objc-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 104:
--- 3767,3779 ----
case 102:
#line 707 "objc/objc-parse.y"
! { yyval.exprtype.value = fold_offsetof (yyvsp[-1].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 103:
#line 710 "objc/objc-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 104:
*************** yyreduce:
*** 3814,3831 ****
{
tree c;
! c = fold ((yyvsp[-5].exprtype).value);
STRIP_NOPS (c);
if (TREE_CODE (c) != INTEGER_CST)
error ("first argument to %<__builtin_choose_expr%> not"
" a constant");
! (yyval.exprtype) = integer_zerop (c) ? (yyvsp[-1].exprtype) : (yyvsp[-3].exprtype);
;}
break;
case 105:
#line 724 "objc/objc-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 106:
--- 3781,3798 ----
{
tree c;
! c = fold (yyvsp[-5].exprtype.value);
STRIP_NOPS (c);
if (TREE_CODE (c) != INTEGER_CST)
error ("first argument to %<__builtin_choose_expr%> not"
" a constant");
! yyval.exprtype = integer_zerop (c) ? yyvsp[-1].exprtype : yyvsp[-3].exprtype;
;}
break;
case 105:
#line 724 "objc/objc-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 106:
*************** yyreduce:
*** 3833,3929 ****
{
tree e1, e2;
! e1 = TYPE_MAIN_VARIANT (groktypename ((yyvsp[-3].typenametype)));
! e2 = TYPE_MAIN_VARIANT (groktypename ((yyvsp[-1].typenametype)));
! (yyval.exprtype).value = comptypes (e1, e2)
? build_int_cst (NULL_TREE, 1)
: build_int_cst (NULL_TREE, 0);
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 107:
#line 738 "objc/objc-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 108:
#line 740 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_array_ref ((yyvsp[-3].exprtype).value, (yyvsp[-1].exprtype).value);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 109:
#line 743 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_component_ref ((yyvsp[-2].exprtype).value, (yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 110:
#line 746 "objc/objc-parse.y"
{
! tree expr = build_indirect_ref ((yyvsp[-2].exprtype).value, "->");
! (yyval.exprtype).value = build_component_ref (expr, (yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK;
;}
break;
case 111:
#line 752 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_unary_op (POSTINCREMENT_EXPR, (yyvsp[-1].exprtype).value, 0);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 112:
#line 755 "objc/objc-parse.y"
! { (yyval.exprtype).value = build_unary_op (POSTDECREMENT_EXPR, (yyvsp[-1].exprtype).value, 0);
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 113:
#line 758 "objc/objc-parse.y"
! { (yyval.exprtype).value = objc_build_message_expr ((yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 114:
#line 761 "objc/objc-parse.y"
! { (yyval.exprtype).value = objc_build_selector_expr ((yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 115:
#line 764 "objc/objc-parse.y"
! { (yyval.exprtype).value = objc_build_protocol_expr ((yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 116:
#line 767 "objc/objc-parse.y"
! { (yyval.exprtype).value = objc_build_encode_expr ((yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 117:
#line 770 "objc/objc-parse.y"
! { (yyval.exprtype).value = objc_build_string_object ((yyvsp[0].ttype));
! (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 118:
#line 780 "objc/objc-parse.y"
! { (yyval.ttype) = build_component_ref (offsetof_base, (yyvsp[0].ttype)); ;}
break;
case 119:
#line 782 "objc/objc-parse.y"
! { (yyval.ttype) = build_component_ref ((yyvsp[-2].ttype), (yyvsp[0].ttype)); ;}
break;
case 120:
#line 784 "objc/objc-parse.y"
! { (yyval.ttype) = build_array_ref ((yyvsp[-3].ttype), (yyvsp[-1].exprtype).value); ;}
break;
case 123:
--- 3800,3896 ----
{
tree e1, e2;
! e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].typenametype));
! e2 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-1].typenametype));
! yyval.exprtype.value = comptypes (e1, e2)
? build_int_cst (NULL_TREE, 1)
: build_int_cst (NULL_TREE, 0);
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 107:
#line 738 "objc/objc-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 108:
#line 740 "objc/objc-parse.y"
! { yyval.exprtype.value = build_array_ref (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 109:
#line 743 "objc/objc-parse.y"
! { yyval.exprtype.value = build_component_ref (yyvsp[-2].exprtype.value, yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 110:
#line 746 "objc/objc-parse.y"
{
! tree expr = build_indirect_ref (yyvsp[-2].exprtype.value, "->");
! yyval.exprtype.value = build_component_ref (expr, yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK;
;}
break;
case 111:
#line 752 "objc/objc-parse.y"
! { yyval.exprtype.value = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].exprtype.value, 0);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 112:
#line 755 "objc/objc-parse.y"
! { yyval.exprtype.value = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].exprtype.value, 0);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 113:
#line 758 "objc/objc-parse.y"
! { yyval.exprtype.value = objc_build_message_expr (yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 114:
#line 761 "objc/objc-parse.y"
! { yyval.exprtype.value = objc_build_selector_expr (yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 115:
#line 764 "objc/objc-parse.y"
! { yyval.exprtype.value = objc_build_protocol_expr (yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 116:
#line 767 "objc/objc-parse.y"
! { yyval.exprtype.value = objc_build_encode_expr (yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 117:
#line 770 "objc/objc-parse.y"
! { yyval.exprtype.value = objc_build_string_object (yyvsp[0].ttype);
! yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 118:
#line 780 "objc/objc-parse.y"
! { yyval.ttype = build_component_ref (offsetof_base, yyvsp[0].ttype); ;}
break;
case 119:
#line 782 "objc/objc-parse.y"
! { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ;}
break;
case 120:
#line 784 "objc/objc-parse.y"
! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].exprtype.value); ;}
break;
case 123:
*************** yyreduce:
*** 3943,3949 ****
case 130:
#line 817 "objc/objc-parse.y"
! { shadow_tag_warned (finish_declspecs ((yyvsp[-1].dsptype)), 1);
pedwarn ("empty declaration"); ;}
break;
--- 3910,3916 ----
case 130:
#line 817 "objc/objc-parse.y"
! { shadow_tag_warned (finish_declspecs (yyvsp[-1].dsptype), 1);
pedwarn ("empty declaration"); ;}
break;
*************** yyreduce:
*** 3961,3971 ****
#line 837 "objc/objc-parse.y"
{ pending_xref_error ();
PUSH_DECLSPEC_STACK;
! if ((yyvsp[0].dsptype))
{
! prefix_attributes = (yyvsp[0].dsptype)->attrs;
! (yyvsp[0].dsptype)->attrs = NULL_TREE;
! current_declspecs = (yyvsp[0].dsptype);
}
else
{
--- 3928,3938 ----
#line 837 "objc/objc-parse.y"
{ pending_xref_error ();
PUSH_DECLSPEC_STACK;
! if (yyvsp[0].dsptype)
{
! prefix_attributes = yyvsp[0].dsptype->attrs;
! yyvsp[0].dsptype->attrs = NULL_TREE;
! current_declspecs = yyvsp[0].dsptype;
}
else
{
*************** yyreduce:
*** 3978,3984 ****
case 134:
#line 858 "objc/objc-parse.y"
! { all_prefix_attributes = chainon ((yyvsp[0].ttype), prefix_attributes); ;}
break;
case 135:
--- 3945,3951 ----
case 134:
#line 858 "objc/objc-parse.y"
! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;}
break;
case 135:
*************** yyreduce:
*** 4003,4454 ****
case 139:
#line 871 "objc/objc-parse.y"
! { shadow_tag (finish_declspecs ((yyvsp[-1].dsptype))); ;}
break;
case 140:
#line 873 "objc/objc-parse.y"
! { RESTORE_EXT_FLAGS ((yyvsp[-1].itype)); ;}
break;
case 141:
#line 919 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual (build_null_declspecs (), (yyvsp[0].ttype)); ;}
break;
case 142:
#line 921 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 143:
#line 923 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 144:
#line 928 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 145:
#line 933 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 146:
#line 935 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 147:
#line 940 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs (build_null_declspecs (), (yyvsp[0].ttype)); ;}
break;
case 148:
#line 942 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 149:
#line 947 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type (build_null_declspecs (), (yyvsp[0].tstype)); ;}
break;
case 150:
#line 949 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 151:
#line 951 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 152:
#line 953 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 153:
#line 955 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 154:
#line 957 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 155:
#line 959 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 156:
#line 964 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type (build_null_declspecs (), (yyvsp[0].tstype)); ;}
break;
case 157:
#line 966 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 158:
#line 968 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 159:
#line 970 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 160:
#line 972 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 161:
#line 974 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 162:
#line 979 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 163:
#line 981 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 164:
#line 983 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 165:
#line 985 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 166:
#line 987 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 167:
#line 989 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 168:
#line 994 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 169:
#line 996 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 170:
#line 998 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 171:
#line 1000 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 172:
#line 1002 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 173:
#line 1007 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec (build_null_declspecs (), (yyvsp[0].ttype)); ;}
break;
case 174:
#line 1009 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 175:
#line 1011 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 176:
#line 1013 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 177:
#line 1015 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 178:
#line 1017 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 179:
#line 1019 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 180:
#line 1024 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 181:
#line 1029 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 182:
#line 1031 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 183:
#line 1033 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 184:
#line 1035 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 185:
#line 1037 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 186:
#line 1039 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 187:
#line 1044 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 188:
#line 1049 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 189:
#line 1051 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 190:
#line 1053 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 191:
#line 1055 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 192:
#line 1057 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 193:
#line 1059 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 194:
#line 1061 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 195:
#line 1063 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 196:
#line 1065 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 197:
#line 1067 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 198:
#line 1072 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 199:
#line 1074 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 200:
#line 1076 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 201:
#line 1078 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 202:
#line 1080 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 203:
#line 1085 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 204:
#line 1087 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_qual ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 205:
#line 1089 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 206:
#line 1091 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 207:
#line 1093 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 208:
#line 1095 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 209:
#line 1097 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 210:
#line 1099 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 211:
#line 1101 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 212:
#line 1103 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_scspec ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 213:
#line 1108 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_attrs ((yyvsp[-1].dsptype), (yyvsp[0].ttype)); ;}
break;
case 214:
#line 1110 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 215:
#line 1112 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 216:
#line 1114 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 217:
#line 1116 "objc/objc-parse.y"
! { (yyval.dsptype) = declspecs_add_type ((yyvsp[-1].dsptype), (yyvsp[0].tstype)); ;}
break;
case 274:
#line 1203 "objc/objc-parse.y"
! { (yyval.dsptype) = NULL; ;}
break;
case 275:
#line 1205 "objc/objc-parse.y"
! { (yyval.dsptype) = (yyvsp[0].dsptype); ;}
break;
case 279:
#line 1240 "objc/objc-parse.y"
{ OBJC_NEED_RAW_IDENTIFIER (1);
! (yyval.tstype).kind = ctsk_resword;
! (yyval.tstype).spec = (yyvsp[0].ttype); ;}
break;
case 282:
#line 1252 "objc/objc-parse.y"
{ /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
! (yyval.tstype).kind = ctsk_typedef;
! (yyval.tstype).spec = lookup_name ((yyvsp[0].ttype)); ;}
break;
case 283:
#line 1257 "objc/objc-parse.y"
! { (yyval.tstype).kind = ctsk_objc;
! (yyval.tstype).spec = objc_get_protocol_qualified_type ((yyvsp[-1].ttype), (yyvsp[0].ttype)); ;}
break;
case 284:
#line 1260 "objc/objc-parse.y"
! { (yyval.tstype).kind = ctsk_objc;
! (yyval.tstype).spec = objc_get_protocol_qualified_type ((yyvsp[-1].ttype), (yyvsp[0].ttype)); ;}
break;
case 285:
#line 1266 "objc/objc-parse.y"
! { (yyval.tstype).kind = ctsk_objc;
! (yyval.tstype).spec = objc_get_protocol_qualified_type (NULL_TREE, (yyvsp[0].ttype)); ;}
break;
case 286:
#line 1269 "objc/objc-parse.y"
{ skip_evaluation--;
in_typeof--;
! if (TREE_CODE ((yyvsp[-1].exprtype).value) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND ((yyvsp[-1].exprtype).value, 1)))
error ("% applied to a bit-field");
! (yyval.tstype).kind = ctsk_typeof;
! (yyval.tstype).spec = TREE_TYPE ((yyvsp[-1].exprtype).value);
! pop_maybe_used (variably_modified_type_p ((yyval.tstype).spec,
NULL_TREE)); ;}
break;
--- 3970,4421 ----
case 139:
#line 871 "objc/objc-parse.y"
! { shadow_tag (finish_declspecs (yyvsp[-1].dsptype)); ;}
break;
case 140:
#line 873 "objc/objc-parse.y"
! { RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;}
break;
case 141:
#line 919 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (build_null_declspecs (), yyvsp[0].ttype); ;}
break;
case 142:
#line 921 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 143:
#line 923 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 144:
#line 928 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 145:
#line 933 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 146:
#line 935 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 147:
#line 940 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (build_null_declspecs (), yyvsp[0].ttype); ;}
break;
case 148:
#line 942 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 149:
#line 947 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (build_null_declspecs (), yyvsp[0].tstype); ;}
break;
case 150:
#line 949 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 151:
#line 951 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 152:
#line 953 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 153:
#line 955 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 154:
#line 957 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 155:
#line 959 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 156:
#line 964 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (build_null_declspecs (), yyvsp[0].tstype); ;}
break;
case 157:
#line 966 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 158:
#line 968 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 159:
#line 970 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 160:
#line 972 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 161:
#line 974 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 162:
#line 979 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 163:
#line 981 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 164:
#line 983 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 165:
#line 985 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 166:
#line 987 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 167:
#line 989 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 168:
#line 994 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 169:
#line 996 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 170:
#line 998 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 171:
#line 1000 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 172:
#line 1002 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 173:
#line 1007 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (build_null_declspecs (), yyvsp[0].ttype); ;}
break;
case 174:
#line 1009 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 175:
#line 1011 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 176:
#line 1013 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 177:
#line 1015 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 178:
#line 1017 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 179:
#line 1019 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 180:
#line 1024 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 181:
#line 1029 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 182:
#line 1031 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 183:
#line 1033 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 184:
#line 1035 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 185:
#line 1037 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 186:
#line 1039 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 187:
#line 1044 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 188:
#line 1049 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 189:
#line 1051 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 190:
#line 1053 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 191:
#line 1055 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 192:
#line 1057 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 193:
#line 1059 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 194:
#line 1061 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 195:
#line 1063 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 196:
#line 1065 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 197:
#line 1067 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 198:
#line 1072 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 199:
#line 1074 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 200:
#line 1076 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 201:
#line 1078 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 202:
#line 1080 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 203:
#line 1085 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 204:
#line 1087 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_qual (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 205:
#line 1089 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 206:
#line 1091 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 207:
#line 1093 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 208:
#line 1095 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 209:
#line 1097 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 210:
#line 1099 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 211:
#line 1101 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 212:
#line 1103 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_scspec (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 213:
#line 1108 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_attrs (yyvsp[-1].dsptype, yyvsp[0].ttype); ;}
break;
case 214:
#line 1110 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 215:
#line 1112 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 216:
#line 1114 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 217:
#line 1116 "objc/objc-parse.y"
! { yyval.dsptype = declspecs_add_type (yyvsp[-1].dsptype, yyvsp[0].tstype); ;}
break;
case 274:
#line 1203 "objc/objc-parse.y"
! { yyval.dsptype = NULL; ;}
break;
case 275:
#line 1205 "objc/objc-parse.y"
! { yyval.dsptype = yyvsp[0].dsptype; ;}
break;
case 279:
#line 1240 "objc/objc-parse.y"
{ OBJC_NEED_RAW_IDENTIFIER (1);
! yyval.tstype.kind = ctsk_resword;
! yyval.tstype.spec = yyvsp[0].ttype; ;}
break;
case 282:
#line 1252 "objc/objc-parse.y"
{ /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
! yyval.tstype.kind = ctsk_typedef;
! yyval.tstype.spec = lookup_name (yyvsp[0].ttype); ;}
break;
case 283:
#line 1257 "objc/objc-parse.y"
! { yyval.tstype.kind = ctsk_objc;
! yyval.tstype.spec = objc_get_protocol_qualified_type (yyvsp[-1].ttype, yyvsp[0].ttype); ;}
break;
case 284:
#line 1260 "objc/objc-parse.y"
! { yyval.tstype.kind = ctsk_objc;
! yyval.tstype.spec = objc_get_protocol_qualified_type (yyvsp[-1].ttype, yyvsp[0].ttype); ;}
break;
case 285:
#line 1266 "objc/objc-parse.y"
! { yyval.tstype.kind = ctsk_objc;
! yyval.tstype.spec = objc_get_protocol_qualified_type (NULL_TREE, yyvsp[0].ttype); ;}
break;
case 286:
#line 1269 "objc/objc-parse.y"
{ skip_evaluation--;
in_typeof--;
! if (TREE_CODE (yyvsp[-1].exprtype.value) == COMPONENT_REF
! && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[-1].exprtype.value, 1)))
error ("% applied to a bit-field");
! yyval.tstype.kind = ctsk_typeof;
! yyval.tstype.spec = TREE_TYPE (yyvsp[-1].exprtype.value);
! pop_maybe_used (variably_modified_type_p (yyval.tstype.spec,
NULL_TREE)); ;}
break;
*************** yyreduce:
*** 4456,4592 ****
#line 1279 "objc/objc-parse.y"
{ skip_evaluation--;
in_typeof--;
! (yyval.tstype).kind = ctsk_typeof;
! (yyval.tstype).spec = groktypename ((yyvsp[-1].typenametype));
! pop_maybe_used (variably_modified_type_p ((yyval.tstype).spec,
NULL_TREE)); ;}
break;
case 292:
#line 1301 "objc/objc-parse.y"
! { (yyval.ttype) = start_decl ((yyvsp[-3].dtrtype), current_declspecs, true,
! chainon ((yyvsp[-1].ttype), all_prefix_attributes));
! if (!(yyval.ttype))
! (yyval.ttype) = error_mark_node;
! start_init ((yyval.ttype), (yyvsp[-2].ttype), global_bindings_p ()); ;}
break;
case 293:
#line 1308 "objc/objc-parse.y"
{ finish_init ();
! if ((yyvsp[-1].ttype) != error_mark_node)
{
! maybe_warn_string_init (TREE_TYPE ((yyvsp[-1].ttype)), (yyvsp[0].exprtype));
! finish_decl ((yyvsp[-1].ttype), (yyvsp[0].exprtype).value, (yyvsp[-4].ttype));
}
;}
break;
case 294:
#line 1316 "objc/objc-parse.y"
! { tree d = start_decl ((yyvsp[-2].dtrtype), current_declspecs, false,
! chainon ((yyvsp[0].ttype), all_prefix_attributes));
if (d)
! finish_decl (d, NULL_TREE, (yyvsp[-1].ttype));
;}
break;
case 295:
#line 1325 "objc/objc-parse.y"
! { (yyval.ttype) = start_decl ((yyvsp[-3].dtrtype), current_declspecs, true,
! chainon ((yyvsp[-1].ttype), all_prefix_attributes));
! if (!(yyval.ttype))
! (yyval.ttype) = error_mark_node;
! start_init ((yyval.ttype), (yyvsp[-2].ttype), global_bindings_p ()); ;}
break;
case 296:
#line 1332 "objc/objc-parse.y"
{ finish_init ();
! if ((yyvsp[-1].ttype) != error_mark_node)
{
! maybe_warn_string_init (TREE_TYPE ((yyvsp[-1].ttype)), (yyvsp[0].exprtype));
! finish_decl ((yyvsp[-1].ttype), (yyvsp[0].exprtype).value, (yyvsp[-4].ttype));
}
;}
break;
case 297:
#line 1340 "objc/objc-parse.y"
! { tree d = start_decl ((yyvsp[-2].dtrtype), current_declspecs, false,
! chainon ((yyvsp[0].ttype), all_prefix_attributes));
if (d)
! finish_decl (d, NULL_TREE, (yyvsp[-1].ttype)); ;}
break;
case 298:
#line 1349 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 299:
#line 1351 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 300:
#line 1356 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 301:
#line 1358 "objc/objc-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-1].ttype), (yyvsp[0].ttype)); ;}
break;
case 302:
#line 1364 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[-3].ttype); ;}
break;
case 303:
#line 1366 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 304:
#line 1371 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 305:
#line 1373 "objc/objc-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), (yyvsp[0].ttype)); ;}
break;
case 306:
#line 1378 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 307:
#line 1380 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[0].ttype), NULL_TREE); ;}
break;
case 308:
#line 1382 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[-3].ttype), build_tree_list (NULL_TREE, (yyvsp[-1].ttype))); ;}
break;
case 309:
#line 1384 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[-5].ttype), tree_cons (NULL_TREE, (yyvsp[-3].ttype), (yyvsp[-1].ttype))); ;}
break;
case 310:
#line 1386 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[-3].ttype), (yyvsp[-1].ttype)); ;}
break;
case 317:
#line 1408 "objc/objc-parse.y"
! { (yyval.exprtype) = (yyvsp[0].exprtype); ;}
break;
case 318:
--- 4423,4559 ----
#line 1279 "objc/objc-parse.y"
{ skip_evaluation--;
in_typeof--;
! yyval.tstype.kind = ctsk_typeof;
! yyval.tstype.spec = groktypename (yyvsp[-1].typenametype);
! pop_maybe_used (variably_modified_type_p (yyval.tstype.spec,
NULL_TREE)); ;}
break;
case 292:
#line 1301 "objc/objc-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].dtrtype, current_declspecs, true,
! chainon (yyvsp[-1].ttype, all_prefix_attributes));
! if (!yyval.ttype)
! yyval.ttype = error_mark_node;
! start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;}
break;
case 293:
#line 1308 "objc/objc-parse.y"
{ finish_init ();
! if (yyvsp[-1].ttype != error_mark_node)
{
! maybe_warn_string_init (TREE_TYPE (yyvsp[-1].ttype), yyvsp[0].exprtype);
! finish_decl (yyvsp[-1].ttype, yyvsp[0].exprtype.value, yyvsp[-4].ttype);
}
;}
break;
case 294:
#line 1316 "objc/objc-parse.y"
! { tree d = start_decl (yyvsp[-2].dtrtype, current_declspecs, false,
! chainon (yyvsp[0].ttype, all_prefix_attributes));
if (d)
! finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
;}
break;
case 295:
#line 1325 "objc/objc-parse.y"
! { yyval.ttype = start_decl (yyvsp[-3].dtrtype, current_declspecs, true,
! chainon (yyvsp[-1].ttype, all_prefix_attributes));
! if (!yyval.ttype)
! yyval.ttype = error_mark_node;
! start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;}
break;
case 296:
#line 1332 "objc/objc-parse.y"
{ finish_init ();
! if (yyvsp[-1].ttype != error_mark_node)
{
! maybe_warn_string_init (TREE_TYPE (yyvsp[-1].ttype), yyvsp[0].exprtype);
! finish_decl (yyvsp[-1].ttype, yyvsp[0].exprtype.value, yyvsp[-4].ttype);
}
;}
break;
case 297:
#line 1340 "objc/objc-parse.y"
! { tree d = start_decl (yyvsp[-2].dtrtype, current_declspecs, false,
! chainon (yyvsp[0].ttype, all_prefix_attributes));
if (d)
! finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;}
break;
case 298:
#line 1349 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 299:
#line 1351 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 300:
#line 1356 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 301:
#line 1358 "objc/objc-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;}
break;
case 302:
#line 1364 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[-3].ttype; ;}
break;
case 303:
#line 1366 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 304:
#line 1371 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 305:
#line 1373 "objc/objc-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;}
break;
case 306:
#line 1378 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 307:
#line 1380 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;}
break;
case 308:
#line 1382 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;}
break;
case 309:
#line 1384 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;}
break;
case 310:
#line 1386 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;}
break;
case 317:
#line 1408 "objc/objc-parse.y"
! { yyval.exprtype = yyvsp[0].exprtype; ;}
break;
case 318:
*************** yyreduce:
*** 4596,4607 ****
case 319:
#line 1412 "objc/objc-parse.y"
! { (yyval.exprtype) = pop_init_level (0); ;}
break;
case 320:
#line 1414 "objc/objc-parse.y"
! { (yyval.exprtype).value = error_mark_node; (yyval.exprtype).original_code = ERROR_MARK; ;}
break;
case 321:
--- 4563,4574 ----
case 319:
#line 1412 "objc/objc-parse.y"
! { yyval.exprtype = pop_init_level (0); ;}
break;
case 320:
#line 1414 "objc/objc-parse.y"
! { yyval.exprtype.value = error_mark_node; yyval.exprtype.original_code = ERROR_MARK; ;}
break;
case 321:
*************** yyreduce:
*** 4624,4630 ****
case 327:
#line 1440 "objc/objc-parse.y"
! { set_init_label ((yyvsp[-1].ttype));
if (pedantic)
pedwarn ("obsolete use of designated initializer with %<:%>"); ;}
break;
--- 4591,4597 ----
case 327:
#line 1440 "objc/objc-parse.y"
! { set_init_label (yyvsp[-1].ttype);
if (pedantic)
pedwarn ("obsolete use of designated initializer with %<:%>"); ;}
break;
*************** yyreduce:
*** 4646,4669 ****
case 332:
#line 1454 "objc/objc-parse.y"
! { process_init_element ((yyvsp[0].exprtype)); ;}
break;
case 336:
#line 1465 "objc/objc-parse.y"
! { set_init_label ((yyvsp[0].ttype)); ;}
break;
case 338:
#line 1471 "objc/objc-parse.y"
! { set_init_index ((yyvsp[-3].exprtype).value, (yyvsp[-1].exprtype).value);
if (pedantic)
pedwarn ("ISO C forbids specifying range of elements to initialize"); ;}
break;
case 339:
#line 1475 "objc/objc-parse.y"
! { set_init_index ((yyvsp[-1].exprtype).value, NULL_TREE); ;}
break;
case 340:
--- 4613,4636 ----
case 332:
#line 1454 "objc/objc-parse.y"
! { process_init_element (yyvsp[0].exprtype); ;}
break;
case 336:
#line 1465 "objc/objc-parse.y"
! { set_init_label (yyvsp[0].ttype); ;}
break;
case 338:
#line 1471 "objc/objc-parse.y"
! { set_init_index (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value);
if (pedantic)
pedwarn ("ISO C forbids specifying range of elements to initialize"); ;}
break;
case 339:
#line 1475 "objc/objc-parse.y"
! { set_init_index (yyvsp[-1].exprtype.value, NULL_TREE); ;}
break;
case 340:
*************** yyreduce:
*** 4672,4678 ****
pedwarn ("ISO C forbids nested functions");
push_function_context ();
! if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
{
pop_function_context ();
--- 4639,4645 ----
pedwarn ("ISO C forbids nested functions");
push_function_context ();
! if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
{
pop_function_context ();
*************** yyreduce:
*** 4684,4697 ****
case 341:
#line 1492 "objc/objc-parse.y"
{ tree decl = current_function_decl;
! DECL_SOURCE_LOCATION (decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
case 342:
#line 1501 "objc/objc-parse.y"
{ tree decl = current_function_decl;
! add_stmt ((yyvsp[0].ttype));
finish_function ();
pop_function_context ();
add_stmt (build_stmt (DECL_EXPR, decl)); ;}
--- 4651,4664 ----
case 341:
#line 1492 "objc/objc-parse.y"
{ tree decl = current_function_decl;
! DECL_SOURCE_LOCATION (decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
case 342:
#line 1501 "objc/objc-parse.y"
{ tree decl = current_function_decl;
! add_stmt (yyvsp[0].ttype);
finish_function ();
pop_function_context ();
add_stmt (build_stmt (DECL_EXPR, decl)); ;}
*************** yyreduce:
*** 4703,4709 ****
pedwarn ("ISO C forbids nested functions");
push_function_context ();
! if (!start_function (current_declspecs, (yyvsp[0].dtrtype),
all_prefix_attributes))
{
pop_function_context ();
--- 4670,4676 ----
pedwarn ("ISO C forbids nested functions");
push_function_context ();
! if (!start_function (current_declspecs, yyvsp[0].dtrtype,
all_prefix_attributes))
{
pop_function_context ();
*************** yyreduce:
*** 4715,4728 ****
case 344:
#line 1522 "objc/objc-parse.y"
{ tree decl = current_function_decl;
! DECL_SOURCE_LOCATION (decl) = (yyvsp[0].location);
store_parm_decls (); ;}
break;
case 345:
#line 1531 "objc/objc-parse.y"
{ tree decl = current_function_decl;
! add_stmt ((yyvsp[0].ttype));
finish_function ();
pop_function_context ();
add_stmt (build_stmt (DECL_EXPR, decl)); ;}
--- 4682,4695 ----
case 344:
#line 1522 "objc/objc-parse.y"
{ tree decl = current_function_decl;
! DECL_SOURCE_LOCATION (decl) = yyvsp[0].location;
store_parm_decls (); ;}
break;
case 345:
#line 1531 "objc/objc-parse.y"
{ tree decl = current_function_decl;
! add_stmt (yyvsp[0].ttype);
finish_function ();
pop_function_context ();
add_stmt (build_stmt (DECL_EXPR, decl)); ;}
*************** yyreduce:
*** 4730,4937 ****
case 348:
#line 1550 "objc/objc-parse.y"
! { (yyval.dtrtype) = (yyvsp[-2].ttype) ? build_attrs_declarator ((yyvsp[-2].ttype), (yyvsp[-1].dtrtype)) : (yyvsp[-1].dtrtype); ;}
break;
case 349:
#line 1552 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 350:
#line 1554 "objc/objc-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), false); ;}
break;
case 351:
#line 1556 "objc/objc-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 352:
#line 1558 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_id_declarator ((yyvsp[0].ttype)); ;}
break;
case 355:
#line 1572 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 356:
#line 1574 "objc/objc-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), false); ;}
break;
case 357:
#line 1576 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_id_declarator ((yyvsp[0].ttype)); ;}
break;
case 358:
#line 1581 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 359:
#line 1583 "objc/objc-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), false); ;}
break;
case 360:
#line 1585 "objc/objc-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 361:
#line 1587 "objc/objc-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 362:
#line 1589 "objc/objc-parse.y"
! { (yyval.dtrtype) = (yyvsp[-2].ttype) ? build_attrs_declarator ((yyvsp[-2].ttype), (yyvsp[-1].dtrtype)) : (yyvsp[-1].dtrtype); ;}
break;
case 363:
#line 1597 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 364:
#line 1599 "objc/objc-parse.y"
! { (yyval.dtrtype) = (yyvsp[-2].ttype) ? build_attrs_declarator ((yyvsp[-2].ttype), (yyvsp[-1].dtrtype)) : (yyvsp[-1].dtrtype); ;}
break;
case 365:
#line 1601 "objc/objc-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 366:
#line 1603 "objc/objc-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), false); ;}
break;
case 367:
#line 1605 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_id_declarator ((yyvsp[0].ttype)); ;}
break;
case 368:
#line 1610 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 369:
#line 1612 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 370:
#line 1617 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 371:
#line 1619 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 372:
#line 1624 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 373:
#line 1626 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 374:
#line 1637 "objc/objc-parse.y"
! { (yyval.ttype) = start_struct (RECORD_TYPE, (yyvsp[-1].ttype));
/* Start scope of tag before parsing components. */
;}
break;
case 375:
#line 1641 "objc/objc-parse.y"
! { (yyval.tstype).spec = finish_struct ((yyvsp[-3].ttype), nreverse ((yyvsp[-2].ttype)),
! chainon ((yyvsp[-6].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef; ;}
break;
case 376:
#line 1645 "objc/objc-parse.y"
! { (yyval.tstype).spec = finish_struct (start_struct (RECORD_TYPE,
NULL_TREE),
! nreverse ((yyvsp[-2].ttype)), chainon ((yyvsp[-4].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef;
;}
break;
case 377:
#line 1651 "objc/objc-parse.y"
! { (yyval.ttype) = start_struct (UNION_TYPE, (yyvsp[-1].ttype)); ;}
break;
case 378:
#line 1653 "objc/objc-parse.y"
! { (yyval.tstype).spec = finish_struct ((yyvsp[-3].ttype), nreverse ((yyvsp[-2].ttype)),
! chainon ((yyvsp[-6].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef; ;}
break;
case 379:
#line 1657 "objc/objc-parse.y"
! { (yyval.tstype).spec = finish_struct (start_struct (UNION_TYPE,
NULL_TREE),
! nreverse ((yyvsp[-2].ttype)), chainon ((yyvsp[-4].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef;
;}
break;
case 380:
#line 1663 "objc/objc-parse.y"
! { (yyval.ttype) = start_enum ((yyvsp[-1].ttype)); ;}
break;
case 381:
#line 1665 "objc/objc-parse.y"
! { (yyval.tstype).spec = finish_enum ((yyvsp[-4].ttype), nreverse ((yyvsp[-3].ttype)),
! chainon ((yyvsp[-7].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef; ;}
break;
case 382:
#line 1669 "objc/objc-parse.y"
! { (yyval.ttype) = start_enum (NULL_TREE); ;}
break;
case 383:
#line 1671 "objc/objc-parse.y"
! { (yyval.tstype).spec = finish_enum ((yyvsp[-4].ttype), nreverse ((yyvsp[-3].ttype)),
! chainon ((yyvsp[-6].ttype), (yyvsp[0].ttype)));
! (yyval.tstype).kind = ctsk_tagdef; ;}
break;
case 384:
#line 1678 "objc/objc-parse.y"
! { (yyval.tstype) = parser_xref_tag (RECORD_TYPE, (yyvsp[0].ttype)); ;}
break;
case 385:
#line 1680 "objc/objc-parse.y"
! { (yyval.tstype) = parser_xref_tag (UNION_TYPE, (yyvsp[0].ttype)); ;}
break;
case 386:
#line 1682 "objc/objc-parse.y"
! { (yyval.tstype) = parser_xref_tag (ENUMERAL_TYPE, (yyvsp[0].ttype));
/* In ISO C, enumerated types can be referred to
only if already defined. */
! if (pedantic && !COMPLETE_TYPE_P ((yyval.tstype).spec))
pedwarn ("ISO C forbids forward references to % types"); ;}
break;
--- 4697,4904 ----
case 348:
#line 1550 "objc/objc-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;}
break;
case 349:
#line 1552 "objc/objc-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 350:
#line 1554 "objc/objc-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;}
break;
case 351:
#line 1556 "objc/objc-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 352:
#line 1558 "objc/objc-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;}
break;
case 355:
#line 1572 "objc/objc-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 356:
#line 1574 "objc/objc-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;}
break;
case 357:
#line 1576 "objc/objc-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;}
break;
case 358:
#line 1581 "objc/objc-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 359:
#line 1583 "objc/objc-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;}
break;
case 360:
#line 1585 "objc/objc-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 361:
#line 1587 "objc/objc-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 362:
#line 1589 "objc/objc-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;}
break;
case 363:
#line 1597 "objc/objc-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 364:
#line 1599 "objc/objc-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;}
break;
case 365:
#line 1601 "objc/objc-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 366:
#line 1603 "objc/objc-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, false); ;}
break;
case 367:
#line 1605 "objc/objc-parse.y"
! { yyval.dtrtype = build_id_declarator (yyvsp[0].ttype); ;}
break;
case 368:
#line 1610 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 369:
#line 1612 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 370:
#line 1617 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 371:
#line 1619 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 372:
#line 1624 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 373:
#line 1626 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 374:
#line 1637 "objc/objc-parse.y"
! { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
/* Start scope of tag before parsing components. */
;}
break;
case 375:
#line 1641 "objc/objc-parse.y"
! { yyval.tstype.spec = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
! chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef; ;}
break;
case 376:
#line 1645 "objc/objc-parse.y"
! { yyval.tstype.spec = finish_struct (start_struct (RECORD_TYPE,
NULL_TREE),
! nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef;
;}
break;
case 377:
#line 1651 "objc/objc-parse.y"
! { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;}
break;
case 378:
#line 1653 "objc/objc-parse.y"
! { yyval.tstype.spec = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
! chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef; ;}
break;
case 379:
#line 1657 "objc/objc-parse.y"
! { yyval.tstype.spec = finish_struct (start_struct (UNION_TYPE,
NULL_TREE),
! nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef;
;}
break;
case 380:
#line 1663 "objc/objc-parse.y"
! { yyval.ttype = start_enum (yyvsp[-1].ttype); ;}
break;
case 381:
#line 1665 "objc/objc-parse.y"
! { yyval.tstype.spec = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! chainon (yyvsp[-7].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef; ;}
break;
case 382:
#line 1669 "objc/objc-parse.y"
! { yyval.ttype = start_enum (NULL_TREE); ;}
break;
case 383:
#line 1671 "objc/objc-parse.y"
! { yyval.tstype.spec = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
! chainon (yyvsp[-6].ttype, yyvsp[0].ttype));
! yyval.tstype.kind = ctsk_tagdef; ;}
break;
case 384:
#line 1678 "objc/objc-parse.y"
! { yyval.tstype = parser_xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;}
break;
case 385:
#line 1680 "objc/objc-parse.y"
! { yyval.tstype = parser_xref_tag (UNION_TYPE, yyvsp[0].ttype); ;}
break;
case 386:
#line 1682 "objc/objc-parse.y"
! { yyval.tstype = parser_xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
/* In ISO C, enumerated types can be referred to
only if already defined. */
! if (pedantic && !COMPLETE_TYPE_P (yyval.tstype.spec))
pedwarn ("ISO C forbids forward references to % types"); ;}
break;
*************** yyreduce:
*** 4943,4965 ****
case 391:
#line 1715 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 392:
#line 1717 "objc/objc-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[0].ttype), (yyvsp[-1].ttype));
pedwarn ("no semicolon at end of struct or union"); ;}
break;
case 393:
#line 1722 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 394:
#line 1724 "objc/objc-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-1].ttype), (yyvsp[-2].ttype)); ;}
break;
case 395:
--- 4910,4932 ----
case 391:
#line 1715 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 392:
#line 1717 "objc/objc-parse.y"
! { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype);
pedwarn ("no semicolon at end of struct or union"); ;}
break;
case 393:
#line 1722 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 394:
#line 1724 "objc/objc-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[-2].ttype); ;}
break;
case 395:
*************** yyreduce:
*** 4970,4981 ****
case 396:
#line 1730 "objc/objc-parse.y"
! { (yyval.ttype) = nreverse (objc_get_class_ivars ((yyvsp[-1].ttype))); ;}
break;
case 397:
#line 1735 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype);
POP_DECLSPEC_STACK; ;}
break;
--- 4937,4948 ----
case 396:
#line 1730 "objc/objc-parse.y"
! { yyval.ttype = nreverse (objc_get_class_ivars (yyvsp[-1].ttype)); ;}
break;
case 397:
#line 1735 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;}
break;
*************** yyreduce:
*** 4985,4998 ****
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
MS P-SDK). */
! (yyval.ttype) = grokfield (build_id_declarator (NULL_TREE),
current_declspecs, NULL_TREE);
POP_DECLSPEC_STACK; ;}
break;
case 399:
#line 1746 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype);
POP_DECLSPEC_STACK; ;}
break;
--- 4952,4965 ----
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
MS P-SDK). */
! yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
current_declspecs, NULL_TREE);
POP_DECLSPEC_STACK; ;}
break;
case 399:
#line 1746 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;}
break;
*************** yyreduce:
*** 5000,5200 ****
#line 1749 "objc/objc-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids member declarations with no members");
! shadow_tag_warned (finish_declspecs ((yyvsp[0].dsptype)), pedantic);
! (yyval.ttype) = NULL_TREE; ;}
break;
case 401:
#line 1754 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 402:
#line 1756 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype);
! RESTORE_EXT_FLAGS ((yyvsp[-1].itype)); ;}
break;
case 404:
#line 1763 "objc/objc-parse.y"
! { TREE_CHAIN ((yyvsp[0].ttype)) = (yyvsp[-3].ttype); (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 406:
#line 1769 "objc/objc-parse.y"
! { TREE_CHAIN ((yyvsp[0].ttype)) = (yyvsp[-3].ttype); (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 407:
#line 1774 "objc/objc-parse.y"
! { (yyval.ttype) = grokfield ((yyvsp[-1].dtrtype), current_declspecs, NULL_TREE);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 408:
#line 1778 "objc/objc-parse.y"
! { (yyval.ttype) = grokfield ((yyvsp[-3].dtrtype), current_declspecs, (yyvsp[-1].exprtype).value);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 409:
#line 1782 "objc/objc-parse.y"
! { (yyval.ttype) = grokfield (build_id_declarator (NULL_TREE),
! current_declspecs, (yyvsp[-1].exprtype).value);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 410:
#line 1790 "objc/objc-parse.y"
! { (yyval.ttype) = grokfield ((yyvsp[-1].dtrtype), current_declspecs, NULL_TREE);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 411:
#line 1794 "objc/objc-parse.y"
! { (yyval.ttype) = grokfield ((yyvsp[-3].dtrtype), current_declspecs, (yyvsp[-1].exprtype).value);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 412:
#line 1798 "objc/objc-parse.y"
! { (yyval.ttype) = grokfield (build_id_declarator (NULL_TREE),
! current_declspecs, (yyvsp[-1].exprtype).value);
! decl_attributes (&(yyval.ttype),
! chainon ((yyvsp[0].ttype), all_prefix_attributes), 0); ;}
break;
case 414:
#line 1810 "objc/objc-parse.y"
! { if ((yyvsp[-2].ttype) == error_mark_node)
! (yyval.ttype) = (yyvsp[-2].ttype);
else
! TREE_CHAIN ((yyvsp[0].ttype)) = (yyvsp[-2].ttype), (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 415:
#line 1815 "objc/objc-parse.y"
! { (yyval.ttype) = error_mark_node; ;}
break;
case 416:
#line 1821 "objc/objc-parse.y"
! { (yyval.ttype) = build_enumerator ((yyvsp[0].ttype), NULL_TREE); ;}
break;
case 417:
#line 1823 "objc/objc-parse.y"
! { (yyval.ttype) = build_enumerator ((yyvsp[-2].ttype), (yyvsp[0].exprtype).value); ;}
break;
case 418:
#line 1828 "objc/objc-parse.y"
{ pending_xref_error ();
! (yyval.dsptype) = finish_declspecs ((yyvsp[0].dsptype)); ;}
break;
case 419:
#line 1831 "objc/objc-parse.y"
! { (yyval.typenametype) = XOBNEW (&parser_obstack, struct c_type_name);
! (yyval.typenametype)->specs = (yyvsp[-1].dsptype);
! (yyval.typenametype)->declarator = (yyvsp[0].dtrtype); ;}
break;
case 420:
#line 1838 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_id_declarator (NULL_TREE); ;}
break;
case 422:
#line 1844 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs, all_prefix_attributes,
build_id_declarator (NULL_TREE)); ;}
break;
case 423:
#line 1847 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs, all_prefix_attributes,
! (yyvsp[0].dtrtype)); ;}
break;
case 424:
#line 1850 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes),
! (yyvsp[-1].dtrtype)); ;}
break;
case 428:
#line 1863 "objc/objc-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 429:
#line 1868 "objc/objc-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator
! ((yyvsp[0].dsptype), build_id_declarator (NULL_TREE)); ;}
break;
case 430:
#line 1871 "objc/objc-parse.y"
! { (yyval.dtrtype) = make_pointer_declarator ((yyvsp[-1].dsptype), (yyvsp[0].dtrtype)); ;}
break;
case 431:
#line 1876 "objc/objc-parse.y"
! { (yyval.dtrtype) = (yyvsp[-2].ttype) ? build_attrs_declarator ((yyvsp[-2].ttype), (yyvsp[-1].dtrtype)) : (yyvsp[-1].dtrtype); ;}
break;
case 432:
#line 1878 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_function_declarator ((yyvsp[0].arginfotype), (yyvsp[-2].dtrtype)); ;}
break;
case 433:
#line 1880 "objc/objc-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner ((yyvsp[0].dtrtype), (yyvsp[-1].dtrtype), true); ;}
break;
case 434:
#line 1882 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_function_declarator
! ((yyvsp[0].arginfotype), build_id_declarator (NULL_TREE)); ;}
break;
case 435:
#line 1885 "objc/objc-parse.y"
! { (yyval.dtrtype) = set_array_declarator_inner
! ((yyvsp[0].dtrtype), build_id_declarator (NULL_TREE), true); ;}
break;
case 436:
#line 1893 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_array_declarator ((yyvsp[-1].exprtype).value, (yyvsp[-2].dsptype), false, false); ;}
break;
case 437:
#line 1895 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_array_declarator (NULL_TREE, (yyvsp[-1].dsptype), false, false); ;}
break;
case 438:
#line 1897 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_array_declarator (NULL_TREE, (yyvsp[-2].dsptype), false, true); ;}
break;
case 439:
#line 1899 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_array_declarator ((yyvsp[-1].exprtype).value, (yyvsp[-2].dsptype), true, false); ;}
break;
case 440:
#line 1902 "objc/objc-parse.y"
! { (yyval.dtrtype) = build_array_declarator ((yyvsp[-1].exprtype).value, (yyvsp[-3].dsptype), true, false); ;}
break;
case 443:
--- 4967,5167 ----
#line 1749 "objc/objc-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids member declarations with no members");
! shadow_tag_warned (finish_declspecs (yyvsp[0].dsptype), pedantic);
! yyval.ttype = NULL_TREE; ;}
break;
case 401:
#line 1754 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 402:
#line 1756 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype;
! RESTORE_EXT_FLAGS (yyvsp[-1].itype); ;}
break;
case 404:
#line 1763 "objc/objc-parse.y"
! { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;}
break;
case 406:
#line 1769 "objc/objc-parse.y"
! { TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;}
break;
case 407:
#line 1774 "objc/objc-parse.y"
! { yyval.ttype = grokfield (yyvsp[-1].dtrtype, current_declspecs, NULL_TREE);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 408:
#line 1778 "objc/objc-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].dtrtype, current_declspecs, yyvsp[-1].exprtype.value);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 409:
#line 1782 "objc/objc-parse.y"
! { yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
! current_declspecs, yyvsp[-1].exprtype.value);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 410:
#line 1790 "objc/objc-parse.y"
! { yyval.ttype = grokfield (yyvsp[-1].dtrtype, current_declspecs, NULL_TREE);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 411:
#line 1794 "objc/objc-parse.y"
! { yyval.ttype = grokfield (yyvsp[-3].dtrtype, current_declspecs, yyvsp[-1].exprtype.value);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 412:
#line 1798 "objc/objc-parse.y"
! { yyval.ttype = grokfield (build_id_declarator (NULL_TREE),
! current_declspecs, yyvsp[-1].exprtype.value);
! decl_attributes (&yyval.ttype,
! chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;}
break;
case 414:
#line 1810 "objc/objc-parse.y"
! { if (yyvsp[-2].ttype == error_mark_node)
! yyval.ttype = yyvsp[-2].ttype;
else
! TREE_CHAIN (yyvsp[0].ttype) = yyvsp[-2].ttype, yyval.ttype = yyvsp[0].ttype; ;}
break;
case 415:
#line 1815 "objc/objc-parse.y"
! { yyval.ttype = error_mark_node; ;}
break;
case 416:
#line 1821 "objc/objc-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;}
break;
case 417:
#line 1823 "objc/objc-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].exprtype.value); ;}
break;
case 418:
#line 1828 "objc/objc-parse.y"
{ pending_xref_error ();
! yyval.dsptype = finish_declspecs (yyvsp[0].dsptype); ;}
break;
case 419:
#line 1831 "objc/objc-parse.y"
! { yyval.typenametype = XOBNEW (&parser_obstack, struct c_type_name);
! yyval.typenametype->specs = yyvsp[-1].dsptype;
! yyval.typenametype->declarator = yyvsp[0].dtrtype; ;}
break;
case 420:
#line 1838 "objc/objc-parse.y"
! { yyval.dtrtype = build_id_declarator (NULL_TREE); ;}
break;
case 422:
#line 1844 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs, all_prefix_attributes,
build_id_declarator (NULL_TREE)); ;}
break;
case 423:
#line 1847 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs, all_prefix_attributes,
! yyvsp[0].dtrtype); ;}
break;
case 424:
#line 1850 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes),
! yyvsp[-1].dtrtype); ;}
break;
case 428:
#line 1863 "objc/objc-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 429:
#line 1868 "objc/objc-parse.y"
! { yyval.dtrtype = make_pointer_declarator
! (yyvsp[0].dsptype, build_id_declarator (NULL_TREE)); ;}
break;
case 430:
#line 1871 "objc/objc-parse.y"
! { yyval.dtrtype = make_pointer_declarator (yyvsp[-1].dsptype, yyvsp[0].dtrtype); ;}
break;
case 431:
#line 1876 "objc/objc-parse.y"
! { yyval.dtrtype = yyvsp[-2].ttype ? build_attrs_declarator (yyvsp[-2].ttype, yyvsp[-1].dtrtype) : yyvsp[-1].dtrtype; ;}
break;
case 432:
#line 1878 "objc/objc-parse.y"
! { yyval.dtrtype = build_function_declarator (yyvsp[0].arginfotype, yyvsp[-2].dtrtype); ;}
break;
case 433:
#line 1880 "objc/objc-parse.y"
! { yyval.dtrtype = set_array_declarator_inner (yyvsp[0].dtrtype, yyvsp[-1].dtrtype, true); ;}
break;
case 434:
#line 1882 "objc/objc-parse.y"
! { yyval.dtrtype = build_function_declarator
! (yyvsp[0].arginfotype, build_id_declarator (NULL_TREE)); ;}
break;
case 435:
#line 1885 "objc/objc-parse.y"
! { yyval.dtrtype = set_array_declarator_inner
! (yyvsp[0].dtrtype, build_id_declarator (NULL_TREE), true); ;}
break;
case 436:
#line 1893 "objc/objc-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-2].dsptype, false, false); ;}
break;
case 437:
#line 1895 "objc/objc-parse.y"
! { yyval.dtrtype = build_array_declarator (NULL_TREE, yyvsp[-1].dsptype, false, false); ;}
break;
case 438:
#line 1897 "objc/objc-parse.y"
! { yyval.dtrtype = build_array_declarator (NULL_TREE, yyvsp[-2].dsptype, false, true); ;}
break;
case 439:
#line 1899 "objc/objc-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-2].dsptype, true, false); ;}
break;
case 440:
#line 1902 "objc/objc-parse.y"
! { yyval.dtrtype = build_array_declarator (yyvsp[-1].exprtype.value, yyvsp[-3].dsptype, true, false); ;}
break;
case 443:
*************** yyreduce:
*** 5215,5221 ****
case 466:
#line 1966 "objc/objc-parse.y"
! { (yyval.ttype) = c_begin_compound_stmt (flag_isoc99); ;}
break;
case 468:
--- 5182,5188 ----
case 466:
#line 1966 "objc/objc-parse.y"
! { yyval.ttype = c_begin_compound_stmt (flag_isoc99); ;}
break;
case 468:
*************** yyreduce:
*** 5227,5233 ****
case 471:
#line 1985 "objc/objc-parse.y"
{ tree link;
! for (link = (yyvsp[-1].ttype); link; link = TREE_CHAIN (link))
{
tree label = declare_label (TREE_VALUE (link));
C_DECLARED_LABEL_FLAG (label) = 1;
--- 5194,5200 ----
case 471:
#line 1985 "objc/objc-parse.y"
{ tree link;
! for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
{
tree label = declare_label (TREE_VALUE (link));
C_DECLARED_LABEL_FLAG (label) = 1;
*************** yyreduce:
*** 5238,5249 ****
case 472:
#line 1999 "objc/objc-parse.y"
! { add_stmt ((yyvsp[0].ttype)); ;}
break;
case 474:
#line 2003 "objc/objc-parse.y"
! { (yyval.ttype) = c_begin_compound_stmt (true); ;}
break;
case 479:
--- 5205,5216 ----
case 472:
#line 1999 "objc/objc-parse.y"
! { add_stmt (yyvsp[0].ttype); ;}
break;
case 474:
#line 2003 "objc/objc-parse.y"
! { yyval.ttype = c_begin_compound_stmt (true); ;}
break;
case 479:
*************** yyreduce:
*** 5254,5278 ****
"only inside a function");
YYERROR;
}
! (yyval.ttype) = c_begin_stmt_expr ();
;}
break;
case 480:
#line 2028 "objc/objc-parse.y"
! { (yyval.ttype) = c_end_compound_stmt ((yyvsp[-1].ttype), true); ;}
break;
case 481:
#line 2036 "objc/objc-parse.y"
{ if (yychar == YYEMPTY)
yychar = YYLEX;
! (yyval.location) = input_location; ;}
break;
case 484:
#line 2049 "objc/objc-parse.y"
! { (yyval.ttype) = c_end_compound_stmt ((yyvsp[-2].ttype), flag_isoc99); ;}
break;
case 485:
--- 5221,5245 ----
"only inside a function");
YYERROR;
}
! yyval.ttype = c_begin_stmt_expr ();
;}
break;
case 480:
#line 2028 "objc/objc-parse.y"
! { yyval.ttype = c_end_compound_stmt (yyvsp[-1].ttype, true); ;}
break;
case 481:
#line 2036 "objc/objc-parse.y"
{ if (yychar == YYEMPTY)
yychar = YYLEX;
! yyval.location = input_location; ;}
break;
case 484:
#line 2049 "objc/objc-parse.y"
! { yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;}
break;
case 485:
*************** yyreduce:
*** 5288,5394 ****
and will have a bare STATEMENT_LIST. But that's ok
because (recursively) all of the component statments
should already have line numbers assigned. */
! if ((yyvsp[0].ttype) && EXPR_P ((yyvsp[0].ttype)))
! SET_EXPR_LOCATION ((yyvsp[0].ttype), (yyvsp[-1].location));
;}
break;
case 486:
#line 2072 "objc/objc-parse.y"
! { if ((yyvsp[0].ttype)) SET_EXPR_LOCATION ((yyvsp[0].ttype), (yyvsp[-1].location)); ;}
break;
case 487:
#line 2076 "objc/objc-parse.y"
! { (yyval.ttype) = lang_hooks.truthvalue_conversion ((yyvsp[0].exprtype).value);
! if (EXPR_P ((yyval.ttype)))
! SET_EXPR_LOCATION ((yyval.ttype), (yyvsp[-1].location)); ;}
break;
case 488:
#line 2089 "objc/objc-parse.y"
! { (yyval.ttype) = c_end_compound_stmt ((yyvsp[-2].ttype), flag_isoc99); ;}
break;
case 489:
#line 2094 "objc/objc-parse.y"
{ if (extra_warnings)
add_stmt (build (NOP_EXPR, NULL_TREE, NULL_TREE));
! (yyval.ttype) = c_end_compound_stmt ((yyvsp[-2].ttype), flag_isoc99); ;}
break;
case 491:
#line 2103 "objc/objc-parse.y"
! { c_finish_if_stmt ((yyvsp[-6].location), (yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype), true);
! add_stmt (c_end_compound_stmt ((yyvsp[-7].ttype), flag_isoc99)); ;}
break;
case 492:
#line 2107 "objc/objc-parse.y"
! { c_finish_if_stmt ((yyvsp[-6].location), (yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype), false);
! add_stmt (c_end_compound_stmt ((yyvsp[-7].ttype), flag_isoc99)); ;}
break;
case 493:
#line 2111 "objc/objc-parse.y"
! { c_finish_if_stmt ((yyvsp[-4].location), (yyvsp[-2].ttype), (yyvsp[0].ttype), NULL, true);
! add_stmt (c_end_compound_stmt ((yyvsp[-5].ttype), flag_isoc99)); ;}
break;
case 494:
#line 2115 "objc/objc-parse.y"
! { c_finish_if_stmt ((yyvsp[-4].location), (yyvsp[-2].ttype), (yyvsp[0].ttype), NULL, false);
! add_stmt (c_end_compound_stmt ((yyvsp[-5].ttype), flag_isoc99)); ;}
break;
case 495:
#line 2120 "objc/objc-parse.y"
! { (yyval.ttype) = c_break_label; c_break_label = NULL; ;}
break;
case 496:
#line 2124 "objc/objc-parse.y"
! { (yyval.ttype) = c_cont_label; c_cont_label = NULL; ;}
break;
case 497:
#line 2130 "objc/objc-parse.y"
! { c_finish_loop ((yyvsp[-6].location), (yyvsp[-4].ttype), NULL, (yyvsp[0].ttype), c_break_label,
c_cont_label, true);
! add_stmt (c_end_compound_stmt ((yyvsp[-7].ttype), flag_isoc99));
! c_break_label = (yyvsp[-2].ttype); c_cont_label = (yyvsp[-1].ttype); ;}
break;
case 498:
#line 2139 "objc/objc-parse.y"
! { (yyval.ttype) = c_break_label; c_break_label = (yyvsp[-3].ttype); ;}
break;
case 499:
#line 2140 "objc/objc-parse.y"
! { (yyval.ttype) = c_cont_label; c_cont_label = (yyvsp[-3].ttype); ;}
break;
case 500:
#line 2142 "objc/objc-parse.y"
! { c_finish_loop ((yyvsp[-10].location), (yyvsp[-2].ttype), NULL, (yyvsp[-7].ttype), (yyvsp[-5].ttype),
! (yyvsp[-4].ttype), false);
! add_stmt (c_end_compound_stmt ((yyvsp[-11].ttype), flag_isoc99)); ;}
break;
case 501:
#line 2149 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 502:
#line 2151 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].exprtype).value; ;}
break;
case 503:
#line 2156 "objc/objc-parse.y"
! { c_finish_expr_stmt ((yyvsp[-1].ttype)); ;}
break;
case 504:
--- 5255,5361 ----
and will have a bare STATEMENT_LIST. But that's ok
because (recursively) all of the component statments
should already have line numbers assigned. */
! if (yyvsp[0].ttype && EXPR_P (yyvsp[0].ttype))
! SET_EXPR_LOCATION (yyvsp[0].ttype, yyvsp[-1].location);
;}
break;
case 486:
#line 2072 "objc/objc-parse.y"
! { if (yyvsp[0].ttype) SET_EXPR_LOCATION (yyvsp[0].ttype, yyvsp[-1].location); ;}
break;
case 487:
#line 2076 "objc/objc-parse.y"
! { yyval.ttype = lang_hooks.truthvalue_conversion (yyvsp[0].exprtype.value);
! if (EXPR_P (yyval.ttype))
! SET_EXPR_LOCATION (yyval.ttype, yyvsp[-1].location); ;}
break;
case 488:
#line 2089 "objc/objc-parse.y"
! { yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;}
break;
case 489:
#line 2094 "objc/objc-parse.y"
{ if (extra_warnings)
add_stmt (build (NOP_EXPR, NULL_TREE, NULL_TREE));
! yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;}
break;
case 491:
#line 2103 "objc/objc-parse.y"
! { c_finish_if_stmt (yyvsp[-6].location, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, true);
! add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99)); ;}
break;
case 492:
#line 2107 "objc/objc-parse.y"
! { c_finish_if_stmt (yyvsp[-6].location, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, false);
! add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99)); ;}
break;
case 493:
#line 2111 "objc/objc-parse.y"
! { c_finish_if_stmt (yyvsp[-4].location, yyvsp[-2].ttype, yyvsp[0].ttype, NULL, true);
! add_stmt (c_end_compound_stmt (yyvsp[-5].ttype, flag_isoc99)); ;}
break;
case 494:
#line 2115 "objc/objc-parse.y"
! { c_finish_if_stmt (yyvsp[-4].location, yyvsp[-2].ttype, yyvsp[0].ttype, NULL, false);
! add_stmt (c_end_compound_stmt (yyvsp[-5].ttype, flag_isoc99)); ;}
break;
case 495:
#line 2120 "objc/objc-parse.y"
! { yyval.ttype = c_break_label; c_break_label = NULL; ;}
break;
case 496:
#line 2124 "objc/objc-parse.y"
! { yyval.ttype = c_cont_label; c_cont_label = NULL; ;}
break;
case 497:
#line 2130 "objc/objc-parse.y"
! { c_finish_loop (yyvsp[-6].location, yyvsp[-4].ttype, NULL, yyvsp[0].ttype, c_break_label,
c_cont_label, true);
! add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99));
! c_break_label = yyvsp[-2].ttype; c_cont_label = yyvsp[-1].ttype; ;}
break;
case 498:
#line 2139 "objc/objc-parse.y"
! { yyval.ttype = c_break_label; c_break_label = yyvsp[-3].ttype; ;}
break;
case 499:
#line 2140 "objc/objc-parse.y"
! { yyval.ttype = c_cont_label; c_cont_label = yyvsp[-3].ttype; ;}
break;
case 500:
#line 2142 "objc/objc-parse.y"
! { c_finish_loop (yyvsp[-10].location, yyvsp[-2].ttype, NULL, yyvsp[-7].ttype, yyvsp[-5].ttype,
! yyvsp[-4].ttype, false);
! add_stmt (c_end_compound_stmt (yyvsp[-11].ttype, flag_isoc99)); ;}
break;
case 501:
#line 2149 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 502:
#line 2151 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].exprtype.value; ;}
break;
case 503:
#line 2156 "objc/objc-parse.y"
! { c_finish_expr_stmt (yyvsp[-1].ttype); ;}
break;
case 504:
*************** yyreduce:
*** 5398,5530 ****
case 505:
#line 2162 "objc/objc-parse.y"
! { if ((yyvsp[0].ttype))
{
! (yyval.ttype) = lang_hooks.truthvalue_conversion ((yyvsp[0].ttype));
! if (EXPR_P ((yyval.ttype)))
! SET_EXPR_LOCATION ((yyval.ttype), (yyvsp[-1].location));
}
else
! (yyval.ttype) = NULL;
;}
break;
case 506:
#line 2174 "objc/objc-parse.y"
! { (yyval.ttype) = c_process_expr_stmt ((yyvsp[0].ttype)); ;}
break;
case 507:
#line 2181 "objc/objc-parse.y"
! { c_finish_loop ((yyvsp[-7].location), (yyvsp[-6].ttype), (yyvsp[-4].ttype), (yyvsp[0].ttype), c_break_label,
c_cont_label, true);
! add_stmt (c_end_compound_stmt ((yyvsp[-10].ttype), flag_isoc99));
! c_break_label = (yyvsp[-2].ttype); c_cont_label = (yyvsp[-1].ttype); ;}
break;
case 508:
#line 2189 "objc/objc-parse.y"
! { (yyval.ttype) = c_start_case ((yyvsp[-1].exprtype).value); ;}
break;
case 509:
#line 2191 "objc/objc-parse.y"
! { c_finish_case ((yyvsp[0].ttype));
if (c_break_label)
add_stmt (build (LABEL_EXPR, void_type_node,
c_break_label));
! c_break_label = (yyvsp[-1].ttype);
! add_stmt (c_end_compound_stmt ((yyvsp[-6].ttype), flag_isoc99)); ;}
break;
case 510:
#line 2202 "objc/objc-parse.y"
! { (yyval.ttype) = c_finish_expr_stmt ((yyvsp[-1].exprtype).value); ;}
break;
case 511:
#line 2204 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 512:
#line 2206 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 513:
#line 2208 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 514:
#line 2210 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 515:
#line 2212 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 516:
#line 2214 "objc/objc-parse.y"
! { (yyval.ttype) = c_finish_bc_stmt (&c_break_label, true); ;}
break;
case 517:
#line 2216 "objc/objc-parse.y"
! { (yyval.ttype) = c_finish_bc_stmt (&c_cont_label, false); ;}
break;
case 518:
#line 2218 "objc/objc-parse.y"
! { (yyval.ttype) = c_finish_return (NULL_TREE); ;}
break;
case 519:
#line 2220 "objc/objc-parse.y"
! { (yyval.ttype) = c_finish_return ((yyvsp[-1].exprtype).value); ;}
break;
case 521:
#line 2223 "objc/objc-parse.y"
! { (yyval.ttype) = c_finish_goto_label ((yyvsp[-1].ttype)); ;}
break;
case 522:
#line 2225 "objc/objc-parse.y"
! { (yyval.ttype) = c_finish_goto_ptr ((yyvsp[-1].exprtype).value); ;}
break;
case 523:
#line 2227 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 524:
#line 2229 "objc/objc-parse.y"
! { (yyval.ttype) = objc_build_throw_stmt ((yyvsp[-1].exprtype).value); ;}
break;
case 525:
#line 2231 "objc/objc-parse.y"
! { (yyval.ttype) = objc_build_throw_stmt (NULL_TREE); ;}
break;
case 526:
#line 2233 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 527:
#line 2235 "objc/objc-parse.y"
! { objc_build_synchronized ((yyvsp[-4].location), (yyvsp[-2].exprtype).value, (yyvsp[0].ttype)); (yyval.ttype) = NULL_TREE; ;}
break;
case 528:
#line 2240 "objc/objc-parse.y"
! { objc_begin_catch_clause (grokparm ((yyvsp[-1].parmtype))); ;}
break;
case 529:
--- 5365,5497 ----
case 505:
#line 2162 "objc/objc-parse.y"
! { if (yyvsp[0].ttype)
{
! yyval.ttype = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
! if (EXPR_P (yyval.ttype))
! SET_EXPR_LOCATION (yyval.ttype, yyvsp[-1].location);
}
else
! yyval.ttype = NULL;
;}
break;
case 506:
#line 2174 "objc/objc-parse.y"
! { yyval.ttype = c_process_expr_stmt (yyvsp[0].ttype); ;}
break;
case 507:
#line 2181 "objc/objc-parse.y"
! { c_finish_loop (yyvsp[-7].location, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[0].ttype, c_break_label,
c_cont_label, true);
! add_stmt (c_end_compound_stmt (yyvsp[-10].ttype, flag_isoc99));
! c_break_label = yyvsp[-2].ttype; c_cont_label = yyvsp[-1].ttype; ;}
break;
case 508:
#line 2189 "objc/objc-parse.y"
! { yyval.ttype = c_start_case (yyvsp[-1].exprtype.value); ;}
break;
case 509:
#line 2191 "objc/objc-parse.y"
! { c_finish_case (yyvsp[0].ttype);
if (c_break_label)
add_stmt (build (LABEL_EXPR, void_type_node,
c_break_label));
! c_break_label = yyvsp[-1].ttype;
! add_stmt (c_end_compound_stmt (yyvsp[-6].ttype, flag_isoc99)); ;}
break;
case 510:
#line 2202 "objc/objc-parse.y"
! { yyval.ttype = c_finish_expr_stmt (yyvsp[-1].exprtype.value); ;}
break;
case 511:
#line 2204 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 512:
#line 2206 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 513:
#line 2208 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 514:
#line 2210 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 515:
#line 2212 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 516:
#line 2214 "objc/objc-parse.y"
! { yyval.ttype = c_finish_bc_stmt (&c_break_label, true); ;}
break;
case 517:
#line 2216 "objc/objc-parse.y"
! { yyval.ttype = c_finish_bc_stmt (&c_cont_label, false); ;}
break;
case 518:
#line 2218 "objc/objc-parse.y"
! { yyval.ttype = c_finish_return (NULL_TREE); ;}
break;
case 519:
#line 2220 "objc/objc-parse.y"
! { yyval.ttype = c_finish_return (yyvsp[-1].exprtype.value); ;}
break;
case 521:
#line 2223 "objc/objc-parse.y"
! { yyval.ttype = c_finish_goto_label (yyvsp[-1].ttype); ;}
break;
case 522:
#line 2225 "objc/objc-parse.y"
! { yyval.ttype = c_finish_goto_ptr (yyvsp[-1].exprtype.value); ;}
break;
case 523:
#line 2227 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 524:
#line 2229 "objc/objc-parse.y"
! { yyval.ttype = objc_build_throw_stmt (yyvsp[-1].exprtype.value); ;}
break;
case 525:
#line 2231 "objc/objc-parse.y"
! { yyval.ttype = objc_build_throw_stmt (NULL_TREE); ;}
break;
case 526:
#line 2233 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 527:
#line 2235 "objc/objc-parse.y"
! { objc_build_synchronized (yyvsp[-4].location, yyvsp[-2].exprtype.value, yyvsp[0].ttype); yyval.ttype = NULL_TREE; ;}
break;
case 528:
#line 2240 "objc/objc-parse.y"
! { objc_begin_catch_clause (grokparm (yyvsp[-1].parmtype)); ;}
break;
case 529:
*************** yyreduce:
*** 5539,5550 ****
case 533:
#line 2257 "objc/objc-parse.y"
! { objc_begin_try_stmt ((yyvsp[-1].location), (yyvsp[0].ttype)); ;}
break;
case 535:
#line 2263 "objc/objc-parse.y"
! { objc_build_finally_clause ((yyvsp[-1].location), (yyvsp[0].ttype)); ;}
break;
case 536:
--- 5506,5517 ----
case 533:
#line 2257 "objc/objc-parse.y"
! { objc_begin_try_stmt (yyvsp[-1].location, yyvsp[0].ttype); ;}
break;
case 535:
#line 2263 "objc/objc-parse.y"
! { objc_build_finally_clause (yyvsp[-1].location, yyvsp[0].ttype); ;}
break;
case 536:
*************** yyreduce:
*** 5559,5608 ****
case 538:
#line 2276 "objc/objc-parse.y"
! { add_stmt ((yyvsp[0].ttype)); (yyval.ttype) = NULL_TREE; ;}
break;
case 540:
#line 2285 "objc/objc-parse.y"
! { (yyval.ttype) = do_case ((yyvsp[-1].exprtype).value, NULL_TREE); ;}
break;
case 541:
#line 2287 "objc/objc-parse.y"
! { (yyval.ttype) = do_case ((yyvsp[-3].exprtype).value, (yyvsp[-1].exprtype).value); ;}
break;
case 542:
#line 2289 "objc/objc-parse.y"
! { (yyval.ttype) = do_case (NULL_TREE, NULL_TREE); ;}
break;
case 543:
#line 2291 "objc/objc-parse.y"
! { tree label = define_label ((yyvsp[-2].location), (yyvsp[-3].ttype));
if (label)
{
! decl_attributes (&label, (yyvsp[0].ttype), 0);
! (yyval.ttype) = add_stmt (build_stmt (LABEL_EXPR, label));
}
else
! (yyval.ttype) = NULL_TREE;
;}
break;
case 544:
#line 2309 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[-2].ttype); ;}
break;
case 545:
#line 2315 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 547:
#line 2322 "objc/objc-parse.y"
! { assemble_asm ((yyvsp[-1].ttype)); ;}
break;
case 548:
--- 5526,5575 ----
case 538:
#line 2276 "objc/objc-parse.y"
! { add_stmt (yyvsp[0].ttype); yyval.ttype = NULL_TREE; ;}
break;
case 540:
#line 2285 "objc/objc-parse.y"
! { yyval.ttype = do_case (yyvsp[-1].exprtype.value, NULL_TREE); ;}
break;
case 541:
#line 2287 "objc/objc-parse.y"
! { yyval.ttype = do_case (yyvsp[-3].exprtype.value, yyvsp[-1].exprtype.value); ;}
break;
case 542:
#line 2289 "objc/objc-parse.y"
! { yyval.ttype = do_case (NULL_TREE, NULL_TREE); ;}
break;
case 543:
#line 2291 "objc/objc-parse.y"
! { tree label = define_label (yyvsp[-2].location, yyvsp[-3].ttype);
if (label)
{
! decl_attributes (&label, yyvsp[0].ttype, 0);
! yyval.ttype = add_stmt (build_stmt (LABEL_EXPR, label));
}
else
! yyval.ttype = NULL_TREE;
;}
break;
case 544:
#line 2309 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[-2].ttype; ;}
break;
case 545:
#line 2315 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 547:
#line 2322 "objc/objc-parse.y"
! { assemble_asm (yyvsp[-1].ttype); ;}
break;
case 548:
*************** yyreduce:
*** 5612,5700 ****
case 549:
#line 2332 "objc/objc-parse.y"
! { (yyval.ttype) = build_asm_stmt ((yyvsp[-6].ttype), (yyvsp[-3].ttype)); ;}
break;
case 550:
#line 2338 "objc/objc-parse.y"
! { (yyval.ttype) = build_asm_expr ((yyvsp[0].ttype), 0, 0, 0, true); ;}
break;
case 551:
#line 2341 "objc/objc-parse.y"
! { (yyval.ttype) = build_asm_expr ((yyvsp[-2].ttype), (yyvsp[0].ttype), 0, 0, false); ;}
break;
case 552:
#line 2344 "objc/objc-parse.y"
! { (yyval.ttype) = build_asm_expr ((yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype), 0, false); ;}
break;
case 553:
#line 2347 "objc/objc-parse.y"
! { (yyval.ttype) = build_asm_expr ((yyvsp[-6].ttype), (yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype), false); ;}
break;
case 554:
#line 2354 "objc/objc-parse.y"
! { (yyval.ttype) = 0; ;}
break;
case 555:
#line 2356 "objc/objc-parse.y"
! { if ((yyvsp[0].ttype) != ridpointers[RID_VOLATILE])
{
! warning ("%E qualifier ignored on asm", (yyvsp[0].ttype));
! (yyval.ttype) = 0;
}
else
! (yyval.ttype) = (yyvsp[0].ttype);
;}
break;
case 556:
#line 2369 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 559:
#line 2376 "objc/objc-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), (yyvsp[0].ttype)); ;}
break;
case 560:
#line 2382 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list (build_tree_list (NULL_TREE, (yyvsp[-5].ttype)),
! (yyvsp[-2].exprtype).value); ;}
break;
case 561:
#line 2386 "objc/objc-parse.y"
! { (yyvsp[-7].ttype) = build_string (IDENTIFIER_LENGTH ((yyvsp[-7].ttype)),
! IDENTIFIER_POINTER ((yyvsp[-7].ttype)));
! (yyval.ttype) = build_tree_list (build_tree_list ((yyvsp[-7].ttype), (yyvsp[-5].ttype)), (yyvsp[-2].exprtype).value); ;}
break;
case 562:
#line 2393 "objc/objc-parse.y"
! { (yyval.ttype) = tree_cons (NULL_TREE, (yyvsp[0].ttype), NULL_TREE); ;}
break;
case 563:
#line 2395 "objc/objc-parse.y"
! { (yyval.ttype) = tree_cons (NULL_TREE, (yyvsp[0].ttype), (yyvsp[-2].ttype)); ;}
break;
case 564:
#line 2401 "objc/objc-parse.y"
! { if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE ((yyvsp[0].ttype))))
!= char_type_node)
{
error ("wide string literal in %");
! (yyval.ttype) = build_string (1, "");
}
else
! (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 565:
--- 5579,5667 ----
case 549:
#line 2332 "objc/objc-parse.y"
! { yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-3].ttype); ;}
break;
case 550:
#line 2338 "objc/objc-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[0].ttype, 0, 0, 0, true); ;}
break;
case 551:
#line 2341 "objc/objc-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-2].ttype, yyvsp[0].ttype, 0, 0, false); ;}
break;
case 552:
#line 2344 "objc/objc-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, 0, false); ;}
break;
case 553:
#line 2347 "objc/objc-parse.y"
! { yyval.ttype = build_asm_expr (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, false); ;}
break;
case 554:
#line 2354 "objc/objc-parse.y"
! { yyval.ttype = 0; ;}
break;
case 555:
#line 2356 "objc/objc-parse.y"
! { if (yyvsp[0].ttype != ridpointers[RID_VOLATILE])
{
! warning ("%E qualifier ignored on asm", yyvsp[0].ttype);
! yyval.ttype = 0;
}
else
! yyval.ttype = yyvsp[0].ttype;
;}
break;
case 556:
#line 2369 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 559:
#line 2376 "objc/objc-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;}
break;
case 560:
#line 2382 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-5].ttype),
! yyvsp[-2].exprtype.value); ;}
break;
case 561:
#line 2386 "objc/objc-parse.y"
! { yyvsp[-7].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-7].ttype),
! IDENTIFIER_POINTER (yyvsp[-7].ttype));
! yyval.ttype = build_tree_list (build_tree_list (yyvsp[-7].ttype, yyvsp[-5].ttype), yyvsp[-2].exprtype.value); ;}
break;
case 562:
#line 2393 "objc/objc-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;}
break;
case 563:
#line 2395 "objc/objc-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;}
break;
case 564:
#line 2401 "objc/objc-parse.y"
! { if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (yyvsp[0].ttype)))
!= char_type_node)
{
error ("wide string literal in %");
! yyval.ttype = build_string (1, "");
}
else
! yyval.ttype = yyvsp[0].ttype; ;}
break;
case 565:
*************** yyreduce:
*** 5715,5721 ****
case 568:
#line 2430 "objc/objc-parse.y"
! { (yyval.arginfotype) = (yyvsp[0].arginfotype);
pop_scope (); ;}
break;
--- 5682,5688 ----
case 568:
#line 2430 "objc/objc-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype;
pop_scope (); ;}
break;
*************** yyreduce:
*** 5732,5859 ****
case 572:
#line 2442 "objc/objc-parse.y"
! { (yyval.arginfotype) = (yyvsp[0].arginfotype); ;}
break;
case 573:
#line 2444 "objc/objc-parse.y"
! { (yyval.arginfotype) = XOBNEW (&parser_obstack, struct c_arg_info);
! (yyval.arginfotype)->parms = 0;
! (yyval.arginfotype)->tags = 0;
! (yyval.arginfotype)->types = 0;
! (yyval.arginfotype)->others = 0; ;}
break;
case 574:
#line 2454 "objc/objc-parse.y"
! { (yyval.arginfotype) = XOBNEW (&parser_obstack, struct c_arg_info);
! (yyval.arginfotype)->parms = 0;
! (yyval.arginfotype)->tags = 0;
! (yyval.arginfotype)->types = 0;
! (yyval.arginfotype)->others = 0; ;}
break;
case 575:
#line 2460 "objc/objc-parse.y"
! { (yyval.arginfotype) = XOBNEW (&parser_obstack, struct c_arg_info);
! (yyval.arginfotype)->parms = 0;
! (yyval.arginfotype)->tags = 0;
! (yyval.arginfotype)->others = 0;
/* Suppress -Wold-style-definition for this case. */
! (yyval.arginfotype)->types = error_mark_node;
error ("ISO C requires a named argument before %<...%>");
;}
break;
case 576:
#line 2469 "objc/objc-parse.y"
! { (yyval.arginfotype) = get_parm_info (/*ellipsis=*/false); ;}
break;
case 577:
#line 2471 "objc/objc-parse.y"
! { (yyval.arginfotype) = get_parm_info (/*ellipsis=*/true); ;}
break;
case 578:
#line 2476 "objc/objc-parse.y"
! { push_parm_decl ((yyvsp[0].parmtype)); ;}
break;
case 579:
#line 2478 "objc/objc-parse.y"
! { push_parm_decl ((yyvsp[0].parmtype)); ;}
break;
case 580:
#line 2485 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 581:
#line 2489 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 582:
#line 2493 "objc/objc-parse.y"
! { (yyval.parmtype) = (yyvsp[0].parmtype);
POP_DECLSPEC_STACK; ;}
break;
case 583:
#line 2496 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 584:
#line 2501 "objc/objc-parse.y"
! { (yyval.parmtype) = (yyvsp[0].parmtype);
POP_DECLSPEC_STACK; ;}
break;
case 585:
#line 2509 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 586:
#line 2513 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 587:
#line 2517 "objc/objc-parse.y"
! { (yyval.parmtype) = (yyvsp[0].parmtype);
POP_DECLSPEC_STACK; ;}
break;
case 588:
#line 2520 "objc/objc-parse.y"
! { (yyval.parmtype) = build_c_parm (current_declspecs,
! chainon ((yyvsp[0].ttype), all_prefix_attributes), (yyvsp[-1].dtrtype));
POP_DECLSPEC_STACK; ;}
break;
case 589:
#line 2525 "objc/objc-parse.y"
! { (yyval.parmtype) = (yyvsp[0].parmtype);
POP_DECLSPEC_STACK; ;}
break;
case 590:
#line 2531 "objc/objc-parse.y"
! { prefix_attributes = chainon (prefix_attributes, (yyvsp[-3].ttype));
all_prefix_attributes = prefix_attributes; ;}
break;
--- 5699,5826 ----
case 572:
#line 2442 "objc/objc-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype; ;}
break;
case 573:
#line 2444 "objc/objc-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! yyval.arginfotype->parms = 0;
! yyval.arginfotype->tags = 0;
! yyval.arginfotype->types = 0;
! yyval.arginfotype->others = 0; ;}
break;
case 574:
#line 2454 "objc/objc-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! yyval.arginfotype->parms = 0;
! yyval.arginfotype->tags = 0;
! yyval.arginfotype->types = 0;
! yyval.arginfotype->others = 0; ;}
break;
case 575:
#line 2460 "objc/objc-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! yyval.arginfotype->parms = 0;
! yyval.arginfotype->tags = 0;
! yyval.arginfotype->others = 0;
/* Suppress -Wold-style-definition for this case. */
! yyval.arginfotype->types = error_mark_node;
error ("ISO C requires a named argument before %<...%>");
;}
break;
case 576:
#line 2469 "objc/objc-parse.y"
! { yyval.arginfotype = get_parm_info (/*ellipsis=*/false); ;}
break;
case 577:
#line 2471 "objc/objc-parse.y"
! { yyval.arginfotype = get_parm_info (/*ellipsis=*/true); ;}
break;
case 578:
#line 2476 "objc/objc-parse.y"
! { push_parm_decl (yyvsp[0].parmtype); ;}
break;
case 579:
#line 2478 "objc/objc-parse.y"
! { push_parm_decl (yyvsp[0].parmtype); ;}
break;
case 580:
#line 2485 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 581:
#line 2489 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 582:
#line 2493 "objc/objc-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
POP_DECLSPEC_STACK; ;}
break;
case 583:
#line 2496 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 584:
#line 2501 "objc/objc-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
POP_DECLSPEC_STACK; ;}
break;
case 585:
#line 2509 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 586:
#line 2513 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 587:
#line 2517 "objc/objc-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
POP_DECLSPEC_STACK; ;}
break;
case 588:
#line 2520 "objc/objc-parse.y"
! { yyval.parmtype = build_c_parm (current_declspecs,
! chainon (yyvsp[0].ttype, all_prefix_attributes), yyvsp[-1].dtrtype);
POP_DECLSPEC_STACK; ;}
break;
case 589:
#line 2525 "objc/objc-parse.y"
! { yyval.parmtype = yyvsp[0].parmtype;
POP_DECLSPEC_STACK; ;}
break;
case 590:
#line 2531 "objc/objc-parse.y"
! { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
all_prefix_attributes = prefix_attributes; ;}
break;
*************** yyreduce:
*** 5865,5911 ****
case 592:
#line 2543 "objc/objc-parse.y"
! { (yyval.arginfotype) = (yyvsp[0].arginfotype);
pop_scope (); ;}
break;
case 594:
#line 2550 "objc/objc-parse.y"
! { (yyval.arginfotype) = XOBNEW (&parser_obstack, struct c_arg_info);
! (yyval.arginfotype)->parms = 0;
! (yyval.arginfotype)->tags = 0;
! (yyval.arginfotype)->types = (yyvsp[-1].ttype);
! (yyval.arginfotype)->others = 0;
/* Make sure we have a parmlist after attributes. */
! if ((yyvsp[-3].ttype) != 0)
YYERROR1;
;}
break;
case 595:
#line 2565 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list (NULL_TREE, (yyvsp[0].ttype)); ;}
break;
case 596:
#line 2567 "objc/objc-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), build_tree_list (NULL_TREE, (yyvsp[0].ttype))); ;}
break;
case 597:
#line 2573 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list (NULL_TREE, (yyvsp[0].ttype)); ;}
break;
case 598:
#line 2575 "objc/objc-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), build_tree_list (NULL_TREE, (yyvsp[0].ttype))); ;}
break;
case 599:
#line 2580 "objc/objc-parse.y"
! { (yyval.itype) = SAVE_EXT_FLAGS ();
pedantic = 0;
warn_pointer_arith = 0;
warn_traditional = 0;
--- 5832,5878 ----
case 592:
#line 2543 "objc/objc-parse.y"
! { yyval.arginfotype = yyvsp[0].arginfotype;
pop_scope (); ;}
break;
case 594:
#line 2550 "objc/objc-parse.y"
! { yyval.arginfotype = XOBNEW (&parser_obstack, struct c_arg_info);
! yyval.arginfotype->parms = 0;
! yyval.arginfotype->tags = 0;
! yyval.arginfotype->types = yyvsp[-1].ttype;
! yyval.arginfotype->others = 0;
/* Make sure we have a parmlist after attributes. */
! if (yyvsp[-3].ttype != 0)
YYERROR1;
;}
break;
case 595:
#line 2565 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;}
break;
case 596:
#line 2567 "objc/objc-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;}
break;
case 597:
#line 2573 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;}
break;
case 598:
#line 2575 "objc/objc-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;}
break;
case 599:
#line 2580 "objc/objc-parse.y"
! { yyval.itype = SAVE_EXT_FLAGS ();
pedantic = 0;
warn_pointer_arith = 0;
warn_traditional = 0;
*************** yyreduce:
*** 5921,5962 ****
case 606:
#line 2604 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list (NULL_TREE, (yyvsp[0].ttype)); ;}
break;
case 607:
#line 2606 "objc/objc-parse.y"
! { (yyval.ttype) = chainon ((yyvsp[-2].ttype), build_tree_list (NULL_TREE, (yyvsp[0].ttype))); ;}
break;
case 608:
#line 2611 "objc/objc-parse.y"
{
! objc_declare_class ((yyvsp[-1].ttype));
;}
break;
case 609:
#line 2618 "objc/objc-parse.y"
{
! objc_declare_alias ((yyvsp[-2].ttype), (yyvsp[-1].ttype));
;}
break;
case 610:
#line 2624 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].ttype); ;}
break;
case 611:
#line 2625 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 614:
#line 2635 "objc/objc-parse.y"
{
! objc_start_class_interface ((yyvsp[-2].ttype), (yyvsp[-1].ttype), (yyvsp[0].ttype));
;}
break;
--- 5888,5929 ----
case 606:
#line 2604 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;}
break;
case 607:
#line 2606 "objc/objc-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;}
break;
case 608:
#line 2611 "objc/objc-parse.y"
{
! objc_declare_class (yyvsp[-1].ttype);
;}
break;
case 609:
#line 2618 "objc/objc-parse.y"
{
! objc_declare_alias (yyvsp[-2].ttype, yyvsp[-1].ttype);
;}
break;
case 610:
#line 2624 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;}
break;
case 611:
#line 2625 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 614:
#line 2635 "objc/objc-parse.y"
{
! objc_start_class_interface (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
;}
break;
*************** yyreduce:
*** 5977,5983 ****
case 617:
#line 2648 "objc/objc-parse.y"
{
! objc_start_class_implementation ((yyvsp[-1].ttype), (yyvsp[0].ttype));
;}
break;
--- 5944,5950 ----
case 617:
#line 2648 "objc/objc-parse.y"
{
! objc_start_class_implementation (yyvsp[-1].ttype, yyvsp[0].ttype);
;}
break;
*************** yyreduce:
*** 5991,5997 ****
case 619:
#line 2657 "objc/objc-parse.y"
{
! objc_start_category_interface ((yyvsp[-4].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype));
;}
break;
--- 5958,5964 ----
case 619:
#line 2657 "objc/objc-parse.y"
{
! objc_start_category_interface (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype);
;}
break;
*************** yyreduce:
*** 6005,6011 ****
case 621:
#line 2666 "objc/objc-parse.y"
{
! objc_start_category_implementation ((yyvsp[-3].ttype), (yyvsp[-1].ttype));
;}
break;
--- 5972,5978 ----
case 621:
#line 2666 "objc/objc-parse.y"
{
! objc_start_category_implementation (yyvsp[-3].ttype, yyvsp[-1].ttype);
;}
break;
*************** yyreduce:
*** 6013,6019 ****
#line 2673 "objc/objc-parse.y"
{
objc_pq_context = 1;
! objc_start_protocol ((yyvsp[-1].ttype), (yyvsp[0].ttype));
;}
break;
--- 5980,5986 ----
#line 2673 "objc/objc-parse.y"
{
objc_pq_context = 1;
! objc_start_protocol (yyvsp[-1].ttype, yyvsp[0].ttype);
;}
break;
*************** yyreduce:
*** 6028,6049 ****
case 624:
#line 2686 "objc/objc-parse.y"
{
! objc_declare_protocols ((yyvsp[-1].ttype));
;}
break;
case 625:
#line 2693 "objc/objc-parse.y"
{
! (yyval.ttype) = NULL_TREE;
;}
break;
case 627:
#line 2701 "objc/objc-parse.y"
{
! if ((yyvsp[-2].code) == LT_EXPR && (yyvsp[0].code) == GT_EXPR)
! (yyval.ttype) = (yyvsp[-1].ttype);
else
YYERROR1;
;}
--- 5995,6016 ----
case 624:
#line 2686 "objc/objc-parse.y"
{
! objc_declare_protocols (yyvsp[-1].ttype);
;}
break;
case 625:
#line 2693 "objc/objc-parse.y"
{
! yyval.ttype = NULL_TREE;
;}
break;
case 627:
#line 2701 "objc/objc-parse.y"
{
! if (yyvsp[-2].code == LT_EXPR && yyvsp[0].code == GT_EXPR)
! yyval.ttype = yyvsp[-1].ttype;
else
YYERROR1;
;}
*************** yyreduce:
*** 6077,6083 ****
{
/* Comma-separated ivars are chained together in
reverse order; add them one by one. */
! tree ivar = nreverse ((yyvsp[0].ttype));
for (; ivar; ivar = TREE_CHAIN (ivar))
objc_add_instance_variable (copy_node (ivar));
--- 6044,6050 ----
{
/* Comma-separated ivars are chained together in
reverse order; add them one by one. */
! tree ivar = nreverse (yyvsp[0].ttype);
for (; ivar; ivar = TREE_CHAIN (ivar))
objc_add_instance_variable (copy_node (ivar));
*************** yyreduce:
*** 6095,6101 ****
case 642:
#line 2759 "objc/objc-parse.y"
{
! objc_set_method_type ((yyvsp[0].code));
objc_pq_context = 1;
;}
break;
--- 6062,6068 ----
case 642:
#line 2759 "objc/objc-parse.y"
{
! objc_set_method_type (yyvsp[0].code);
objc_pq_context = 1;
;}
break;
*************** yyreduce:
*** 6104,6110 ****
#line 2764 "objc/objc-parse.y"
{
objc_pq_context = 0;
! objc_start_method_definition ((yyvsp[-1].ttype));
;}
break;
--- 6071,6077 ----
#line 2764 "objc/objc-parse.y"
{
objc_pq_context = 0;
! objc_start_method_definition (yyvsp[-1].ttype);
;}
break;
*************** yyreduce:
*** 6117,6129 ****
case 647:
#line 2781 "objc/objc-parse.y"
! { (yyval.ttype) = NULL_TREE; ;}
break;
case 651:
#line 2791 "objc/objc-parse.y"
{
! objc_set_method_type ((yyvsp[0].code));
/* Remember protocol qualifiers in prototypes. */
objc_pq_context = 1;
;}
--- 6084,6096 ----
case 647:
#line 2781 "objc/objc-parse.y"
! { yyval.ttype = NULL_TREE; ;}
break;
case 651:
#line 2791 "objc/objc-parse.y"
{
! objc_set_method_type (yyvsp[0].code);
/* Remember protocol qualifiers in prototypes. */
objc_pq_context = 1;
;}
*************** yyreduce:
*** 6134,6374 ****
{
/* Forget protocol qualifiers here. */
objc_pq_context = 0;
! objc_add_method_declaration ((yyvsp[0].ttype));
;}
break;
case 654:
#line 2807 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_build_method_signature ((yyvsp[-2].ttype), (yyvsp[0].ttype), NULL_TREE);
;}
break;
case 655:
#line 2812 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_build_method_signature (NULL_TREE, (yyvsp[0].ttype), NULL_TREE);
;}
break;
case 656:
#line 2817 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_build_method_signature ((yyvsp[-3].ttype), (yyvsp[-1].ttype), (yyvsp[0].ttype));
;}
break;
case 657:
#line 2822 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_build_method_signature (NULL_TREE, (yyvsp[-1].ttype), (yyvsp[0].ttype));
;}
break;
case 658:
#line 2832 "objc/objc-parse.y"
{
! TREE_OVERFLOW ((yyval.ttype)) = (yyvsp[0].itype);
;}
break;
case 659:
#line 2839 "objc/objc-parse.y"
{
! (yyval.ttype) = make_node (TREE_LIST);
;}
break;
case 660:
#line 2843 "objc/objc-parse.y"
{
! (yyval.ttype) = chainon ((yyvsp[-2].ttype), build_tree_list (NULL_TREE,
! grokparm ((yyvsp[0].parmtype))));
;}
break;
case 661:
#line 2851 "objc/objc-parse.y"
{
! (yyval.itype) = 0;
;}
break;
case 662:
#line 2855 "objc/objc-parse.y"
{
! (yyval.itype) = 1;
;}
break;
case 665:
#line 2868 "objc/objc-parse.y"
{
! (yyval.ttype) = chainon ((yyvsp[-1].ttype), (yyvsp[0].ttype));
;}
break;
case 693:
#line 2893 "objc/objc-parse.y"
{
! (yyval.ttype) = chainon ((yyvsp[-1].ttype), build_tree_list (NULL_TREE, (yyvsp[0].ttype)));
;}
break;
case 694:
#line 2897 "objc/objc-parse.y"
{
! (yyval.ttype) = NULL_TREE;
;}
break;
case 695:
#line 2904 "objc/objc-parse.y"
{
! (yyval.ttype) = build_tree_list ((yyvsp[-1].ttype), groktypename ((yyvsp[0].typenametype)));
;}
break;
case 696:
#line 2908 "objc/objc-parse.y"
{
! (yyval.ttype) = build_tree_list ((yyvsp[0].ttype), NULL_TREE);
;}
break;
case 697:
#line 2915 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_build_keyword_decl ((yyvsp[-5].ttype), (yyvsp[-2].ttype), (yyvsp[0].ttype));
;}
break;
case 698:
#line 2920 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_build_keyword_decl ((yyvsp[-2].ttype), NULL_TREE, (yyvsp[0].ttype));
;}
break;
case 699:
#line 2925 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_build_keyword_decl (NULL_TREE, (yyvsp[-2].ttype), (yyvsp[0].ttype));
;}
break;
case 700:
#line 2930 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_build_keyword_decl (NULL_TREE, NULL_TREE, (yyvsp[0].ttype));
;}
break;
case 704:
#line 2943 "objc/objc-parse.y"
{
! (yyval.ttype) = chainon ((yyvsp[-1].ttype), (yyvsp[0].ttype));
;}
break;
case 705:
#line 2951 "objc/objc-parse.y"
{
! if (TREE_CHAIN ((yyvsp[0].ttype)) == NULL_TREE)
/* just return the expr., remove a level of indirection */
! (yyval.ttype) = TREE_VALUE ((yyvsp[0].ttype));
else
/* we have a comma expr., we will collapse later */
! (yyval.ttype) = (yyvsp[0].ttype);
;}
break;
case 706:
#line 2963 "objc/objc-parse.y"
{
! (yyval.ttype) = build_tree_list ((yyvsp[-2].ttype), (yyvsp[0].ttype));
;}
break;
case 707:
#line 2967 "objc/objc-parse.y"
{
! (yyval.ttype) = build_tree_list (NULL_TREE, (yyvsp[0].ttype));
;}
break;
case 708:
#line 2974 "objc/objc-parse.y"
! { (yyval.ttype) = (yyvsp[0].exprtype).value; ;}
break;
case 709:
#line 2976 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_get_class_reference ((yyvsp[0].ttype));
;}
break;
case 710:
#line 2980 "objc/objc-parse.y"
{
! (yyval.ttype) = objc_get_class_reference ((yyvsp[0].ttype));
;}
break;
case 711:
#line 2987 "objc/objc-parse.y"
! { (yyval.ttype) = build_tree_list ((yyvsp[-2].ttype), (yyvsp[-1].ttype)); ;}
break;
case 715:
#line 2998 "objc/objc-parse.y"
{
! (yyval.ttype) = chainon ((yyvsp[-1].ttype), (yyvsp[0].ttype));
;}
break;
case 716:
#line 3005 "objc/objc-parse.y"
{
! (yyval.ttype) = build_tree_list ((yyvsp[-1].ttype), NULL_TREE);
;}
break;
case 717:
#line 3009 "objc/objc-parse.y"
{
! (yyval.ttype) = build_tree_list (NULL_TREE, NULL_TREE);
;}
break;
case 718:
#line 3016 "objc/objc-parse.y"
{
! (yyval.ttype) = (yyvsp[-1].ttype);
;}
break;
case 719:
#line 3023 "objc/objc-parse.y"
{
! (yyval.ttype) = (yyvsp[-1].ttype);
;}
break;
case 720:
#line 3032 "objc/objc-parse.y"
{
! (yyval.ttype) = groktypename ((yyvsp[-1].typenametype));
;}
break;
}
! /* Line 1037 of yacc.c. */
! #line 6372 "objc/objc-parse.c"
yyvsp -= yylen;
yyssp -= yylen;
--- 6101,6341 ----
{
/* Forget protocol qualifiers here. */
objc_pq_context = 0;
! objc_add_method_declaration (yyvsp[0].ttype);
;}
break;
case 654:
#line 2807 "objc/objc-parse.y"
{
! yyval.ttype = objc_build_method_signature (yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE);
;}
break;
case 655:
#line 2812 "objc/objc-parse.y"
{
! yyval.ttype = objc_build_method_signature (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
;}
break;
case 656:
#line 2817 "objc/objc-parse.y"
{
! yyval.ttype = objc_build_method_signature (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
;}
break;
case 657:
#line 2822 "objc/objc-parse.y"
{
! yyval.ttype = objc_build_method_signature (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype);
;}
break;
case 658:
#line 2832 "objc/objc-parse.y"
{
! TREE_OVERFLOW (yyval.ttype) = yyvsp[0].itype;
;}
break;
case 659:
#line 2839 "objc/objc-parse.y"
{
! yyval.ttype = make_node (TREE_LIST);
;}
break;
case 660:
#line 2843 "objc/objc-parse.y"
{
! yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE,
! grokparm (yyvsp[0].parmtype)));
;}
break;
case 661:
#line 2851 "objc/objc-parse.y"
{
! yyval.itype = 0;
;}
break;
case 662:
#line 2855 "objc/objc-parse.y"
{
! yyval.itype = 1;
;}
break;
case 665:
#line 2868 "objc/objc-parse.y"
{
! yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
;}
break;
case 693:
#line 2893 "objc/objc-parse.y"
{
! yyval.ttype = chainon (yyvsp[-1].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype));
;}
break;
case 694:
#line 2897 "objc/objc-parse.y"
{
! yyval.ttype = NULL_TREE;
;}
break;
case 695:
#line 2904 "objc/objc-parse.y"
{
! yyval.ttype = build_tree_list (yyvsp[-1].ttype, groktypename (yyvsp[0].typenametype));
;}
break;
case 696:
#line 2908 "objc/objc-parse.y"
{
! yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE);
;}
break;
case 697:
#line 2915 "objc/objc-parse.y"
{
! yyval.ttype = objc_build_keyword_decl (yyvsp[-5].ttype, yyvsp[-2].ttype, yyvsp[0].ttype);
;}
break;
case 698:
#line 2920 "objc/objc-parse.y"
{
! yyval.ttype = objc_build_keyword_decl (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
;}
break;
case 699:
#line 2925 "objc/objc-parse.y"
{
! yyval.ttype = objc_build_keyword_decl (NULL_TREE, yyvsp[-2].ttype, yyvsp[0].ttype);
;}
break;
case 700:
#line 2930 "objc/objc-parse.y"
{
! yyval.ttype = objc_build_keyword_decl (NULL_TREE, NULL_TREE, yyvsp[0].ttype);
;}
break;
case 704:
#line 2943 "objc/objc-parse.y"
{
! yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
;}
break;
case 705:
#line 2951 "objc/objc-parse.y"
{
! if (TREE_CHAIN (yyvsp[0].ttype) == NULL_TREE)
/* just return the expr., remove a level of indirection */
! yyval.ttype = TREE_VALUE (yyvsp[0].ttype);
else
/* we have a comma expr., we will collapse later */
! yyval.ttype = yyvsp[0].ttype;
;}
break;
case 706:
#line 2963 "objc/objc-parse.y"
{
! yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype);
;}
break;
case 707:
#line 2967 "objc/objc-parse.y"
{
! yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype);
;}
break;
case 708:
#line 2974 "objc/objc-parse.y"
! { yyval.ttype = yyvsp[0].exprtype.value; ;}
break;
case 709:
#line 2976 "objc/objc-parse.y"
{
! yyval.ttype = objc_get_class_reference (yyvsp[0].ttype);
;}
break;
case 710:
#line 2980 "objc/objc-parse.y"
{
! yyval.ttype = objc_get_class_reference (yyvsp[0].ttype);
;}
break;
case 711:
#line 2987 "objc/objc-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[-1].ttype); ;}
break;
case 715:
#line 2998 "objc/objc-parse.y"
{
! yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
;}
break;
case 716:
#line 3005 "objc/objc-parse.y"
{
! yyval.ttype = build_tree_list (yyvsp[-1].ttype, NULL_TREE);
;}
break;
case 717:
#line 3009 "objc/objc-parse.y"
{
! yyval.ttype = build_tree_list (NULL_TREE, NULL_TREE);
;}
break;
case 718:
#line 3016 "objc/objc-parse.y"
{
! yyval.ttype = yyvsp[-1].ttype;
;}
break;
case 719:
#line 3023 "objc/objc-parse.y"
{
! yyval.ttype = yyvsp[-1].ttype;
;}
break;
case 720:
#line 3032 "objc/objc-parse.y"
{
! yyval.ttype = groktypename (yyvsp[-1].typenametype);
;}
break;
}
! /* Line 991 of yacc.c. */
! #line 6338 "objc/objc-parse.c"
yyvsp -= yylen;
yyssp -= yylen;
*************** yyerrlab:
*** 6409,6441 ****
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
- const char* yyprefix;
char *yymsg;
! int yyx;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! int yyxbegin = yyn < 0 ? -yyn : 0;
!
! /* Stay within bounds of both yycheck and yytname. */
! int yychecklim = YYLAST - yyn;
! int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
! int yycount = 0;
!
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! {
! yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
! yycount += 1;
! if (yycount == 5)
! {
! yysize = 0;
! break;
! }
! }
! yysize += (sizeof ("syntax error, unexpected ")
! + yystrlen (yytname[yytype]));
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
--- 6376,6393 ----
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
char *yymsg;
! int yyx, yycount;
+ yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! yysize += yystrlen (yytname[yyx]) + 15, yycount++;
! yysize += yystrlen ("syntax error, unexpected ") + 1;
! yysize += yystrlen (yytname[yytype]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
*************** yyerrlab:
*** 6444,6456 ****
if (yycount < 5)
{
! yyprefix = ", expecting ";
! for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! yyp = yystpcpy (yyp, yyprefix);
yyp = yystpcpy (yyp, yytname[yyx]);
! yyprefix = " or ";
}
}
yyerror (yymsg);
--- 6396,6411 ----
if (yycount < 5)
{
! yycount = 0;
! for (yyx = yyn < 0 ? -yyn : 0;
! yyx < (int) (sizeof (yytname) / sizeof (char *));
! yyx++)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
! const char *yyq = ! yycount ? ", expecting " : " or ";
! yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
! yycount++;
}
}
yyerror (yymsg);
*************** yyerrlab:
*** 6468,6525 ****
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse look-ahead token after an
error, discard it. */
! if (yychar <= YYEOF)
{
! /* If at end of input, pop the error token,
! then the rest of the stack, then return failure. */
! if (yychar == YYEOF)
! for (;;)
! {
!
! YYPOPSTACK;
! if (yyssp == yyss)
! YYABORT;
! yydestruct ("Error: popping",
! yystos[*yyssp], yyvsp);
! }
}
! else
! {
! yydestruct ("Error: discarding", yytoken, &yylval);
! yychar = YYEMPTY;
! }
}
! /* Else will try to reuse look-ahead token after shifting the error
token. */
! goto yyerrlab1;
! /*---------------------------------------------------.
! | yyerrorlab -- error raised explicitly by YYERROR. |
! `---------------------------------------------------*/
! yyerrorlab:
! #ifdef __GNUC__
! /* Pacify GCC when the user code never invokes YYERROR and the label
! yyerrorlab therefore never appears in user code. */
! if (0)
! goto yyerrorlab;
#endif
- yyvsp -= yylen;
- yyssp -= yylen;
- yystate = *yyssp;
- goto yyerrlab1;
! /*-------------------------------------------------------------.
! | yyerrlab1 -- common code for both syntax error and YYERROR. |
! `-------------------------------------------------------------*/
! yyerrlab1:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
--- 6423,6477 ----
if (yyerrstatus == 3)
{
! /* If just tried and failed to reuse lookahead token after an
error, discard it. */
! /* Return failure if at end of input. */
! if (yychar == YYEOF)
{
! /* Pop the error token. */
! YYPOPSTACK;
! /* Pop the rest of the stack. */
! while (yyss < yyssp)
! {
! YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
! yydestruct (yystos[*yyssp], yyvsp);
! YYPOPSTACK;
! }
! YYABORT;
}
!
! YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
! yydestruct (yytoken, &yylval);
! yychar = YYEMPTY;
!
}
! /* Else will try to reuse lookahead token after shifting the error
token. */
! goto yyerrlab2;
! /*----------------------------------------------------.
! | yyerrlab1 -- error raised explicitly by an action. |
! `----------------------------------------------------*/
! yyerrlab1:
! /* Suppress GCC warning that yyerrlab1 is unused when no action
! invokes YYERROR. */
! #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) \
! && !defined __cplusplus
! __attribute__ ((__unused__))
#endif
+ goto yyerrlab2;
!
! /*---------------------------------------------------------------.
! | yyerrlab2 -- pop states until the error token can be shifted. |
! `---------------------------------------------------------------*/
! yyerrlab2:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
*************** yyerrlab1:
*** 6540,6560 ****
if (yyssp == yyss)
YYABORT;
- yydestruct ("Error: popping", yystos[yystate], yyvsp);
- YYPOPSTACK;
- yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
! *++yyvsp = yylval;
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
yystate = yyn;
goto yynewstate;
--- 6492,6512 ----
if (yyssp == yyss)
YYABORT;
+ YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+ yydestruct (yystos[yystate], yyvsp);
+ yyvsp--;
+ yystate = *--yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
if (yyn == YYFINAL)
YYACCEPT;
! YYDPRINTF ((stderr, "Shifting error token, "));
+ *++yyvsp = yylval;
yystate = yyn;
goto yynewstate;
*************** yyacceptlab:
*** 6571,6579 ****
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
yyabortlab:
- yydestruct ("Error: discarding lookahead",
- yytoken, &yylval);
- yychar = YYEMPTY;
yyresult = 1;
goto yyreturn;
--- 6523,6528 ----
diff -Nrcpad gcc-4.0.3/gcc/optabs.c gcc-4.0.4/gcc/optabs.c
*** gcc-4.0.3/gcc/optabs.c 2006-01-08 20:55:39.000000000 +0000
--- gcc-4.0.4/gcc/optabs.c 2006-07-26 13:35:34.000000000 +0000
*************** expand_doubleword_shift (enum machine_mo
*** 739,746 ****
--- 739,748 ----
subword_label = gen_label_rtx ();
done_label = gen_label_rtx ();
+ NO_DEFER_POP;
do_compare_rtx_and_jump (cmp1, cmp2, cmp_code, false, op1_mode,
0, 0, subword_label);
+ OK_DEFER_POP;
if (!expand_superword_shift (binoptab, outof_input, superword_op1,
outof_target, into_target,
*************** expand_binop (enum machine_mode mode, op
*** 1148,1154 ****
if (expand_doubleword_shift (op1_mode, binoptab,
outof_input, into_input, op1,
outof_target, into_target,
! unsignedp, methods, shift_mask))
{
insns = get_insns ();
end_sequence ();
--- 1150,1156 ----
if (expand_doubleword_shift (op1_mode, binoptab,
outof_input, into_input, op1,
outof_target, into_target,
! unsignedp, next_methods, shift_mask))
{
insns = get_insns ();
end_sequence ();
diff -Nrcpad gcc-4.0.3/gcc/po/ChangeLog gcc-4.0.4/gcc/po/ChangeLog
*** gcc-4.0.3/gcc/po/ChangeLog 2006-03-09 20:44:13.000000000 +0000
--- gcc-4.0.4/gcc/po/ChangeLog 2007-01-31 10:21:33.000000000 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
2006-03-09 Release Manager
* GCC 4.0.3 released.
diff -Nrcpad gcc-4.0.3/gcc/reorg.c gcc-4.0.4/gcc/reorg.c
*** gcc-4.0.3/gcc/reorg.c 2005-10-20 12:18:05.000000000 +0000
--- gcc-4.0.4/gcc/reorg.c 2006-08-11 19:04:04.000000000 +0000
*************** relax_delay_slots (rtx first)
*** 3374,3385 ****
continue;
}
! /* See if this jump (with its delay slots) branches around another
! jump (without delay slots). If so, invert this jump and point
! it to the target of the second jump. We cannot do this for
! annulled jumps, though. Again, don't convert a jump to a RETURN
! here. */
if (! INSN_ANNULLED_BRANCH_P (delay_insn)
&& next && JUMP_P (next)
&& (simplejump_p (next) || GET_CODE (PATTERN (next)) == RETURN)
&& next_active_insn (target_label) == next_active_insn (next)
--- 3374,3386 ----
continue;
}
! /* See if this jump (with its delay slots) conditionally branches
! around an unconditional jump (without delay slots). If so, invert
! this jump and point it to the target of the second jump. We cannot
! do this for annulled jumps, though. Again, don't convert a jump to
! a RETURN here. */
if (! INSN_ANNULLED_BRANCH_P (delay_insn)
+ && any_condjump_p (delay_insn)
&& next && JUMP_P (next)
&& (simplejump_p (next) || GET_CODE (PATTERN (next)) == RETURN)
&& next_active_insn (target_label) == next_active_insn (next)
diff -Nrcpad gcc-4.0.3/gcc/simplify-rtx.c gcc-4.0.4/gcc/simplify-rtx.c
*** gcc-4.0.3/gcc/simplify-rtx.c 2005-09-06 19:44:44.000000000 +0000
--- gcc-4.0.4/gcc/simplify-rtx.c 2007-01-25 19:05:19.000000000 +0000
*************** simplify_const_relational_operation (enu
*** 3017,3035 ****
a register or a CONST_INT, this can't help; testing for these cases will
prevent infinite recursion here and speed things up.
! If CODE is an unsigned comparison, then we can never do this optimization,
! because it gives an incorrect result if the subtraction wraps around zero.
! ANSI C defines unsigned operations such that they never overflow, and
! thus such cases can not be ignored; but we cannot do it even for
! signed comparisons for languages such as Java, so test flag_wrapv. */
! if (!flag_wrapv && INTEGRAL_MODE_P (mode) && trueop1 != const0_rtx
&& ! ((REG_P (op0) || GET_CODE (trueop0) == CONST_INT)
&& (REG_P (op1) || GET_CODE (trueop1) == CONST_INT))
&& 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1))
! /* We cannot do this for == or != if tem is a nonzero address. */
! && ((code != EQ && code != NE) || ! nonzero_address_p (tem))
! && code != GTU && code != GEU && code != LTU && code != LEU)
return simplify_const_relational_operation (signed_condition (code),
mode, tem, const0_rtx);
--- 3017,3034 ----
a register or a CONST_INT, this can't help; testing for these cases will
prevent infinite recursion here and speed things up.
! We can only do this for EQ and NE comparisons as otherwise we may
! lose or introduce overflow which we cannot disregard as undefined as
! we do not know the signedness of the operation on either the left or
! the right hand side of the comparison. */
! if (INTEGRAL_MODE_P (mode) && trueop1 != const0_rtx
! && (code == EQ || code == NE)
&& ! ((REG_P (op0) || GET_CODE (trueop0) == CONST_INT)
&& (REG_P (op1) || GET_CODE (trueop1) == CONST_INT))
&& 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1))
! /* We cannot do this if tem is a nonzero address. */
! && ! nonzero_address_p (tem))
return simplify_const_relational_operation (signed_condition (code),
mode, tem, const0_rtx);
diff -Nrcpad gcc-4.0.3/gcc/stmt.c gcc-4.0.4/gcc/stmt.c
*** gcc-4.0.3/gcc/stmt.c 2006-01-03 09:30:18.000000000 +0000
--- gcc-4.0.4/gcc/stmt.c 2006-05-22 16:53:38.000000000 +0000
*************** expand_asm_operands (tree string, tree o
*** 664,670 ****
CLEAR_HARD_REG_SET (clobbered_regs);
for (tail = clobbers; tail; tail = TREE_CHAIN (tail))
{
! const char *regname = TREE_STRING_POINTER (TREE_VALUE (tail));
i = decode_reg_name (regname);
if (i >= 0 || i == -4)
--- 664,674 ----
CLEAR_HARD_REG_SET (clobbered_regs);
for (tail = clobbers; tail; tail = TREE_CHAIN (tail))
{
! const char *regname;
!
! if (TREE_VALUE (tail) == error_mark_node)
! return;
! regname = TREE_STRING_POINTER (TREE_VALUE (tail));
i = decode_reg_name (regname);
if (i >= 0 || i == -4)
*************** emit_case_bit_tests (tree index_type, tr
*** 2275,2281 ****
#define HAVE_tablejump 0
#endif
! /* Terminate a case (Pascal) or switch (C) statement
in which ORIG_INDEX is the expression to be tested.
If ORIG_TYPE is not NULL, it is the original ORIG_INDEX
type as given in the source before any compiler conversions.
--- 2279,2285 ----
#define HAVE_tablejump 0
#endif
! /* Terminate a case (Pascal/Ada) or switch (C) statement
in which ORIG_INDEX is the expression to be tested.
If ORIG_TYPE is not NULL, it is the original ORIG_INDEX
type as given in the source before any compiler conversions.
*************** expand_case (tree exp)
*** 2337,2346 ****
for (i = TREE_VEC_LENGTH (vec) - 1; --i >= 0; )
{
elt = TREE_VEC_ELT (vec, i);
! gcc_assert (CASE_LOW (elt));
! case_list = add_case_node (case_list, index_type,
! CASE_LOW (elt), CASE_HIGH (elt),
CASE_LABEL (elt));
}
--- 2341,2358 ----
for (i = TREE_VEC_LENGTH (vec) - 1; --i >= 0; )
{
+ tree low, high;
elt = TREE_VEC_ELT (vec, i);
!
! low = CASE_LOW (elt);
! gcc_assert (low);
! high = CASE_HIGH (elt);
!
! /* Discard empty ranges. */
! if (high && INT_CST_LT (high, low))
! continue;
!
! case_list = add_case_node (case_list, index_type, low, high,
CASE_LABEL (elt));
}
*************** emit_case_nodes (rtx index, case_node_pt
*** 2930,2935 ****
--- 2942,2951 ----
enum machine_mode mode = GET_MODE (index);
enum machine_mode imode = TYPE_MODE (index_type);
+ /* Handle indices detected as constant during RTL expansion. */
+ if (mode == VOIDmode)
+ mode = imode;
+
/* See if our parents have already tested everything for us.
If they have, emit an unconditional jump for this node. */
if (node_is_bounded (node, index_type))
diff -Nrcpad gcc-4.0.3/gcc/stor-layout.c gcc-4.0.4/gcc/stor-layout.c
*** gcc-4.0.3/gcc/stor-layout.c 2005-10-12 13:04:40.000000000 +0000
--- gcc-4.0.4/gcc/stor-layout.c 2006-10-09 00:30:11.000000000 +0000
*************** relayout_decl (tree decl)
*** 480,486 ****
{
DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
DECL_MODE (decl) = VOIDmode;
! DECL_ALIGN (decl) = 0;
SET_DECL_RTL (decl, 0);
layout_decl (decl, 0);
--- 480,487 ----
{
DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
DECL_MODE (decl) = VOIDmode;
! if (!DECL_USER_ALIGN (decl))
! DECL_ALIGN (decl) = 0;
SET_DECL_RTL (decl, 0);
layout_decl (decl, 0);
*************** finalize_type_size (tree type)
*** 1418,1423 ****
--- 1419,1426 ----
void
finish_record_layout (record_layout_info rli, int free_p)
{
+ tree variant;
+
/* Compute the final size. */
finalize_record_size (rli);
*************** finish_record_layout (record_layout_info
*** 1427,1432 ****
--- 1430,1441 ----
/* Perform any last tweaks to the TYPE_SIZE, etc. */
finalize_type_size (rli->t);
+ /* Propagate TYPE_PACKED to variants. With C++ templates,
+ handle_packed_attribute is too early to do this. */
+ for (variant = TYPE_NEXT_VARIANT (rli->t); variant;
+ variant = TYPE_NEXT_VARIANT (variant))
+ TYPE_PACKED (variant) = TYPE_PACKED (rli->t);
+
/* Lay out any static members. This is done now because their type
may use the record's type. */
while (rli->pending_statics)
diff -Nrcpad gcc-4.0.3/gcc/testsuite/ChangeLog gcc-4.0.4/gcc/testsuite/ChangeLog
*** gcc-4.0.3/gcc/testsuite/ChangeLog 2006-03-09 20:44:25.000000000 +0000
--- gcc-4.0.4/gcc/testsuite/ChangeLog 2007-01-31 10:22:23.000000000 +0000
***************
*** 1,3 ****
--- 1,867 ----
+ 2007-01-31 Release Manager
+
+ * GCC 4.0.4 released.
+
+ 2007-01-27 Volker Reichelt
+
+ Backport:
+ 2006-11-13 Mark Mitchell
+
+ PR c++/29106
+ * init.c (constant_value_1): Treat a DECL_INITIAL of
+ error_mark_node as meaning that the variable is uninitialized,
+ rather than erroneously initialized.
+
+ 2006-08-27 Simon Martin
+
+ PR c++/28284
+ * pt.c (fold_non_dependent_expr): Make sure expr is not dereferenced if it
+ is NULL.
+
+ 2007-01-25 Richard Guenther