File tree Expand file tree Collapse file tree 2 files changed +33
-1
lines changed Expand file tree Collapse file tree 2 files changed +33
-1
lines changed Original file line number Diff line number Diff line change @@ -263,7 +263,12 @@ void Preprocessor::Handle_Pragma(Token &Tok) {
263
263
}
264
264
265
265
SourceLocation RParenLoc = Tok.getLocation ();
266
- std::string StrVal = getSpelling (StrTok);
266
+ bool Invalid = false ;
267
+ std::string StrVal = getSpelling (StrTok, &Invalid);
268
+ if (Invalid) {
269
+ Diag (PragmaLoc, diag::err__Pragma_malformed);
270
+ return ;
271
+ }
267
272
268
273
// The _Pragma is lexically sound. Destringize according to C11 6.10.9.1:
269
274
// "The string literal is destringized by deleting any encoding prefix,
Original file line number Diff line number Diff line change
1
+ // RUN: rm -rf %t
2
+ // RUN: split-file %s %t
3
+
4
+ // RUN: %clang_cc1 -emit-module -x c -fmodules -I %t/Inputs -fmodule-name=aa %t/Inputs/module.modulemap -o %t/aa.pcm
5
+ // RUN: rm %t/Inputs/b.h
6
+ // RUN: not %clang_cc1 -E -fmodules -I %t/Inputs -fmodule-file=%t/aa.pcm %s -o - -fallow-pcm-with-compiler-errors 2>&1 | FileCheck %s
7
+
8
+ //--- Inputs/module.modulemap
9
+ module aa {
10
+ header "a.h"
11
+ header "b.h"
12
+ }
13
+
14
+ //--- Inputs/a.h
15
+ #define TEST (x ) x
16
+
17
+ //--- Inputs/b.h
18
+ #define SUB "mypragma"
19
+
20
+ //--- test.c
21
+ #include "a.h"
22
+
23
+ _Pragma (SUB );
24
+ int a = TEST (SUB );
25
+
26
+ // CHECK: int a
27
+ // CHECK: 1 error generated
You can’t perform that action at this time.
0 commit comments