Compiling wrong_aspect.ads must yield:
wrong_aspect.ads:8:62: aspect identifier expected
wrong_aspect.ads:10:50: aspect identifier expected
wrong_aspect.ads:12:50: aspect identifier expected
---
package Wrong_Aspect is
type Bits_1 is mod 2**1 with Size => 1;
type Bits_2 is mod 2**2 with Size => 2;
type Bits_4 is mod 2**4 with Size => 4;
type Word_1 is array (0 .. 31) of Bits_1 with Size => 32, Pack;
type Word_2 is array (0 .. 15) of Bits_2 with Size => 32, Packed;
type Word_3 is array (0 .. 15) of Bits_2 with Packed;
type Word_4 is array (0 .. 7) of Bits_4 with Packed, Size => 32;
end Wrong_Aspect;
Tested on x86_64-pc-linux-gnu, committed on trunk
2013-10-10 Ed Schonberg <[email protected]>
* par-ch13.adb (Aspect_Specifications_Present): In Ada 2012,
recognize an aspect specification with a misspelled name if it
is followed by a a comma or semicolon.
Index: par-ch13.adb
===================================================================
--- par-ch13.adb (revision 203342)
+++ par-ch13.adb (working copy)
@@ -78,15 +78,19 @@
-- are in Ada 2012 mode, Strict is False, and we consider that we have
-- an aspect specification if the identifier is an aspect name (even if
-- not followed by =>) or the identifier is not an aspect name but is
- -- followed by =>. P_Aspect_Specifications will generate messages if the
- -- aspect specification is ill-formed.
+ -- followed by =>, by a comma, or by a semicolon. The last two cases
+ -- correspond to (misspelled) Boolean aspects with a defaulted value of
+ -- True. P_Aspect_Specifications will generate messages if the aspect
+ -- specification is ill-formed.
elsif not Strict then
if Get_Aspect_Id (Token_Name) /= No_Aspect then
Result := True;
else
Scan; -- past identifier
- Result := Token = Tok_Arrow;
+ Result := Token = Tok_Arrow
+ or else Token = Tok_Comma
+ or else Token = Tok_Semicolon;
end if;
-- If earlier than Ada 2012, check for valid aspect identifier (possibly