The contents of the string returned by getenv() is not guaranteed across calls to getenv(). The code to handle the CC_PRINT etc env vars calls getenv() and saves the results in just a char *. The string returned by getenv() needs to be copied and saved. Switching the type of the strings from char * to std::string will do this and manage the alloated memory.
Details
Details
Diff Detail
Diff Detail
Time | Test | |
---|---|---|
480 ms | x64 debian > Clang.Driver::cc-print-proc-stat.c Script:
--
: 'RUN: at line 1'; env CC_PRINT_PROC_STAT=1 CC_PRINT_PROC_STAT_FILE=/mnt/disks/ssd0/agent/llvm-project/build/tools/clang/test/Driver/Output/cc-print-proc-stat.c.tmp.csv /mnt/disks/ssd0/agent/llvm-project/build/bin/clang -no-canonical-prefixes -S -o /mnt/disks/ssd0/agent/llvm-project/build/tools/clang/test/Driver/Output/cc-print-proc-stat.c.tmp.s /mnt/disks/ssd0/agent/llvm-project/clang/test/Driver/cc-print-proc-stat.c
| |
500 ms | x64 debian > Clang.Driver::crash-report-with-asserts.c Script:
--
: 'RUN: at line 1'; rm -rf /mnt/disks/ssd0/agent/llvm-project/build/tools/clang/test/Driver/Output/crash-report-with-asserts.c.tmp
| |
450 ms | x64 debian > Clang.Driver::crash-report.c Script:
--
: 'RUN: at line 1'; rm -rf /mnt/disks/ssd0/agent/llvm-project/build/tools/clang/test/Driver/Output/crash-report.c.tmp
| |
490 ms | x64 debian > Clang.Preprocessor::headermap-rel2.c Script:
--
: 'RUN: at line 1'; rm -f /mnt/disks/ssd0/agent/llvm-project/build/tools/clang/test/Preprocessor/Output/headermap-rel2.c.tmp.hmap
| |
40 ms | x64 debian > Flang.Semantics::omp-do05.f90 Script:
--
: 'RUN: at line 1'; /mnt/disks/ssd0/agent/llvm-project/flang/test/Semantics/test_errors.sh /mnt/disks/ssd0/agent/llvm-project/flang/test/Semantics/omp-do05.f90 /mnt/disks/ssd0/agent/llvm-project/build/tools/flang/test/Semantics/Output/omp-do05.f90.tmp /mnt/disks/ssd0/agent/llvm-project/build/bin/f18 -intrinsic-module-directory /mnt/disks/ssd0/agent/llvm-project/build/tools/flang/include/flang -fopenmp
| |
View Full Test Results (12 Failed) |
Event Timeline
clang/include/clang/Driver/Driver.h | ||
---|---|---|
160 | I'm seeing code left unchanged like: TheDriver.CCPrintOptionsFilename = ::getenv("CC_PRINT_OPTIONS_FILE"); Assigning to a std::string from a null char * is known to cause things like Segmentation fault | |
clang/lib/Driver/Compilation.cpp | ||
173 | Please update for the clang-format suggestions. |
Comment Actions
Changed the code checking the env vars so it doesn't assign a null_ptr to the string.
clang/include/clang/Driver/Driver.h | ||
---|---|---|
160 | I've fixed in newest patch. |
Comment Actions
LGTM; thanks.
clang/lib/Driver/Driver.cpp | ||
---|---|---|
4043 | Just noting that this means having the environment variable set (but empty) will now "work" instead of generating an error. |