summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--giscanner/scannerlexer.l1
-rw-r--r--tests/scanner/test_sourcescanner.py13
2 files changed, 14 insertions, 0 deletions
diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l
index c2fb7234..42e79d42 100644
--- a/giscanner/scannerlexer.l
+++ b/giscanner/scannerlexer.l
@@ -173,6 +173,7 @@ stringtext ([^\\\"])|(\\.)
"_Nullable" { /* Ignore */ }
"_Null_unspecified" { /* Ignore */ }
"_Noreturn" { /* Ignore */ }
+"__pragma" { if (!parse_ignored_macro()) REJECT; }
"__restrict" { return RESTRICT; }
"__restrict__" { return RESTRICT; }
"thread_local" { return THREAD_LOCAL; }
diff --git a/tests/scanner/test_sourcescanner.py b/tests/scanner/test_sourcescanner.py
index ecd312e3..2f383af7 100644
--- a/tests/scanner/test_sourcescanner.py
+++ b/tests/scanner/test_sourcescanner.py
@@ -46,6 +46,19 @@ void foo() {
self.assertEqual(len(errors), 1)
self.assertTrue("syntax error" in errors[0])
+ def test_ignore_pragma(self):
+ """Pragma directive and __pragma keyword are ignored"""
+ scanner = self._parse_files("""
+#pragma warning(push)
+void test(void) {
+ __pragma(warning(push))
+ __pragma(warning(disable:6246))
+ __pragma(warning(pop))
+}
+#pragma warning(pop)
+""")
+ self.assertFalse(scanner.get_errors())
+
def test_ignore_typeof(self):
# https://gitlab.gnome.org/GNOME/gobject-introspection/merge_requests/71
scanner = self._parse_files("""