mirror of
https://github.com/github/codeql.git
synced 2026-04-25 16:55:19 +02:00
C++: Update PreprocBlock.qll QLDoc and add C++23 test
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
/**
|
||||
* This library offers a view of preprocessor branches (`#if`, `#ifdef`,
|
||||
* `#ifndef`, `#elif` and `#else`) as blocks of code between the opening and
|
||||
* closing directives, with navigable parent-child relationships to other
|
||||
* blocks. The main class is `PreprocessorBlock`.
|
||||
* `#ifndef`, `#elif`, `#elifdef`, `#elifndef`, and `#else`) as blocks of
|
||||
* code between the opening and closing directives, with navigable
|
||||
* parent-child relationships to other blocks. The main class is
|
||||
* `PreprocessorBlock`.
|
||||
*/
|
||||
|
||||
import cpp
|
||||
@@ -32,10 +33,10 @@ private int getPreprocIndex(PreprocessorBranchDirective directive) {
|
||||
|
||||
/**
|
||||
* A chunk of code from one preprocessor branch (`#if`, `#ifdef`,
|
||||
* `#ifndef`, `#elif` or `#else`) to the directive that closes it
|
||||
* (`#elif`, `#else` or `#endif`). The `getParent()` method
|
||||
* allows these blocks to be navigated as a tree, with the root
|
||||
* being the entire file.
|
||||
* `#ifndef`, `#elif`, `#elifdef`, `#elifndef`, or `#else`) to the
|
||||
* directive that closes it (`#elif`, `#elifdef`, `#elifndef`, `#else`,
|
||||
* or `#endif`). The `getParent()` method allows these blocks to be
|
||||
* navigated as a tree, with the root being the entire file.
|
||||
*/
|
||||
class PreprocessorBlock extends @element {
|
||||
PreprocessorBlock() {
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
| #elif defined GREEN | preprocblock.cpp:10:0:11:0 | #ifndef BLUE |
|
||||
| #elif defined GREEN | preprocblock.cpp:14:0:15:0 | #if 0 |
|
||||
| #elif defined GREEN | preprocblock.cpp:16:0:17:0 | #else |
|
||||
| #elifdef GREEN | preprocblock23.cpp:11:0:12:0 | #if 0 |
|
||||
| #elifdef GREEN | preprocblock23.cpp:13:0:14:0 | #elifndef BLUE |
|
||||
| (no parent) | file://:0:0:0:0 | |
|
||||
| (no parent) | header.h:0:0:8:0 | header.h |
|
||||
| (no parent) | preprocblock23.cpp:0:0:22:0 | preprocblock23.cpp |
|
||||
| (no parent) | preprocblock.cpp:0:0:25:0 | preprocblock.cpp |
|
||||
| header.h | header.h:3:0:7:0 | #ifndef HEADER_H |
|
||||
| preprocblock23.cpp | preprocblock23.cpp:7:0:7:0 | #ifdef RED |
|
||||
| preprocblock23.cpp | preprocblock23.cpp:8:0:17:0 | #elifdef GREEN |
|
||||
| preprocblock23.cpp | preprocblock23.cpp:18:0:21:0 | #else |
|
||||
| preprocblock.cpp | preprocblock.cpp:6:0:6:0 | #ifdef RED |
|
||||
| preprocblock.cpp | preprocblock.cpp:7:0:20:0 | #elif defined GREEN |
|
||||
| preprocblock.cpp | preprocblock.cpp:21:0:24:0 | #else |
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
// preprocblock23.cpp
|
||||
// semmle-extractor-options: -std=c++23
|
||||
|
||||
#include "header.h"
|
||||
#define GREEN
|
||||
|
||||
#ifdef RED
|
||||
#elifdef GREEN
|
||||
#include "header.h"
|
||||
|
||||
#if 0
|
||||
#include "header.h" // not reached
|
||||
#elifndef BLUE
|
||||
#include "header.h"
|
||||
#endif
|
||||
|
||||
#include "header.h"
|
||||
#else
|
||||
|
||||
// ...
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,7 @@
|
||||
| preprocblock23.cpp:4:1:4:19 | #include "header.h" | preprocblock23.cpp:0:0:22:0 | preprocblock23.cpp |
|
||||
| preprocblock23.cpp:9:2:9:20 | #include "header.h" | preprocblock23.cpp:8:0:17:0 | #elifdef GREEN |
|
||||
| preprocblock23.cpp:14:3:14:21 | #include "header.h" | preprocblock23.cpp:13:0:14:0 | #elifndef BLUE |
|
||||
| preprocblock23.cpp:17:2:17:20 | #include "header.h" | preprocblock23.cpp:8:0:17:0 | #elifdef GREEN |
|
||||
| preprocblock.cpp:3:1:3:19 | #include "header.h" | preprocblock.cpp:0:0:25:0 | preprocblock.cpp |
|
||||
| preprocblock.cpp:8:2:8:20 | #include "header.h" | preprocblock.cpp:7:0:20:0 | #elif defined GREEN |
|
||||
| preprocblock.cpp:11:3:11:21 | #include "header.h" | preprocblock.cpp:10:0:11:0 | #ifndef BLUE |
|
||||
|
||||
Reference in New Issue
Block a user