diff options
author | Eli Bendersky <eliben@google.com> | 2014-06-19 18:30:15 +0000 |
---|---|---|
committer | Eli Bendersky <eliben@google.com> | 2014-06-19 18:30:15 +0000 |
commit | 427d5c99b0408e4ca472b8a65d1fbd15261d7d1a (patch) | |
tree | 264d36c20c2f3a38005efbeba0deee78dc23f8ce /include | |
parent | 47d52751cfb3a2c0491789ccdf097879d92ad0d6 (diff) | |
download | clang-427d5c99b0408e4ca472b8a65d1fbd15261d7d1a.tar.gz clang-427d5c99b0408e4ca472b8a65d1fbd15261d7d1a.tar.bz2 clang-427d5c99b0408e4ca472b8a65d1fbd15261d7d1a.tar.xz |
Fix PR20069: bad loop pragma arguments crash FE
This patch fixes a crash when handling malformed arguments to loop pragmas such
as: "#pragma clang loop vectorize(()". Essentially any argument which is not an
identifier or constant resulted in a crash. This patch also changes a couple of
the error messages which weren't quite correct. New behavior with this patch vs
old behavior:
#pragma clang loop vectorize(1)
OLD: error: missing keyword; expected 'enable' or 'disable'
NEW: error: invalid argument; expected 'enable' or 'disable'
#pragma clang loop vectorize()
OLD: error: expected ')'
NEW: error: missing argument to loop pragma 'vectorize'
#pragma clang loop vectorize_width(bad)
OLD: error: missing value; expected a positive integer value
NEW: error: invalid argument; expected a positive integer value
#pragma clang loop vectorize(bad)
OLD: invalid keyword 'bad'; expected 'enable' or 'disable'
NEW: error: invalid argument; expected 'enable' or 'disable'
http://reviews.llvm.org/D4197
Patch by Mark Heffernan
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211292 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/clang/Basic/DiagnosticParseKinds.td | 2 | ||||
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index 874e0e2049..bc097e0bf3 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -909,6 +909,8 @@ def err_omp_more_one_clause : Error< def err_pragma_loop_invalid_option : Error< "%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, " "vectorize_width, interleave, interleave_count, unroll, or unroll_count">; +def err_pragma_loop_missing_argument : Error< + "missing argument to loop pragma %0">; } // end of Parse Issue category. let CategoryName = "Modules Issue" in { diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 002710e30a..b3a732e9e4 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -543,9 +543,9 @@ def err_pragma_pop_visibility_mismatch : Error< def note_surrounding_namespace_starts_here : Note< "surrounding namespace with visibility attribute starts here">; def err_pragma_loop_invalid_value : Error< - "%select{invalid|missing}0 value%select{ %1|}0; expected a positive integer value">; + "invalid argument; expected a positive integer value">; def err_pragma_loop_invalid_keyword : Error< - "%select{invalid|missing}0 keyword%select{ %1|}0; expected 'enable' or 'disable'">; + "invalid argument; expected 'enable' or 'disable'">; def err_pragma_loop_compatibility : Error< "%select{incompatible|duplicate}0 directives '%1(%2)' and '%3(%4)'">; def err_pragma_loop_precedes_nonloop : Error< |