; Options for the Ada front end.
; Copyright (C) 2003 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC 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, or (at your option) any later
; version.
; 
; GCC 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 GCC; see the file COPYING.  If not, write to the Free
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.

; See c.opt for a description of this file's format.

; Please try to keep this file in ASCII collating order.

Language
Ada

I
Ada Joined Separate
; Documented for C

Wall
Ada
; Documented for C

Wmissing-prototypes
Ada
; Documented for C

Wstrict-prototypes
Ada
; Documented for C

Wwrite-strings
Ada
; Documented for C

Wlong-long
Ada
; Documented for C

nostdinc
Ada RejectNegative
; Don't look for source files

nostdlib
Ada
; Don't look for object files

fRTS
Ada RejectNegative

gant
Ada Joined Undocumented
; Catches typos

gnat
Ada Joined
-gnat<options>	Specify options to GNAT

; This comment is to ensure we retain the blank line above.
