Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions extras/tests/scripts/testTranscriptInitialization.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -euo pipefail

repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
build_dir="$(mktemp -d)"
trap 'rm -rf "${build_dir}"' EXIT

"${CXX:-g++}" \
-std=c++11 -Wall -Wextra -fsanitize=address,undefined \
-I"${repo_dir}/source" \
"${repo_dir}/extras/tests/testTranscriptInitialization.cpp" \
"${repo_dir}/source/Transcript.cpp" \
-o "${build_dir}/testTranscriptInitialization"

ASAN_OPTIONS=detect_leaks=0 UBSAN_OPTIONS=halt_on_error=1 \
"${build_dir}/testTranscriptInitialization"
22 changes: 22 additions & 0 deletions extras/tests/testTranscriptInitialization.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include "Transcript.h"

#include <cstring>
#include <iostream>
#include <new>

int main()
{
alignas(Transcript) unsigned char storage[sizeof(Transcript)];
memset(storage, 0xbe, sizeof(storage));

Transcript *transcript=new (storage) Transcript;
bool initialized=!transcript->sjYes && !transcript->primaryFlag;
transcript->~Transcript();

if (!initialized)
{
std::cerr << "Transcript boolean state was not initialized\n";
return 1;
};
return 0;
}
19 changes: 10 additions & 9 deletions source/STAR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,14 @@ int main(int argInN, char *argIn[])
exit(1);
};

// transcripome placeholder
Transcriptome *transcriptomeMain = NULL;

// this will execute --runMode soloCellFiltering and exit
Solo soloCellFilter(P, *transcriptomeMain);
if (P.runMode == "soloCellFiltering")
{
Transcriptome transcriptomeCellFilter(P);
Solo soloCellFilter(P, transcriptomeCellFilter);
};

Transcriptome *transcriptomeMain = NULL;

////////////////////////////////////////////////////////////////////////
///////////////////////////////// Genome
Expand Down Expand Up @@ -169,10 +172,8 @@ int main(int argInN, char *argIn[])
//////////////////////////////////// 2-pass 1st pass
twoPassRunPass1(P, genomeMain, transcriptomeMain, sjdbLoci);

if (P.quant.yes)
{ // load transcriptome
transcriptomeMain = new Transcriptome(P);
};
// The constructor is a no-op when transcriptome data are not needed.
transcriptomeMain = new Transcriptome(P);

// initialize Stats
g_statsAll.resetN();
Expand Down Expand Up @@ -252,7 +253,7 @@ int main(int argInN, char *argIn[])
outputSJ(RAchunk, P);

// solo counts
Solo soloMain(RAchunk, P, *RAchunk[0]->chunkTr);
Solo soloMain(RAchunk, P, *transcriptomeMain);
soloMain.processAndOutput();

if (P.quant.geCount.yes)
Expand Down
1 change: 1 addition & 0 deletions source/Transcript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ void Transcript::reset() {
// polyXnMM[ii]=0;
// };
primaryFlag=false;
sjYes=false;

rStart=0; roStart=0; rLength=0; gStart=0; gLength=0; //read and genomic coordinates

Expand Down