aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorHristian Kirtchev <kirtchev@adacore.com>2012-11-06 09:38:48 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2012-11-06 10:38:48 +0100
commit055311ddefe5674b074075c3720e23693370f062 (patch)
treeb9817122586a3f0601f0d20ac365e8d6d4be3898 /gcc
parent41c15e3eaa8aae1f9d534246833510fb38cf30a1 (diff)
downloadgcc-055311ddefe5674b074075c3720e23693370f062.zip
gcc-055311ddefe5674b074075c3720e23693370f062.tar.gz
gcc-055311ddefe5674b074075c3720e23693370f062.tar.bz2
sem_prag.adb (Analyze_Pragma): Do not output the characters of an illegal argument as it may not have...
2012-11-06 Hristian Kirtchev <kirtchev@adacore.com> * sem_prag.adb (Analyze_Pragma): Do not output the characters of an illegal argument as it may not have characters to begin with. 2012-11-06 Hristian Kirtchev <kirtchev@adacore.com> * exp_prag.adb (Expand_Pragma_Loop_Assertion): Change the order of argument processing to avoid disappearing increase / decrease expressions. From-SVN: r193212
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog12
-rw-r--r--gcc/ada/exp_prag.adb22
-rw-r--r--gcc/ada/sem_prag.adb10
3 files changed, 32 insertions, 12 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index bf1db35..a07bc70 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,17 @@
2012-11-06 Hristian Kirtchev <kirtchev@adacore.com>
+ * sem_prag.adb (Analyze_Pragma): Do not
+ output the characters of an illegal argument as it may not have
+ characters to begin with.
+
+2012-11-06 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * exp_prag.adb (Expand_Pragma_Loop_Assertion):
+ Change the order of argument processing to avoid disappearing
+ increase / decrease expressions.
+
+2012-11-06 Hristian Kirtchev <kirtchev@adacore.com>
+
* exp_prag.adb: Add with and use clause for Sem_Ch8.
(Expand_N_Pragma): Add a new variant to expand pragma Loop_Assertion.
(Expand_Pragma_Loop_Assertion): New routine.
diff --git a/gcc/ada/exp_prag.adb b/gcc/ada/exp_prag.adb
index e7b16a9..ae743c3 100644
--- a/gcc/ada/exp_prag.adb
+++ b/gcc/ada/exp_prag.adb
@@ -1076,10 +1076,12 @@ package body Exp_Prag is
Arg := First (Args);
while Present (Arg) loop
- if No (Invar) or else Chars (Arg) = Name_Invariant then
- Invar := Expression (Arg);
- else
+ if Chars (Arg) = Name_Increases
+ or else Chars (Arg) = Name_Decreases
+ then
Process_Increase_Decrease (Arg, Is_Last => Arg = Last_Arg);
+ else
+ Invar := Expression (Arg);
end if;
Next (Arg);
@@ -1088,12 +1090,14 @@ package body Exp_Prag is
-- Verify the invariant expression, generate:
-- pragma Assert (<Invar>);
- Insert_Action (N,
- Make_Pragma (Loc,
- Chars => Name_Assert,
- Pragma_Argument_Associations => New_List (
- Make_Pragma_Argument_Association (Loc,
- Expression => Relocate_Node (Invar)))));
+ if Present (Invar) then
+ Insert_Action (N,
+ Make_Pragma (Loc,
+ Chars => Name_Assert,
+ Pragma_Argument_Associations => New_List (
+ Make_Pragma_Argument_Association (Loc,
+ Expression => Relocate_Node (Invar)))));
+ end if;
-- Construct the segment which stores the old values of all expressions.
-- Generate:
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 2d66057..c2392cb 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -11335,8 +11335,12 @@ package body Sem_Prag is
-- relocated during expansion and analyzed in their new
-- context.
- if Chars (Arg) = Name_Invariant or else Arg_Count = 1 then
-
+ if Chars (Arg) = Name_Invariant
+ or else
+ (Arg_Count = 1
+ and then Chars (Arg) /= Name_Increases
+ and then Chars (Arg) /= Name_Decreases)
+ then
-- Only one invariant is allowed in the pragma
if Seen then
@@ -11355,7 +11359,7 @@ package body Sem_Prag is
-- Illegal argument
else
- Error_Pragma_Arg ("argument & not allowed in pragma %", Arg);
+ Error_Pragma_Arg ("argument not allowed in pragma %", Arg);
end if;
Next (Arg);