brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 9a95ce6 Raw
59 lines · cpp
1// RUN: rm -rf %t && mkdir %t2// RUN: mkdir -p %t/ctudir3// RUN: %clang_cc1 -std=c++14 -triple x86_64-pc-linux-gnu \4// RUN:   -emit-pch -o %t/ctudir/ctu-onego-indirect-other.cpp.ast %S/Inputs/ctu-onego-indirect-other.cpp5// RUN: cp %S/Inputs/ctu-onego-indirect-other.cpp.externalDefMap.ast-dump.txt %t/ctudir/externalDefMap.txt6 7int bar();8 9// Here we have a foreign function `bar` that is imported when we analyze10// `adirectbaruser`. During the subsequent toplevel analysis of `baruser` we11// should bifurcate on the call of `bar`.12 13//Ensure the order of the toplevel analyzed functions.14// RUN: %clang_analyze_cc1 -std=c++14 -triple x86_64-pc-linux-gnu \15// RUN:   -analyzer-checker=core,debug.ExprInspection \16// RUN:   -analyzer-config eagerly-assume=false \17// RUN:   -analyzer-config experimental-enable-naive-ctu-analysis=true \18// RUN:   -analyzer-config ctu-dir=%t/ctudir \19// RUN:   -analyzer-display-progress \20// RUN:   -analyzer-inlining-mode=all \21// RUN:   -analyzer-config ctu-phase1-inlining=none \22// RUN:   -analyzer-config ctu-max-nodes-pct=100 \23// RUN:   -analyzer-config ctu-max-nodes-min=1000 2>&1 %s | FileCheck %s24// CHECK: ANALYZE (Path,  Inline_Regular):{{.*}}adirectbaruser(int)25// CHECK: ANALYZE (Path,  Inline_Regular):{{.*}}baruser(int)26 27// RUN: %clang_analyze_cc1 -std=c++14 -triple x86_64-pc-linux-gnu \28// RUN:   -analyzer-checker=core,debug.ExprInspection \29// RUN:   -analyzer-config eagerly-assume=false \30// RUN:   -analyzer-config experimental-enable-naive-ctu-analysis=true \31// RUN:   -analyzer-config ctu-dir=%t/ctudir \32// RUN:   -analyzer-display-progress \33// RUN:   -analyzer-inlining-mode=all \34// RUN:   -analyzer-config ctu-phase1-inlining=none \35// RUN:   -verify %s \36// RUN:   -analyzer-config ctu-max-nodes-pct=100 \37// RUN:   -analyzer-config ctu-max-nodes-min=100038 39 40void other(); // Defined in the other TU.41 42void clang_analyzer_eval(int);43 44void baruser(int x) {45  if (x == 1)46    return;47  int y = bar();48  clang_analyzer_eval(y == 0); // expected-warning{{TRUE}}49                               // expected-warning@-1{{UNKNOWN}}50  other();51}52 53void adirectbaruser(int) {54  int y = bar();55  (void)y;56  baruser(1);57}58 59